Tombi | ð TOML ãã¡ã€ã«ãèªåãœãŒã
Tombi ãšãã TOML Language Server ãéçºããŠãã @yn7010 ã§ãã
ããå€ãã®æ¹ã« Tombi ãç¥ã£ãŠããããããããã€ãã«åã㊠Tombi ã®éçºã®å°è©±ãèšäºã«ããŠãããŸãã
ä»å㯠Tombi ã®ç®çæ©èœãšèããŠããèªåãœãŒãã«ã€ããŠè©±ãããããšæããŸãã
èªåãœãŒãã¯äžå¯èœïŒ
Tombi ãšåæ§ã® TOML Language Server ã§ãã Taplo ã§ãèªåãœãŒãã®æ©èœãããã®ã§ãããéšåçãªãµããŒãã«ãšã©ãŸããè€æ°ã® Issues ãéããããŸãŸè§£æ±ºãããŠããªãç¶æ ã§ãã
Issue ã解決ãããªãã®ã¯ Taplo ã®éçºãåæ»ããŠããããšããããŸãããããã ãã§ã¯ãããŸããã
ããã°ã©ãã³ã°èšèªã«ãããŠã³ã¡ã³ãã®æ±ãã¯é£ãããã®ã§ãã
次ã®ãããªã³ãŒãã [dependencies]
ã®ããŒãæé ã«èªåãœãŒãããããšãèããŠã¿ãŸãããã
[dependencies]
regex = "1.11.1"
serde = "1.0.0"
# clap = "4.5.37"
futures = "0.3.31"
ahash = "0.8.11"
ããŠããã®ãããªãã¡ã€ã«ãèªåãœãŒãããå Žåã# clap = ...
ã®æ±ãã¯ã©ãããã°è¯ãã®ã§ãããïŒ
-
serde = ...
ã«çŽã¥ããŠãããšè§£éïŒ -
ahash = ...
ã«çŽã¥ããŠãããšè§£éïŒ - ã©ã¡ãã«ãçŽã¥ããŠããªããšè§£éïŒ
äžèŠãããš 3 ã«èŠããŸãããã ãšãããšäžŠã³æ¿ããåŸã # clap = ...
ã®ã³ã¡ã³ãã¯ã©ãã«çœ®ãã°è¯ãã®ã§ããããïŒ
...ã³ã¡ã³ãã¯èšèŒã§ããç®æãå€ãããããã以å€ã«ããèªåãœãŒããããããšãããšãããïŒãã®ã³ã¡ã³ãã¯ã©ãè§£éããã°ïŒããšäžæã«å®ããããšãã§ããªãç¶æ³ã«ééããŸãã
ãã®ãããã³ã¡ã³ããå«ãã ã³ãŒãã®èªåãœãŒãã¯é£ããã®ã§ãã
ã§ã¯ãã³ã¡ã³ããå ¥ããããšã®ã§ãã TOML ã§ã¯èªåãœãŒãã¯äžå¯èœãªã®ã§ããããïŒ
èªåãœãŒããã§ããã
Taplo ã®èªåãœãŒãçµæ
# clap = ...
ãã°ã«ãŒãã®åºåãã³ã¡ã³ããšèããããããã®ã°ã«ãŒãã®äžã§èªåãœãŒãããŸãã
[dependencies]
regex = "1.11.1"
serde = "1.0.0"
# clap = "4.5.37"
ahash = "0.8.11"
futures = "0.3.31"
Tombi ã®èªåãœãŒãçµæ
# clap = ...
ã ahash
ã«çŽã¥ããã³ã¡ã³ããšè§£éããŠèªåãœãŒãããŸãã
[dependencies]
# clap = "4.5.37"
ahash = "0.8.11"
futures = "0.3.31"
regex = "1.11.1"
serde = "1.0.0"
äžæã«ã³ã¡ã³ããå®ããããšãã§ããªããšèšããŸããããããå°ãèžã¿èŸŒããš ã³ã¡ã³ãäœçœ®ãäžæã«æ±ºå®ããã«ã¯å¶çŽãè¶³ããªã ãšããããšã§ãã
ãã®ããã远å ã§ã«ãŒã«ãå®ãããšèªåãœãŒãã§ããæ§ã«ãªããŸãã
å°ã話ãå€ãããšã Tombi 㯠TOML ã® LSP ãšããæ¢åã®åžå Žã«èžã¿èŸŒãã æ°åè
ã§ãããæ°èŠåå
¥ã®ç¹æš©ã§ãããããã仿§ã§ããã«ãŒããã©ããã§äœ¿ãããšèããŠããŸãã ð
ïŒ Tombi ãå°ã£ãæ©èœãå€ãèŒããŠããã®ã¯ããã®ãããã®ç§ã®æèã圱é¿ããŠããŸãïŒ
äŸãã° Python ã® black ãšãããã©ãŒããã¿ã¯åŸæ¥ã®ãã©ãŒããã¿ãšã¯ç°ãªããæåããèšå®é
ç®ããããŸããã§ããã
ãããéäžã§æ¢åã®ãã¹ãŠã®èšå®é
ç®ãåé€ããããblack ã®ãŠãŒã¶ã¯æã£ãŠé¢ããŠãã£ãã§ãããã
æåããèšå®ã¬ã¹ã䞻匵ããŠããããããŠãŒã¶ã«åãå
¥ããããã®ã§ãã
ã³ã¡ã³ãã®è§£éæ¹æ³ãè€æ°ããèªåãœãŒãã¯ãéäžããã«ãŒã«ã远å ãããšæããŠãŒã¶ãçŸãããããããŸãããïŒå°ãªããšã Taplo ã® GitHub Issue ã¯å°ãèããŠããŸããïŒãTombi ã¯ãæåãããçã®éã£ãã«ãŒã«ããèšããããšã§èªåãœãŒããå®çŸããŠããŸãã
ã§ã¯ãããããæ¬é¡ã® Tombi ã®ã³ã¡ã³ãã®æ±ãã«ã€ããŠèª¬æããŸãã
Tombi ã®ã³ã¡ã³ãè§£éã«ãŒã«
äžè¬çãªã³ã¡ã³ãã®åé¡
Tombi ã®ã³ã¡ã³ãè§£éã«ã€ããŠèª¬æããåã«ãããã°ã©ãã³ã°èšèªã«ãããã³ã¡ã³ãã®è©±ãããŸãããã
ã³ã¡ã³ãã®çš®é¡ã¯äžè¬çã«äžèšã®3ã€ã«åé¡ã§ããŸãã
# èŠçŽ ã®äžã«ãã£ã€ããã®
# ã³ã¡ã³ãè¡ã¯é£ç¶ããŠããŠãã
key = "value"
key = "value" # èŠçŽ ã®åŸãã«ãã£ã€ããã®
# çŽåãŸãã¯çŽåŸã«èŠçŽ ããªããã®
# ã³ã¡ã³ãè¡ã¯é£ç¶ããŠããŠãã
# 空çœè¡ã«æãŸããŠãããã®
# ã³ã¡ã³ãè¡ã¯é£ç¶ããŠããŠãã
key = "value"
# èŠçŽ ã®æ¬¡ã®è¡ã«ãã£ã€ããã®
# ã³ã¡ã³ãè¡ã¯é£ç¶ããŠããŠãã
ãã®ãã¡èªåãœãŒããå°é£ã«ãããã®ã¯ Dangling Comment ã§ãã
ãã®ãããèªåãœãŒããè¡ãã«ã¯ãã©ã®ããã« Dangling Comment ãæ±ãããåé¡ã«ãªããŸãã
Dangling Comment ãªããŠãªãã£ã
ä»å Tombi ã«èšãã远å ã«ãŒã«ã¯ãèªåãœãŒãã«éªé㪠Dangling CommentãããLeading CommentããšããŠæ±ãããšãããã®ã§ãã
[dependencies]
serde = "1.0.0"
# clap = "4.5.37"
# ãã㯠Dangling Comment ã§ã¯ãªãã ahash ã® Leading Comment ãšã¿ãªãã
# ãããæ®éã® Leading Comment
ahash = "0.8.11"
ã©ãã® Dangling Comment ã Tombi ã Leading Comment ãã¿ãªãã®ãã¯ãããã¥ã¡ã³ã ããç¹å®ã®ã³ã¡ã³ãè¡ããšãã£ã¿ã§ Hover ããã°ç¢ºèªããããšãã§ããŸãã
ãã®è§£éã¯ãä¿åããã³ã¡ã³ããæå³ããªãè¡ã«ãœãŒããããå¯èœæ§ããããŸãã
- èªåãœãŒãã«ãã倧ããªå€æŽã¯æåã®äžåºŠã ã
- 远å ã®ã³ãŒããæžããŠããåã«ã¯ãéåæãçºçãã«ãã
- Tombi åŽã®ä»æ§ã§ãããšå²ãåãã
ãšããèãã§æ¡çšããŸããã
Taplo: èšå®ãã¡ã€ã«ã«ããèªåãœãŒãã®åé¡
ããŠã Taplo ã®èªåãœãŒãã«ã¯ããäžã€åé¡ããããŸãã
Taplo ã®èªåãœãŒã㯠taplo.toml
ã§æ¬¡ã®ããã«èšå®ããããšã§å©çšã§ããŸãã
[formatting]
reorder_keys = true
ãããããã®æ¹æ³ã®å Žåããã¹ãŠã®ããŒãã«ã®ããŒãèªåãœãŒãããããšè©Šã¿ãŸãããå®éã«ã¯èªåãœãŒãããŠæ¬²ãããã®ã¯ TOML ãã¡ã€ã«ã®å šãŠã§ã¯ãªãäžéšã§ããããšããããŸãã
# ãã®ã»ã¯ã·ã§ã³ã¯ããŒåã§äžŠã³æ¿ãããŠæ¬²ãããªã
[package]
name = "my-crate"
version = "1.0.0"
authors = ["taro <taro@gmail.com>"]
# ãã®ã»ã¯ã·ã§ã³ã¯ããŒåã§äžŠã³æ¿ãããŠæ¬²ãã
[dependencies]
anyhow = "^1.0.0"
serde = "^1.0.0"
ã§ã¯èšå®é ç®ãå¢ããã°ããã®ã§ããããïŒ
[formatting]
reorder_keys = [{ enabled = true, file = "Cargo.toml", target = "dependencies" }]
ãããšããã³ã¡ã³ãã§èšå®ã远å ãã圢ã§ããããïŒ
# taplo: reorder-key = false
[package]
name = "my-crate"
version = "1.0.0"
authors = ["taro <taro@gmail.com>"]
# taplo: reorder-key = true
[dependencies]
anyhow = "^1.0.0"
serde = "^1.0.0"
ããããã©ã¡ããçŸãããªãã§ãã...
Tombi ã®ã³ã³ã»ããã®äžã€ã¯ãèšå®äžèŠãã§ããã®ã§ããŠãŒã¶ãèšå®ããããšãªããèªåã§ã©ã®ããŒãã«ãã©ã®ã«ãŒã«ã§èªåãœãŒãããããæ±ºå®ããå¿ èŠããããŸããã
Tombi: JSON Schema Store ãå©çšããèªåãœãŒãã§è§£æ±º
ããããèããŠãããã¡ã«ã JSON Schema Store ããæ å ±ãååŸããã°ããããšã«æ°ãã€ããŸããã
å ·äœçã«ã¯ããªããžã§ã¯ãïŒTOML ã®ããŒãã«ïŒã®ã¹ããŒãã« Tombi ã®ããã®èšå®ã远å ããŸãã
{
"type": "object",
"properties": {
...
},
...
"x-tombi-table-keys-order": "ascending"
}
ã¹ããŒãã®æäŸè ãã©ãã®ããŒãã«ãèªåãœãŒãããã®ãã JSON Schema Store ã«äºåç»é²ããŠããããšã§ããŠãŒã¶ãæå®ããããšãªãèªåãœãŒãã®ã«ãŒã«ã现ããå®çŸ©ã§ããŸãã
JSON Schema ã® x-
ã䜿ãããšã«æåã¯æµæãæããã®ã§ããã Taplo ããã§ã«å¥ã®æ©èœã®ããã«å©çšããŠããã®ã§ããã°ããçµã£ãåŸã«ãã®æ¹æ³ã«æ°ãã€ããŸããã
Taplo ã¯å¿ èŠãªéå ·ããã§ã«æã£ãŠããïŒ
ãããã«
ä»å㯠Tombi ã®ç®çæ©èœãšäœçœ®ä»ãããèªåãœãŒããã«ã€ããŠèª¬æããŸããã
ç§ã¯ TOML ã®èªåãœãŒããå®å
šã«å®è£
ããããŒã«ã Tombi 以å€ã«ç¥ããŸããã
ããããTombi ã¯ãªãªãŒã¹åŸ Rust ã³ãã¥ããã£ã«çŽ¹ä» ããŠãããã£ã±ã GitHub ã®ã¹ã¿ãŒãã€ãããã·ã§ã¢ãæ¡å€§ããããããããªãæ©èœè¿œå ãæ±ããããã®ã§ããã
æåŸã«ãTombi ã§ã¯ã¹ãã³ãµãŒãåéããŠããŸãã
æ¯æŽããŠããã ããæ¹ãããã°ãå¿æŽãããããé¡ãããŸãã
Discussion