Многие люди используют Visual Studio Code. Очень распространенный сценарий сегодня - использовать Docker. Итак, у меня есть Haskell код в Docker с инструментом «стек» - все хорошо, я строю свой проект без ошибок. Я могу использовать Visual Studio Code с Haskell на моей хост-машине (с различными расширениями, например, Haskelly работает в основном хорошо). Это происходит под какой-то учетной записью пользователя. Теперь я хочу работать с моим Haskell проектом, который находится в Docker, где моя учетная запись root. Итак, я установил расширение "Docker Workspace". Это работает, правда: я могу добавить какую-то папку из docker в качестве рабочего пространства и редактировать файлы из нее. Но никакой поддержки Haskell нет, только выделение: никаких подсказок типов, ничего («Тип недоступен» и т. П.)! Как я вижу, Хаскелли не может работать с проектом в Docker ИЛИ Я что-то делаю неправильно . Схема:
ON HOST - owner "user" . IN DOCKER - owner "root"
---------------------- . ------------------------
myproj/ . myproj/
.stack-work . .stack-work
all-other-files . all-other-files
. |
. |
Visual Studio Code <----Docker Workspace---'
.
.
Я монтирую папку своего проекта в docker (я делю ее между хостом и Docker). Невозможно построить проект за пределами Docker из-за зависимостей .so. Итак, Visual Studio Code на хосте открывает папку Docker, если я открою то же самое myproj/
на хосте - расширение Haskell не может работать, потому что компилятор не может построить проект - нет .so зависимостей.
Когда я открывал файлы из Docker, я предполагал, что все расширения будут работать с Docker - если он запускает «стек», он попытается сделать это в docker. Это кажется глупым предположением, поэтому мой вопрос: «как работать с проектом в таком сценарии?» . Я думаю, что это проблема, не относящаяся к Haskell, и расширения для других языков столкнутся с той же проблемой, но, конечно, если проблема имеет решение, то она будет указана c для Haskelly / Haskell ... И я уверен, Многие люди используют код Visual Studio и Docker в таком сценарии, но я не представляю, как это сделать правильно.
Я нашел эти ошибки в журналах:
[2020-01-21 08:55:02.086] [exthost] [error] [UCL.haskelly] provider FAILED
[2020-01-21 08:55:02.086] [exthost] [error] TypeError: Cannot read property 'slice' of null
at InteroLocationDecoder.extractRange (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroLocationDecoder.js:24:13)
at InteroLocationDecoder.buildLocation (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroLocationDecoder.js:11:28)
at InteroLocationDecoder.decode (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroLocationDecoder.js:6:21)
at HaskellDefinitionProvider.<anonymous> (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:24:47)
at Generator.next (<anonymous>)
at fulfilled (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:4:58)
и
[2020-01-21 09:41:52.995] [exthost] [error] [UCL.haskelly] provider FAILED
[2020-01-21 09:41:52.995] [exthost] [error] Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
at doWrite (_stream_writable.js:413:19)
at writeOrBuffer (_stream_writable.js:401:5)
at Socket.Writable.write (_stream_writable.js:301:11)
at InteroSpawn.<anonymous> (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroSpawn.js:190:30)
at Generator.next (<anonymous>)
at /home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroSpawn.js:7:71
at new Promise (<anonymous>)
at __awaiter (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroSpawn.js:3:12)
at InteroSpawn.executeCommandOnIntero (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroSpawn.js:186:16)
at InteroSpawn.requestDefinition (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/InteroSpawn.js:170:21)
at HaskellDefinitionProvider.<anonymous> (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:23:63)
at Generator.next (<anonymous>)
at /home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:7:71
at new Promise (<anonymous>)
at __awaiter (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:3:12)
at HaskellDefinitionProvider.provideDefinition (/home/xyz/.vscode/extensions/ucl.haskelly-0.5.5/out/src/Providers/Definition/index.js:20:16)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:574:358
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:52:287
at new Promise (<anonymous>)
at Object.t.asPromise (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:52:259)
at y.provideDefinition (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:574:329)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:593:526
at B._withAdapter (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:591:697)
at B.$provideDefinition (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:593:504)
at p._doInvokeHandler (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:663:275)
at p._invokeHandler (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:662:971)
at p._receiveRequest (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:661:588)
at p._receiveOneMessage (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:660:468)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:658:691
at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
at _.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:189:274)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:820:285
at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
at _.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:189:274)
at t.PersistentProtocol._receiveMessage (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:193:629)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:190:824
at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
at p.acceptChunk (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:186:737)
at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:186:89
at Socket.t (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:195:68)
at Socket.emit (events.js:200:13)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at Socket.Readable.push (_stream_readable.js:210:10)
at Pipe.onStreamRead (internal/stream_base_commons.js:166:17)
но я не уверен, что они связаны с проблемой, потому что я перезагрузил код Visual Studio и больше не видел их.
Я предположил root из проблема заключается в разрешениях (если некоторые файлы были собраны / скомпилированы в Docker, то они недоступны на хосте - теперь они принадлежат root), поэтому я сменил владельца (sudo chown -R xyz .
), но расширение Haskelly по-прежнему не работает , Я не знаю, как скомпилировать проект в Docker, но использовать результат (для расширений Haskell требуется код для компиляции - .stack-work/
) на хосте, потому что расширение хочет его перекомпилировать .. Буду благодарен за любые ссылки на документацию, форум, блог с решением.