vscodeのcodeコマンド
Codeコマンド
vscode を使っている人であれば打ったことがあるであろうcode
コマンド
実はbinaryじゃなくてshellscriptが見れる
shellscriptがそのままあることもあるんだなぁ
$which code /usr/local/bin/code $cat /usr/local/bin/code #!/usr/bin/env bash # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; } CONTENTS="$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")" ELECTRON="$CONTENTS/MacOS/Electron" CLI="$CONTENTS/Resources/app/out/cli.js" ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" exit $?
realpath
dirname
- ディレクトリのパスを返す
- 知らないコマンドがまだまだたくさんあるね
$dirname ~/ws/notes/blog /Users/matac/ws/notes
$?
直前のプロセスの終了ステータス
exit $?
終了ステータス$?を返して終了する
debugしてみる
$zsh -x /usr/local/bin/code . +/Users/matac/.zshenv:1> source /Users/matac/.cargo/env +/Users/matac/.cargo/env:4> case :/Users/matac/.nvm/versions/node/v14.16.1/bin:/Users/matac/.pyenv/shims:/Users/matac/.pyenv/bin:/Users/matac/.rbenv/shims:/usr/local/opt/openssl@1.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/go/bin:/Users/matac/.cargo/bin:/usr/local/go/bin:/Users/matac/ws/go/bin:/Applications/Julia-1.6.app/Contents/Resources/julia/bin: (*:/Users/matac/.cargo/bin:*) +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> realpath /usr/local/bin/code +realpath:0> python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' realpath +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users/matac/realpath +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users/matac +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname /Users +/usr/local/bin/code:7> CONTENTS=+/usr/local/bin/code:7> dirname / +/usr/local/bin/code:7> CONTENTS=/ +/usr/local/bin/code:8> ELECTRON=//MacOS/Electron +/usr/local/bin/code:9> CLI=//Resources/app/out/cli.js +/usr/local/bin/code:10> ELECTRON_RUN_AS_NODE=1 //MacOS/Electron //Resources/app/out/cli.js . /usr/local/bin/code:10: no such file or directory: //MacOS/Electron +/usr/local/bin/code:11> exit 127
マジで何やってるのかわからん
$ls -la /usr/local/bin/code lrwxr-xr-x 1 matac admin 68 3 28 20:50 /usr/local/bin/code@ -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
実体はここにある
[~/ws/notes/blog] $zsh /usr/local/bin/code . /usr/local/bin/code:10: no such file or directory: /Users/matac/MacOS/Electron [~/ws/notes/blog] $bash /usr/local/bin/code .
zshじゃなくてbashなら行けるっぽい(bashって書いてあるやろがい!)
[~/ws/notes/blog] $bash -x /usr/local/bin/code . ++++++ realpath /usr/local/bin/code ++++++ python -c 'import os,sys; print(os.path.realpath(sys.argv[1]))' /usr/local/bin/code +++++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code' ++++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app/bin' +++ dirname '/Applications/Visual Studio Code.app/Contents/Resources/app' ++ dirname '/Applications/Visual Studio Code.app/Contents/Resources' + CONTENTS='/Applications/Visual Studio Code.app/Contents' + ELECTRON='/Applications/Visual Studio Code.app/Contents/MacOS/Electron' + CLI='/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' + ELECTRON_RUN_AS_NODE=1 + '/Applications/Visual Studio Code.app/Contents/MacOS/Electron' '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' . + exit 0
なのでcodeコマンドは最終的に
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron' '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' .
を実行している
'/Applications/Visual Studio Code.app/Contents/MacOS/Electron'
vscodeを開くコマンド
'/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js'
[~/ws/notes/blog] $cat '/Applications/Visual Studio Code.app/Contents/Resources/app/out/cli.js' "use strict";const bootstrap=require("./bootstrap"),bootstrapNode=require("./bootstrap-node"),product=require("../product.json");bootstrap.avoidMonkeyPatchFromAppInsights(),bootstrapNode.configurePortable(product),bootstrap.enableASARSupport(void 0),process.env.VSCODE_CLI="1",require("./bootstrap-amd").load("vs/code/node/cli"); //# sourceMappingURL=https://ticino.blob.core.windows.net/sourcemaps/054a9295330880ed74ceaedda236253b4f39a335/core/cli.js.map
後ろにディレクトリを指定してあげるとvscodeでそのディレクトリを開ける動きをするはず
めっちゃ長い1 line code
vscodeのフロントまでたどり着いたっぽい
bootstrap はフロントエンドライブラリ
ちょっと見辛いので改行入れてみた(あんまり改行できなかった)
"use strict"; const bootstrap=require("./bootstrap"),bootstrapNode=require("./bootstrap-node"),product=require("../product.json"); bootstrap.avoidMonkeyPatchFromAppInsights(),bootstrapNode.configurePortable(product),bootstrap.enableASARSupport(void 0),process.env.VSCODE_CLI="1",require("./bootstrap-amd").load("vs/code/node/cli");
requireでモジュールbootstrap
, bootstrapNode
, product
を読み込んでいる
最後にvs/code/node/cli
がloadされている。見に行ったらとてつもなく長い1 line codeがあった。
このくらいにしておこう...
build and debug
https://github.com/microsoft/vscode/wiki/How-to-Contribute
buildしてcode
したときの動きをdebugすると面白そう
ブラウザでも開けるのか
webアプリケーションって思ったよりも大きい括りかもしれない
debugはappとして起動しながらやろう
いろいろ準備して./scripts/code.sh
で起動できる
多分これがcodeコマンドに相当するはず
./scripts/code.sh ~/ws/notes
とやったら~/ws/notes
が起動後に開かれた
- これ自体はcodeコマンドとは別物みたい
ソースをみに行ったら、しっかりインデントがついたコードが見れた
GitHub - microsoft/vscode: Visual Studio Code
$resources/darwin/bin/code.sh . resources/darwin/bin/code.sh: line 10: /Users/matac/ws/src/github.com/microsoft/vscode/MacOS/Electron: No such file or directory
これがcodeコマンドだろうけど、パスがずれてるっぽくてうまく動かない
実機の場合は
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
debug環境は
/Users/matac/ws/src/github.com/microsoft/vscode/resources/darwin/bin/code.sh
ちょっといじらないとcodeコマンドのdebugができない...?