Open9

vscode拡張に入門してみる

inomotoinomoto

やってみたいネタがあるのだけど、作り方を調べたこともないのでhello worldくらいしてみたい。

inomotoinomoto

適当にググってたどり着いた公式ドキュメントがこちら
https://code.visualstudio.com/api/get-started/your-first-extension

inomotoinomoto

then install Yeoman and VS Code Extension Generator with:

yeomanって何?ってググると、

THE WEB'S SCAFFOLDING TOOL FOR MODERN WEBAPPS

とのこと。ちなみに紹介記事などはだいたい6~7年ほど前のが多い。公式ページでもgulpやgruntと並んでいる。

inomotoinomoto

先にcloneしていたのでディレクトリ作成とかの挙動で手間取ってしまったが、get-started記事の通りに作成 -> vscode起動 -> F5 -> 出てきたvscodeインスタンスでHello Worldコマンドを実行 とすると、notificationが出てきた。やったね。

inomotoinomoto

開発対象がvscode(内で動く拡張)だから当然ではあるが、開発してるvscodeとは別個にブツが動くvscodeインスタンスが起動するのか。
そして変更のreloadをReload Windowしたりデバッグできたりするっぽい。

inomotoinomoto

色々調べて、カーソル位置にある単語を取得できたのでメモ

		const e = vscode.window.activeTextEditor
		if(!e) return;
		const word = e.document.getText(e.document.getWordRangeAtPosition(e.selection.start))
		console.log(word)
inomotoinomoto

外部コマンド実行して結果を取ってみたい、となるとこうなった。

		const options = {
			shell: false,
			cwd: '.git'
		}
		const ws = vscode.workspace.workspaceFolders?.[0].uri.path ?? '/'
		options.cwd = path.resolve(ws, options.cwd)

		console.log(child_process.execFileSync('pwd', options).toString())
		console.log(child_process.execFileSync('ls', options).toString())

wsのfallbackが雑なので、ws取れなければ諦めるなりしないとダメそう。
そもそも明示的にworkspace作ってないフォルダでも取れたので、現実的にこれがundefになることは無いと思う。
(ファイルを単体で開いたときくらい?)