nimpretty로 Nim의 소스를 깨끗이합니다.

8928 단어 Nim

개요



nimpretty를 사용하여 Nim의 소스를 깨끗이하십시오. 그것, nimble 작업에서.

추가 (2019/10/28)



VSCode로 Nim 확장을 설치하고 있는 경우입니다만, VS 코드의 설정(settings)에서 formatOnSave=True로 하는 것으로, Nim 확장이 NimPretty를 호출해 소스를 깨끗하게 해 주는 것 같습니다.



Nimpretty를 실행하는 Nim 확장의 코드

nimpretty는 무엇입니까?



Nim 0.19.2가 출시되었습니다. 릴리스 노트나 설치 후 bin 디렉토리를 보면 nimpretty라는 모듈을 보았습니다.

@imbsky 씨의 기사 에서 nimpretty라는 단어를 처음으로 보았고, 기사를 보았을 때에는 「훈」정도밖에 생각하지 않았지만,

「아, 이것, Nim의 소스 깨끗하게 해 주는 녀석이다」

그리고 지금 깨달아 시험해 보는 것에.

windows라면...



windows 버전이라면 bin 폴더에 nimpretty가 들어 있지 않았기 때문에 이전 기사와 마찬가지로 nim 폴더 아래에서
koch tools

그리고 두드리면 bin 폴더 아래에 nimpretty가 완성됩니다.

조속히 사용해 보기



완성 된 nimpretty를 --help로 확인
>nimpretty --help
nimpretty - Nim Pretty Printer Version 0.1
  (c) 2017 Andreas Rumpf
Usage:
  nimpretty [options] file.nim
Options:
  --backup:on|off     create a backup file before overwritting (default: ON)
  --output:file       set the output file (default: overwrite the .nim file)
  --indent:N          set the number of spaces that is used for indentation
  --version           show the version
  --help              show this help

--backup:on|off (은)는, 백업 파일을 만들지 어떨지로, 디폴트는 on.
--output:file (은)는, 출력처 파일을 변경하기 위해(때문에).
--indent:N 은 들여쓰기 크기

그럼 바로 어쩔 수없는 nim 소스를 만들어 nimpretty를 시도해 보겠습니다.

sample.nim
import os,   
   strutils

proc hello_world(        name: string)    :     string = 
    result="hello" &    name
nimpretty --indent:2 sample.nim

sample.nim
import os,
   strutils

proc hello_world(name: string): string =
  result = "hello" & name


import문의 개행은 그대로였지만, 여백이나 콜론의 다음의 스페이스, 들여쓰기는 수정되고 있는 것을 확인할 수 있었습니다. 멋지다.

nimble에 pretty 태스크 추가



파일을 하나하나 nimpretty로 지정하는 것도 번거롭기 때문에, nimble 파일에 pretty 태스크를 추가해 보겠습니다.
이 태스크는 프로젝트 폴더 아래의 *.nim 소스를 찾아 nimpretty를 실행합니다.

nimscript 내에서 walkDirRec이 작동하지 않았으므로 util/pretty_files.nim이라는 nim 파일을 태스크에서 실행합니다.

sample.nimble
# util/pretty_files.nimを実行する
task pretty, "ソースの整形" :
  exec "nim c -r --hints:off --verbosity:0 --out:bin/test util/pretty_files"

util/pretty_files.nim
# 再帰的に*.nimを探して、nimprettyの引数にファイル名を渡してフォーマット
import os
import strutils
import osproc

proc pretty_proc(startDir: string) =
  for f in walkDirRec(startDir, yieldFilter = {pcFile}):
    if f.endsWith(".nim"):
      let process = startProcess("nimpretty", startDir, @["--backup:on", f], nil,
          options = {poUsePath, poStdErrToStdOut})
      echo f
      discard process.waitForExit()

when isMainModule:
  let
    cmdArgs = os.commandLineParams()
    target_dir =
      if cmdArgs.len == 1:
        os.expandFilename(cmdArgs[0])
      else:
        os.expandFileName(".")

  echo target_dir
  pretty_proc(target_dir)
else:
  echo "not mainmodule"

pretty 태스크 실행



이런 식으로 실행합니다.
>nimble pretty
  Executing task pretty in nimapp_template\nimapp_template.nimble
nimapp_template
nimapp_template\util\get_version.nim
nimapp_template\util\pretty_files.nim
nimapp_template\util\rename_app.nim
nimapp_template\tests\alltest.nim
nimapp_template\tests\test1.nim
nimapp_template\tests\test2.nim
nimapp_template\src\nimapp_template.nim
nimapp_template\src\nimble_config.nim
nimapp_template\src\nimapp_templatepkg\main.nim
nimapp_template\src\nimapp_templatepkg\private\main_impl.nim

이 태스크가 실행되면 nim.backup이라는 파일도 대량으로 생성됩니다.
이것은 nimpretty를 적용하기 전에 소스가 .backup이라는 확장자로 이름이 바뀌었습니다.

요약



nimpretty의 사용법을 조사해 보았습니다.
Nim 0.19.2의 릴리스 노트를 보면 nimpretty 버그 수정도 자주 수행되는 것 같습니다.
버그 픽스가 많이 나왔기 때문에 슬슬 시들어 왔을까라고 생각해, 이번 시험해 보려고 생각했습니다.

그렇다고는 해도, 소스 코드가 재기록되기 때문에, 불안한 분은 확실히 유닛 테스트등의 코드 써, 품질을 담보하는 편이 좋겠지요. (>자신)

잡하게 쓴 소스에서도 nimpretty를 사용하면 나름대로의 체재가 되는 것은 꽤 매력적이네요.



졸작 Nim의 응용 프로그램 템플릿에도 pretty 작업이 추가되었습니다.

리포지토리
htps : // 기주 b. 코 m / 6 인 / 니마 p_ mp ぁ

템플릿 사용법
htps : // 기주 b. 이 m/6인/에 뭐 p_해서 mpぁ해서/bぉb/마s r/로 MPぁ테-레아 D메. md

좋은 웹페이지 즐겨찾기