Используя обратный инжиниринг, вы можете добавить новый язык в VSCode. Вы можете посмотреть, как typescript реализован как плагин JavaScript и как он взаимодействует с node.exe через канал. Но это сложно, так как все идет без документации, я предоставлю здесь очень короткую документацию:
Вы можете определить новый плагин в папке плагинов C:\Users\USER\AppData\Local\Code\app-0.3.0\resources\app\plugins
.
Скопируйте папку плагина typescript и переименуйте упомянутые расширения файлов и имена языков во всех файлах на свой новый язык, чтобы ваш новый плагин использовался при открытии файла .mylang.
В typescriptServiceClient.js
вы видите, что дочерний процесс разветвляется и что его stdout
связан с new WireProtocol.Reader
. Свяжите свой собственный mylanguage.exe
(вам, вероятно, придется написать этот exe самостоятельно). VSCode запрашивает у этого двоичного файла дополнительную информацию о языке.
В typescriptMain.js
вы найдете регистрацию функции для языка. Удалите все вызовы monaco.Modes.XXXXXXSupport.register
, кроме monaco.Modes.DeclarationSupport.register
.
Теперь откройте в VSCode каталог, содержащий файлы .mylang, и откройте один из них через CTRL+P + FileName
. Щелкните идентификатор правой кнопкой мыши и выберите Go to Definition
. VSCode теперь отправляет такой запрос через StdIn на ваш exe
{"seq":1,"type":"request","command":"definition","arguments":{"file":"d:/Projects/MyProj/Source/MyFile.mylang","line":45,"offset":9}}
VSCode ожидает такого ответа:
Content-Length: 251
[LINE BREAK]
{ "seq" : 1, "type" : "response", "command" : "definition", "request_seq" : 1, "success" : true, "body" : [{ "file" : "d:/Projects/MyProj/Source/MyOtherFile.mylang", "start" : { "line" : 125, "offset" : 3 }, "end" : { "line" : 145, "offset" : 11} }] }
Если все работает, VSCode откроет MyOtherFile.mylang и установит курсор на строку 124 в столбце 3.
Попробуйте самостоятельно ;-)
person
Wosi
schedule
24.06.2015