Giter Site home page Giter Site logo

gretmn102 / qsp.fsharp Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 1.0 510 KB

QSP ecosystem written in F# environment. Contains: language core (AST, parser, printer), language server (LSP) and CLI utility for manipulating language sources.

F# 99.95% Batchfile 0.02% Shell 0.03%
qsp lsp code-analyzer

qsp.fsharp's Introduction

Qsp.FSharp

QSP экосистема, написанная в F# среде. Содержит: ядро языка (AST, парсер, принтер), языковой сервер (LSP) и CLI утилиту для манипуляций исходниками языка.

Карта проекта

  • Qsp.FSharp.Core

    Содержит:

    • AST — абстрактное синтаксическое дерево языка QSP
    • Парсер — переводит исходный код QSP в AST
    • Принтер — переводит AST в исходный код QSP
  • Qsp.FSharp.LanguageServer

    Сервер, который предоставляет поддержку языка QSP в редакторах, которые поддерживают LSP. Сейчас используется только в VS Code через Qsp.FSharp.VsCodeExtension расширение.

    Использует Qsp.FSharp.Core.

    Для своей работы требует:

    • либо net461 runtime
    • либо dotnet 3.1 runtime
  • Qsp.FSharp.Cli

    Использует Qsp.FSharp.Core.

Deploy

qsp.fsharp's People

Contributors

gretmn102 avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

tobiasschulz

qsp.fsharp's Issues

Basic tokens vs generic tokens

Возникла задача вывести последовательность именованных токенов, а не сразу их обобщать, как это сделано сейчас. Т.е. нужно выводить if, act, plus, а не KeywordControl, KeywordControl и OperatorArithmetic

Names of variables

the second character can be anything other than these \t &'"()[]=!<>+-/*:,{}

fix(build): error MSB4181: The "PackTask" task returned false but did not log an error

Reproduction

git clone https://github.com/gretmn102/FParserQSP.git Qsp.FSharp
cd Qsp.FSharp
git checkout 82b286b22b5f3f464d880be4e9b1cfdf1517b10e
dotnet tool restore
dotnet paket install
cd src/Qsp.FSharp.Core
dotnet pack

On Windows

>dotnet --version
3.1.426
E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core>dotnet pack
Microsoft (R) Build Engine version 16.7.3+2f374e28e for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  Restored E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core\Qsp.FSharp.Core.fsproj (in 4,16 sec).
C:\Program Files\dotnet\sdk\3.1.426\Microsoft.Common.CurrentVersion.targets(2084,5): warning MSB3088: Could not read state file "obj\Debug\netstandard2.0\Qsp.FSharp.Core.fsprojAssemblyReference.cache". End of Stream encountered before parsing was completed. [E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core\Qsp.FSharp.Core.fsproj]
  Qsp.FSharp.Core -> E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core\bin\Debug\netstandard2.0\Qsp.FSharp.Core.dll
  Qsp.FSharp.Core -> E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core\bin\Debug\net461\Qsp.FSharp.Core.dll
C:\Program Files\dotnet\sdk\3.1.426\Sdks\NuGet.Build.Tasks.Pack\buildCrossTargeting\NuGet.Build.Tasks.Pack.targets(198,5): error MSB4181: The "PackTask" task returned false but did not log an error. [E:\ProjectGit\Qsp.FSharp\src\Qsp.FSharp.Core\Qsp.FSharp.Core.fsproj]

On Linux

$ dotnet --version
3.1.426
fering@fering-comp:~/Qsp.FSharp/src/Qsp.FSharp.Core$ dotnet pack -c Release -p:TargetFrameworks=netstandard2.0
Microsoft (R) Build Engine version 16.7.3+2f374e28e for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

  Determining projects to restore...
  Restored /home/fering/Qsp.FSharp/src/Qsp.FSharp.Core/Qsp.FSharp.Core.fsproj (in 205 ms).
  Qsp.FSharp.Core -> /home/fering/Qsp.FSharp/src/Qsp.FSharp.Core/bin/Release/netstandard2.0/Qsp.FSharp.Core.dll
/home/fering/dotnet/sdk/3.1.426/Sdks/NuGet.Build.Tasks.Pack/buildCrossTargeting/NuGet.Build.Tasks.Pack.targets(198,5): error MSB4181: The "PackTask" task returned false but did not log an error. [/home/fering/Qsp.FSharp/src/Qsp.FSharp.Core/Qsp.FSharp.Core.fsproj]

Explicit cast

Forcing people to convert variables explicitly using $str and val

Структура QSP проекта

Собственно, ребята, структуру проекта я вижу такой:

root
├─resources
│ └─Картиночке.jpeg
├─src
│ ├─ПапкаСЛокациями1
│ │ ├─СборникЛокаций1.qsps
│ │ ├─СборникЛокаций2.qsps
│ │ └─СборникЛокаций3.qsps
│ ├─Папка2
│ │ └─СборникЛокаций1.qsps
│ ├─Папка3
│ │ ├─ОчереднойСборникЛокаций.qsps
│ │ ├─Подпапка
│ │ │ └─ИЕщеОдинСборникЛокаций.qsps
│ │ ├─СлишкоМалоЛокаций.qsps
│ │ └─ЭтомуМируНужноБольшеРазныхЛокаций.qsps
│ └─НазваниеИгры.qproj
└─НазваниеИгры.qsp

В .qproj нужно только указать версию QSP (Quest Navigator, Aero, txt2web и т.п.). Там, где находится этот файл, LSP подбирает рекурсивно все .qsps файлы и работает с ними, чтобы найти такую-то локацию или найти такие-то переменные, ну вы понимаете.
Единственное, что меня смущает, — местонахождение "resources", ведь в исходниках вполне можно распознать строки, которые обращаются к этим ресурсам. Например, тот же

Впрочем, можно загнать ее в .qproj, и она примет такой вид (пускай JSON, ведь он всем понятен):

{
    "TargetFramework":"qsp 5.7.0",
    "Output":"../НазваниеИгры.qsp",
    "FirstLocation":"Begin"
}

По полю "Output" уже и будем обращаться к ресурсам, фух. Почему не прямо:

root
├─resources
│ └─Картиночке.jpeg
├─ПапкаСЛокациями1
│ ├─СборникЛокаций1.qsps
│ ├─СборникЛокаций2.qsps
│ └─СборникЛокаций3.qsps
├─Папка2
│ └─СборникЛокаций1.qsps
├─Папка3
│ ├─ОчереднойСборникЛокаций.qsps
│ ├─Подпапка
│ │ └─ИЕщеОдинСборникЛокаций.qsps
│ ├─СлишкоМалоЛокаций.qsps
│ └─ЭтомуМируНужноБольшеРазныхЛокаций.qsps
├─НазваниеИгры.qproj
└─НазваниеИгры.qsp

Чтобы не перебирать папки с ресурсами лишний раз, мало ли, вдруг их много. Что скажете?

Label

Их тоже нужно научиться обрабатывать как токен

:label
jump 'label'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.