From 4c38241d5e87e50f24081ff077c3aec328186132 Mon Sep 17 00:00:00 2001 From: gretmn102 Date: Fri, 7 Aug 2020 20:46:16 +0300 Subject: [PATCH] build: .Net Core --- README.md | 20 +++++++++++++---- build.fsx | 2 +- paket.lock | 6 ++--- src/Core/LanguageService.fs | 45 ++++++++++++++++++++++++++++--------- 4 files changed, 55 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index baa3c6a..1df9f5c 100644 --- a/README.md +++ b/README.md @@ -30,10 +30,22 @@ * Работать с проектом. К сожалению, сейчас оно работает с каждым исходником отдельно, и те друг о друге ничего не знают, хотя счастье так близко. Такая вот драма. ## Допустим, я хочу попробовать -Под Windows нужен .Net Framework >= 4.6.1 (скачать можно [тут](https://dotnet.microsoft.com/download/dotnet-framework), если лень гуглить), а под другие платформы [LSP](https://github.com/gretmn102/FParserQSP) пока не компилируется. Через Mono как-то можно, но лень. Да и чем компилировать исходники QSP'а, если известный [компилятор](http://qsp.su/index.php?option=com_content&task=view&id=52&Itemid=56) ([его исходники](https://github.com/QSPFoundation/qsp/tree/master/txt2gam)) — под Windows? +Под Windows нужен .Net Framework >= 4.6.1 (скачать можно [тут](https://dotnet.microsoft.com/download/dotnet-framework), если лень гуглить). + +Под другие платформы нужен .Net Core: +* Под Linux в целом написано [тут](https://docs.microsoft.com/ru-ru/dotnet/core), для Ubuntu в частности — [тут](https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu) + На время написания инструкции достаточно было выполнить: + ```bash + wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + + sudo apt-get update; \ + sudo apt-get install -y apt-transport-https && \ + sudo apt-get update && \ + sudo apt-get install -y dotnet-sdk-3.1 + ``` -### Установка -Проста до безобразия: +Далее всё гораздо прозаичнее: 1. Установите [VS Code](https://code.visualstudio.com/Download) 2. Создайте новый файл с Hello World'ом: ```qsp @@ -54,7 +66,7 @@ По-хорошему, я мог бы внедрить Watcher, чтобы он компилировал исходник каждый раз, когда его сохраняют, но обойдетесь. ### У меня уже есть игра, но скомпилирована в `.qsp`, как ее декомпилировать? -Запускаете (ох и ах) QGen. Жмете `Игра` -> `Экспорт` -> `Текстовый файл формата TXT2QSP...` и, собственно, сохраняете, куда душа пожелает. Не забудьте сменить расширение файла на `.qsps`. +Запускаете (ох и ах) QGen. Жмете `Игра` -> `Экспорт` -> `Текстовый файл формата TXT2GAM...` и, собственно, сохраняете, куда душа пожелает. Не забудьте сменить расширение файла на `.qsps`. Кстати, существует отдельная программа [qsp2txt](http://qsp.su/index.php?option=com_agora&task=topic&id=1180&p=1&Itemid=57#p26046), но там же сообщением ниже пишут: > Эта утилита экспортит не все локации. Если в игре много локаций, она бесполезна. diff --git a/build.fsx b/build.fsx index e9159ec..4cb34fe 100644 --- a/build.fsx +++ b/build.fsx @@ -202,7 +202,7 @@ Target.create "RunScript" (fun _ -> ) Target.create "CopyFSAC" (fun _ -> - let fsacBin = sprintf "%s/bin/Debug/net461" fsacDir + let fsacBin = sprintf "%s/bin/Release/netcoreapp3.1" fsacDir let releaseBin = "release/bin" copyFSAC releaseBin fsacBin ) diff --git a/paket.lock b/paket.lock index 4d224f1..a586487 100644 --- a/paket.lock +++ b/paket.lock @@ -564,13 +564,13 @@ NUGET FSharp.Core (>= 4.3.4) - restriction: >= netstandard2.0 GIT remote: https://github.com/gretmn102/FParserQSP - (c8dd4f5259dc8a211e8c266e969eeaf6951eb990) + (0b0b663b9239d8eb686dbc0632e14e614a0db20b) build: build.cmd os: win - (c8dd4f5259dc8a211e8c266e969eeaf6951eb990) + (0b0b663b9239d8eb686dbc0632e14e614a0db20b) build: build.sh os: linux - (c8dd4f5259dc8a211e8c266e969eeaf6951eb990) + (0b0b663b9239d8eb686dbc0632e14e614a0db20b) build: build.sh os: osx GITHUB diff --git a/src/Core/LanguageService.fs b/src/Core/LanguageService.fs index 7b6e781..796358a 100644 --- a/src/Core/LanguageService.fs +++ b/src/Core/LanguageService.fs @@ -536,24 +536,49 @@ Consider: cl let getOptions () = promise { - let spawnNetWin () = + let dotnetNotFound () = promise { + let msg = """ + Cannot start QSP language services because `dotnet` was not found. + """ + let! result = vscode.window.showErrorMessage(msg) + + return failwith "no `dotnet` binary found" + } + if Environment.isWin then let fsautocompletePath = - // @"E:\Project\Qsp\QspVscodeExtension\release\bin\QspServer.exe" VSCodeExtension.ionidePluginPath () + @"/bin/QspServer.exe" - - // printfn "FSAC (NET): '%s'" fsautocompletePath + printfn "%A" fsautocompletePath let args = [ // if backgroundSymbolCache then yield "--background-service-enabled" // if verbose then yield "--verbose" ] |> ResizeArray + let spawnNetWin = + createObj [ + "command" ==> fsautocompletePath + "args" ==> args + "transport" ==> 0 + ] + return spawnNetWin + else + let spawnServer dotnet = + let fsautocompletePath = + [ + VSCodeExtension.ionidePluginPath () + "/bin/qspserver.dll" + ] |> ResizeArray - createObj [ - "command" ==> fsautocompletePath - "args" ==> args - "transport" ==> 0 - ] - return spawnNetWin () + createObj [ + "command" ==> dotnet + "args" ==> fsautocompletePath + "transport" ==> 0 + ] + + let! dotnet = Environment.dotnet + match dotnet with + | Some dotnet -> + return spawnServer dotnet + | None -> + return! dotnetNotFound () } let decorate = let decorationType =