Dart-code: LSP ์กฐ์‚ฌ

์— ๋งŒ๋“  2018๋…„ 01์›” 27์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Dart-Code/Dart-Code

ํ˜„์žฌ Dart Code์—๋Š” ๋ถ„์„ ์„œ๋ฒ„ API์—์„œ VS Code API๋กœ ๋งคํ•‘๋˜๋Š” ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. VS Code์˜ API๋Š” Code์—๋งŒ ์ ์šฉ๋˜๋ฏ€๋กœ ์ด ์ฝ”๋“œ๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ด๋ฉฐ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ LSP ๊ตฌํ˜„์— ํ‘ธ์‹œํ•˜๋ฉด LSP๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ํŽธ์ง‘์ž์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: Visual Studio์—๋Š” ์ด์— ๋Œ€ํ•œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค).

LSP ์†Œ๋น„

VS ์ฝ”๋“œ

VS Code์—์„œ LSP๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ํ™•์žฅ์„ ๋งŒ๋“  ๋‹ค์Œ vscode-languageclient ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VS Code๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์„ธํŠธ ๋˜๋Š” ์ž…๋ ฅ/์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค( ์—ฌ๊ธฐ ์ฐธ์กฐ ).

Dart Code์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฉ”์‹œ์ง€ ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” LSP ์ง€์›์— ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ์š”์ฒญ์— ๋Œ€ํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค

์ฐธ๊ณ : "Visual Studio LSP ํ™•์žฅ์€ Visual Studio์˜ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ฑ„๋„์—๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ชฉ์ ์œผ๋กœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค."

Visual Studio์—์„œ LSP๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ํ™•์žฅ(ํ˜„์žฌ ์ข…์†์„ฑ์œผ๋กœ LSP ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ํ™•์žฅ์ด ์žˆ์Œ)์„ ๋งŒ๋“  ๋‹ค์Œ Microsoft.VisualStudio.LanguageServer.Client NuGet ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Visual Studio๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ตฌํ˜„

์œ„์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ LSP ๊ตฌํ˜„์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด VS Code๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์†Œ๋Ÿ‰์˜ TypeScript(Visual Studio์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์†Œ๋Ÿ‰์˜ C#)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋ฏธ๋ฏธํ•˜๋ฉฐ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  IDE์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. IDE๋Š” ์ž์ฒด ๊ธฐ๋Šฅ์„ ์„œ๋ฒ„์— ์•Œ๋ฆฌ๊ณ  ์ง์ ‘ ํ†ต์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. SDK์˜ ๋ถ„์„ ์„œ๋ฒ„ ๋‚ด๋ถ€์— LSP ํ”„๋กœํ† ์ฝœ ์ถœํ•˜
    ์ด๋Š” SDK ๊ฐ์ง€ ๋กœ์ง์„ LSP ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๋„ฃ๊ณ  SDK ๋ฆด๋ฆฌ์Šค ์ผ์ •์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  2. LSP ์„œ๋ฒ„๋ฅผ ๋ถ„์„ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  STDIO๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ํ”„๋ก์‹œ๋กœ ์ž‘์„ฑ
    ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ค‘๊ฐ„์— ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜๋‚  ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์—ฌ์ „ํžˆ ๋ถ„์„ ์„œ๋ฒ„์™€ ๋Œ€ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„๋ฅผ ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dart๋Š” ์ข‹์€ ํ›„๋ณด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‚ฌ์–‘์—์„œ ํ”„๋กœํ† ์ฝœ API๋ฅผ ์ฝ”๋“œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)
  3. ํ™•์žฅ ๊ธฐ๋Šฅ ๋‚ด๋ถ€์— ๋ถ„์„ ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๊ณ  LSP ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฐฐํฌ๊ฐ€ ๋ถ€ํ’€๋ ค์ง€๊ณ  ์‚ฌ๋žŒ๋“ค์„ ํŠน์ • SDK ๋ฒ„์ „์— ๋ฌถ์Šต๋‹ˆ๋‹ค.
  4. ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๋ถ„์„ ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜์ง€ ๋ง๊ณ  SDK์—์„œ ์ง์ ‘ ๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.
    ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ์—์„œ ๋ชจ๋“ˆ์„ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
    ๋Ÿฐํƒ€์ž„ ์‹œ ๋ฒ„์ „์ด ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์— LSP ์„œ๋ฒ„๋ฅผ ์ถœํ•˜ํ–ˆ์„ ๋•Œ๋ณด๋‹ค ์ตœ์‹  ๋ฒ„์ „์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ์ฒ˜๋ฆฌ ์ค‘์ธ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” API๊ฐ€ ์•ˆ์ •์ ์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ๋œ ๋งํฌ๋“ค

VS ์ฝ”๋“œ

๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋˜ํ•œ Atom์ด๋‚˜ Eclipse์™€ ๊ฐ™์€ ๋‹ค๋ฅธ IDE๋Š” LSP๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ LSP ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ ํŒ€์€ Flutter๋ฅผ Eclipse IDE์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋„๊ตฌ ์ง€์›์ด Flutter์˜ ์ ์‘์— ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

๋˜ํ•œ Atom์ด๋‚˜ Eclipse์™€ ๊ฐ™์€ ๋‹ค๋ฅธ IDE๋Š” LSP๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ LSP ์ง€์›์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด ์šฐ๋ฆฌ ํŒ€์€ Flutter๋ฅผ Eclipse IDE์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋„๊ตฌ ์ง€์›์ด Flutter์˜ ์ ์‘์— ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , GitHub์— @natebosch์—์„œ ๊ด€๋ฆฌํ•˜๋Š” natebosch/dart_language_server ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ๋‹นํžˆ ํ™œ๋™์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@rcjsuen ๋„ค, ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์‹คํ—˜์— ์‚ฌ์šฉํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด๋ฒˆ ์ฃผ์— ์ผ๋ถ€ PR์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค) :-)

์กฐ์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ Dart ๋ถ„์„ ์„œ๋ฒ„์— LSP๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ƒํ™ฉ์€ ์—ฌ๊ธฐ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md

๋” ์ด์ƒ ์ด ๋ฌธ์ œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. VS Code ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์„œ๋ฒ„์˜ ๋‘ ๋ณต์‚ฌ๋ณธ์ด ํšŒ์ „ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด (๊ณต์‹ ์š”์ฒญ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์š”์ฒญ์„ ํ†ตํ•ด) ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ง€์›ํ•˜๋ฉด ํ–ฅํ›„ LSP ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰