ãPythonãã³ãããå·®åã®ã¿blackã§æ´å½¢ãã ãdarkerã
åæ¸ã
ã³ã¼ãã®æ´å½¢ã¯ãã©ã¼ããã¿ã«ä»»ããããã®ã§ãã
çæ³çã«ã¯ãå ¨å¡ãåãã¹ã¿ã¤ã«ã§ã³ã¼ããæ´å½¢ã§ããããã«pre-commitãªã©ãå©ç¨ãã¦ã³ãããæã«ãã©ã¼ããã¿ãèªåå®è¡ãã¾ãã
ãããããã¸ã§ã¯ãã®éä¸åå ãªã©ãå°å ¥ãé£ããã±ã¼ã¹ãããã¨æãã¾ãã
ä»åã®èªåã¯ãããã¸ã§ã¯ãã«ãã©ã¼ããã¿ãå°å ¥ãããã¦ããã
- ããã¦èªåã®ã³ãããåã ãã¯blackã§æ´å½¢ãããã
- å ±éã©ã¤ãã©ãªãæ´æ°æããã¡ã¤ã«åä½ã§ã¯ãªãè¡åä½ã§æ´å½¢ãããã
ã¨ããç¶æ³ã§ããã æ ¹æ¬è§£æ±ºã諦ãã次åã®æ¹æ³ã¯ãªããã¨èª¿ã¹ãã¨ãã darkerã¨ãããblack(ã¨isort)ã®wrapperã©ã¤ãã©ãªãè¯ãããã§ããã
(ãªããDarkerä½è ã¯GitHubã®READMEã«ãæ¬å®¶ã®blackã«ãè¡åä½ã®ãã©ã¼ãããæ©è½ã¯å°æ¥å°å ¥ããããã ã¨è¨åãã¦ãã¾ã.)
darkerã«ã¤ãã¦ã¯æ¥æ¬èªã®æ å ±ãå°ãªãããã ã£ãã®ã§ã試ãã¦ã¿ãå 容ãã¾ã¨ãã¦ãããã¨æãã¾ãã
åèãªã³ã¯
ç°å¢
ãã¼ã¸ã§ã³ | |
---|---|
MacOS Big Sur | 11.6 |
Python3 | 3.10.2 |
darker | 1.3.2 |
black | 21.12b0 |
Pygments | 2.11.2 |
darkerã®ã¤ã³ã¹ãã¼ã«
ã¤ã³ã¹ãã¼ã«
ä»®æ³ç°å¢ãä½ã£ã¦pip installãã¾ãã
$ python3.10 -m venv env $ source env/bin/activate
(env)$ pip install darker
注æ: blackã®ãã¼ã¸ã§ã³ãä¸ããå¿
è¦ããã.(2022-02-05) ä¿®æ£ããã¦ãã¾ã.
(2022-03-04)追è¨: ç¾å¨ã¯ä¿®æ£ããã¦ãã¾ãããã®é ç®ã¯ä¸è¦ã§ãããè¨é²ã¨ãã¦æ®ãã¦ããã¾ãã
2022-02-05 ç¾å¨ããã®ã¾ã¾ã ã¨darkerãå©ç¨ã§ãã¾ããã
darkerã¯blackã®wrapperãªã®ã§ãdarkerãã¤ã³ã¹ãã¼ã«ããã¨ææ°ã®blackãä¸ç·ã«è½ã¨ããã¾ããããããææ°ã®black(ã¤ãã«Î²ãåãã22.1.0
)ã¯def find_project_root
é¢æ°ã®è¿ãå¤ã®åãPathããtupleã«å¤ãã£ã¦ãã¾ããdarerã¯æªå¯¾å¿ã§ãã
ãã¡ãã®ãã«ãªã¯ã§ãæ¢ã«darkerã®ä½è (akaiholaãã)ãä¿®æ£ä¸ã®ããã§ãã 追è¨: ->ããã§ã«ä¿®æ£ããã¦ãã¾ãã
ã¨ããããã¯ãblackã®ãã¼ã¸ã§ã³ãβçã¾ã§è½ã¨ãã°è¯ãã§ãã
(ä½è«ã§ããã以ä¸ã®ããã«ãã¦å®è¡ããã¨installå¯è½ãã¼ã¸ã§ã³ãè¦ããã¨ãã§ãã¦ä¾¿å©ã§ã.(å¤åæ£å½ãªæ¹æ³ã§ã¯ãªãã§ãã...))
(env)$ pip install black== ............................(çç¥)........................... 20.8b1, 21.4b0, 21.4b1, 21.4b2, 21.5b0, 21.5b1, 21.5b2, 21.6b0, 21.7b0, 21.8b0, 21.9b0, 21.10b0, 21.11b0, 21.11b1, 21.12b0, 22.1.0) ERROR: No matching distribution found for black==
ææ°ã®ä¸ååã¯21.12b0
ã§ãã®ã§ããã¡ãã«ãã¦ã³ã°ã¬ã¼ããã¦ããã¾ãã
(env)$ pip install black==21.12b0
Pygmentsã§è²ãã¤ãã
ããã²ã¨æéå ãã¦ãåºåçµæã®è¦ãç®ããããã«ãã¦ããã¾ãã
Pygments ãåãç°å¢ã«ã¤ã³ã¹ãã¼ã«ãã¦ããã¨ãdarkerã¯åºåçµæãã«ã©ã¼ã«ãã¦ããã¾ãã
(env)$ pip install Pygments==2.11.2
ç¹ã«è¨å®ã¯å¿ è¦ããã¾ããã
darkerã®åºåçµæã¯ãå ã ãã®ãããªè¦ãç®ã§ããã
ãã®ããã«å¤ããã¾ãã
使ãæ¹
æ°è¦å·®åãæ´å½¢
ã¾ããdarkerã¯git diff
ãå©ç¨ããã®ã§ããã£ã¬ã¯ããªãgit 管çä¸ã«ããå¿
è¦ãããã¾ãã
é©å½ãªãã£ã¬ã¯ããªãä½æããæåã®ã³ãããã¾ã§æ¸ã¾ãã¦ããã¾ãã(å 容ã¯ãªãã§ãOKã§ã.)
$ git init $ touch README.md $ git add README.md $ git commit -m "first"
ããã§HEADãã§ããã®ã§ãdarkerãå©ç¨ã§ãã¾ãã以ä¸ã®ãããªpythonãã¡ã¤ã«(darker_test.py
)ãä½æãã¾ãã
(ã¨ã«ãã横ã«é·ããããã£ãã ããªã®ã§ãé©å½ã§ã)
def format_name_and_age_to_profile(name: str | None, age: int | None, address: str | None): return f"{name} -- {age} -- {address}"
ä¸æ¦ãããã§ã³ããããã¾ã. darkerããã³ãããå·®åãã«å¹ããã¨ãæ¤è¨¼ãããããã§ãã
$ git add darker_test.py $ git commit -m "ä¸ã¤ç®ã®é¢æ°" $ git log --oneline 7e25910 (HEAD -> master) ä¸ã¤ç®ã®é¢æ° b6bee90 first
ã§ã¯ãdarker_test.pyã«ããä¸ã¤è¨è¿°ãå ãã¦ä»¥ä¸ã®ããã«ãã¾ãã
def format_name_and_age_to_profile(name: str | None, age: int | None, address: str | None): return f"{name} -- {age} -- {address}" def format_name_and_age_to_profile_version_2(name: str | None, age: int | None, address: str | None): return f"{name} -- {age} -- {address}" # 2åç®ã®ã³ããã
ã¾ã ã³ãããã¯ããªãã§ãã ããï¼ (addã¾ã§ã¯OKã§ã.)
ãã㧠darkerã§ä¿®æ£å·®åãåºåãã¦ã¿ã¾ã.
ä»åã¯ä»¥ä¸ã®ããã«ãã«ã¬ã³ããã£ã¬ã¯ããª(.
)ããã¡ã¤ã«ãç´æ¥æå®ãã¾ããã©ã¡ãã§ãçµæã¯å¤ããã¾ãã.
$ darker --diff . # ã«ã¬ã³ããã£ã¬ã¯ã㪠$ darker --diff darker_test.py # ãã¡ã¤ã«æå®.
ä»åã®å¤æ´åã ããæ´å½¢ããã¦ãããã¨ããããã¾ãã æåã«ã³ãããæ¸ã¿ã®ãä¸ã¤ç®ã®é¢æ°ã¯æ´å½¢ããã¦ãã¾ããã
ã¾ãããã®æç¹ã§ã¯å
ãã¡ã¤ã«ã¯å¤æ´ããã¦ãã¾ãããä¿®æ£ããã¡ã¤ã«ã«åæ ããããã°ã--diff
ãªãã·ã§ã³ãå¤ãã¾ãã
$ darker .
æ´å½¢å¾ã¯ä»¥ä¸ã®ããã«ãªãã¾ããäºã¤ç®ã®é¢æ°(ã¾ã ã³ããããã¦ããªãå)ã ãããæ´å½¢ããã¦ãã¾ãã
def format_name_and_age_to_profile(name: str | None, age: int | None, address: str | None): return f"{name} -- {age} -- {address}" def format_name_and_age_to_profile_version_2( name: str | None, age: int | None, address: str | None ): return f"{name} -- {age} -- {address}" # 2åç®ã®ã³ããã
ã§ã¯ä¸æ¦ã³ããããã¦ããã¾ãããã
$ git add . $ git commit -m "äºã¤ç®ã®é¢æ°(æ´å½¢æ¸ã¿)"
ã³ããããæå®ãã¦æ´å½¢
darkerã¯git-diffãå©ç¨ãã¦ããã®ã§ãä¾ãã°ããã³ãããããããã³ãããã¾ã§ã¨ããç¯å²ãæå®ãããã®æã®å¤æ´ãã¿ã¼ã²ããã«æ´å½¢ãå¯è½ã§ãã
å ç¨ã®ã³ããããã°ã¯ä»¥ä¸ã®ããã«ãªã£ã¦ãã¾ãã
$ git log --oneline 8de1f64 (HEAD -> master) äºã¤ç®ã®é¢æ°(æ´å½¢æ¸ã¿) 7e25910 ä¸ã¤ç®ã®é¢æ° b6bee90 first
ä¸ã¤ç®ã®é¢æ°ã¯æ´å½¢ã§ãã¦ããªãã£ãã®ã§ããã¡ããæå®ãã¦æ´å½¢ãè¡ãã¾ããfirstã³ããã(b6bee90)ãã7e25910ã®éã®å¤æ´ãªã®ã§ä»¥ä¸ã®ããã«æå®ãã¾ãã
æå¾ã«PATHãæå®ããå¿
è¦ãããã®ã§ãããç´æ¥ãã¡ã¤ã«å(darker_test.py
)ãæå®ãããã以ä¸ã®ããã«ã¯ã¤ã«ãã«ã¼ãã使ãå¿
è¦ãããã¾ããã
.
(ã«ã¬ã³ããã£ã¬ã¯ããª)æå®ã¯ããªããã§ããªãä»æ§ã®ããã§ããã
$ darker --diff --revision b6bee90..7e25910 * # *.pyãdarker_test.pyã§ã大ä¸å¤«.
ã¾ãhelpãè¦ãã¨ãã³ãããéã¯...(ãããä¸ã¤)ã§åºåãããã«æ¸ãã¦ããã¾ããã(2ã¤ã§ãã§ãã¾ãããéãã¯ä¸æã§ã)
çµæã¯ãæå®ããã³ãããéã§è¨è¿°ããä¸ã¤ç®ã®é¢æ°ãæ´å½¢ããã¦ãã¾ãã
pre-commitã§darkerã使ã
ã¾ãpre-commitã®å°å ¥ã§ãã
å ¬å¼ãã¼ã¸ãã¨ã¦ãããããããã§ãã
(env)$ pip install pre-commit (env)$ pre-commit --version pre-commit 2.17.0
.pre-commit-config.yaml
ã Darkerã®å
¬å¼GitHubã«ããåèä¾ãå
ã«è¨è¿°ãã¾ãã
blackã®ãã¼ã¸ã§ã³ãè½ã¨ãã¦ãã ãã (2022-02-06ç¾å¨. çç±ã¯åè¿°ã®éã.)
repos: - repo: https://github.com/akaihola/darker rev: 1.3.2 hooks: - id: darker additional_dependencies: [black==21.12b0] # ææ°blackã ã¨å¤±æãã.
$ pre-commit install
ã§ã¯darkerã«ã¾ãé·ãååã®é¢æ°ãï¼è¡ã§æ¸ããå®è¡ãã¦ã¿ã¾ãã
ãã¡ãã追è¨ã...
def format_name_and_age_to_profile3(name: str | None, age: int | None, address: str | None): return f"{name} -- {age} -- {address}"
(env)$ git add . (env)$ git commit
çµæãã³ããããã¦ããªãå·®åã®ã¿ããã©ã¼ãããããã¦ããã¯ãã§ãã
ããããèªåã ãã³ã¼ãæ´å½¢ãããã¨ã«æå³ã¯ãããï¼
ååã®æ¹ã«ãç¸è«ããã¦ããã ããã®ã§ããã
- ããããèªåãã©ã¼ãããã¯ã¬ãã¥ã¼ã®è² æ 軽æ¸ã®ããã«ãã£ã¦ãã.
- ãã¼ã ã§ã³ã¼ããçµ±ä¸ãããã¨ãç®ç.
ã¨ããææãããã ãã¾ããã
å ¨ããã®éãã§ãæ¬å½ã¯ããã¸ã§ã¯ãå ¨ä½ã§è¨å®ãã¡ã¤ã«ãå ±æããpre-commitã§black/isort/flake8/mypyããããããããã¨ãèªåãã©ã¼ãããã®ç®çã«å³ãã¦ããã¨æãã¾ãã
èªåã®å ´åã
- æ¢åã®pythonã³ã¼ãã¯ãã©ã¼ããã¿ãªã©ãé©å¿ãã¦ããªããã¾ããã¯ãªã¼ããªã©ã®ã¹ã¿ã¤ã«ã¯ãã©ãã©ã
- æ°è¦ã«ã³ã¼ãã追å ããã®ã¯åºæ¬çã«èªåã ããã¬ãã¥ã¼ã¯åãã.
- æ¢åã®pythonã¹ã¯ãªããããèªåã®utilityé¢æ°ã大éã«å ¥ã£ãã©ã¤ãã©ãªãããããã®éãããã
ã¨ããç¶æ³ã§ããã
ãã®ãããèªåèªèº«ãæ¸ããç¯å²ã®ã³ã¼ããèªã¿ãããããããæ¸ãã¨ãã«ã¯ä½è¨ãªãã¨ãèããªãã¦æ¸ãããã«ãã¯ããã©ã¼ããã¿ã¯æ¬²ããã¨æãã¾ããããã®ãããæ¬æ¥ã®ç®çã¨ã¯å°ãé¢ãã¦ãã¾ããã¨ã念é ã«ç½®ããä¸æãã®ãçã«darkerãå©ç¨ãããã¨æã£ã¦ãã¾ãã
ãã¡ãããããã¯æ ¹æ¬è§£æ±ºã«ã¯ãªããªããã¨ãããã¨ã常ã«å¿ããªãããã«ãããã¨æãã¾ãã
ã¾ã¨ã
- å¯è½ãªãããã¸ã§ã¯ãç«ã¡ä¸ãæã«pre-commitãè¨å®ãã¦ãããæ¹ãããã
- èªåãã©ã¼ãããã®ç®çã¯ä½ãè¦å¤±ããªãããã«ããã
- ããã§ãã³ãããå·®åã ãããã©ã¼ãããããããªããdarkerã¯é¸æè¢ã«å ¥ã£ã¦ããã
ãæè¦ããææãªã©ããã ããã¨å¬ããã§ã:pray: