LuaHelper is a High-performance lua plugin, Language Server Protocol for lua.

Lua Helper Guide

logo

Introduction

Lua is very popular in game development because of its simple syntax and flexible use. However, its ecology is not perfect, and IDE tools and support are few, which affects Lua's development efficiency and quality. LuaHelper complies with Microsoft Language Server Protocol and is a cross-platform Lua code editing and testing tool developed in go language. Compared with other Lua plugins currently on the market, it has the following improvements:

  • 1. Coroutine development, real-time detection, millisecond output detection results
  • 2. Support large-scale Lua projects, perfectly support editing and testing of 1000+ file project
  • 3. Comprehensive error type detection, including: grammar detection, semantic detection
  • 4. Various types of reference search, including: multi-file reference search, multi-layer reference search
  • 5. Rich configurable items, including: multiple alarm information configurations, ignorable file settings
  • 6. Low memory consumption, low-performance machines can still run smoothly

Lua因其语法简单、使用灵活,在游戏开发中十分流行。但其生态并不完善,IDE开发工具及配套支持较少,一定程度上影响了Lua的开发效率及质量。LuaHelper遵从微软Language Server Protocol协议,是采用go语言开发的一种跨平台Lua代码编辑及检测工具。

相较目前市面其他Lua插件,具有以下改进

  • 1.协程开发,实时检测,毫秒级输出检测结果
  • 2.支持大型Lua项目,完美支持1000+文件项目工程的编辑与检测
  • 3.全面的错误类型检测,包括:语法检测、语义检测
  • 4.多种类引用查找,包括:多文件引用查找、多层引用查找
  • 5.丰富的可配置项,包括:多种告警信息配置、可忽略文件设定
  • 6.内存消耗低,低性能机器仍可流畅运行

Documentation

Background [项目背景] | Configuration [检查配置] | Manual [源码介绍] | Annotate [注解功能]

Feature Summary

Code Editing

Code Detection

Debug lua

调试功能集成了腾讯开源LuaPanda的调试组件,采用了Debug Adapter Protocol调试协议。debugger主体使用lua语言开发,调试程序只要引入LuaPanda.lua文件,即可方便开启调试功能。

Installation

App Market Installation

应用市场安装

avatar

Acknowledgements

  • luago-books, go语言生成lua的AST,修改了源码(对AST的每个节点增加了列的属性,同时也优化了性能)。
  • LuaFormatter, c++写的Lua代码格式化库,性能较高。
  • LuaPanda, 集成了LuaPanda的调试组件,LuaPanda的作者stuartwang也给我们提供了很多帮助。
  • EmmyLua, 作者阿唐对我们整个插件的实现提供很多帮助和建议。

Support

If you have any questions, please refer to FAQ. If you have any questions, please use issues. We will follow and reply. 如有问题先参阅 FAQ ,如有问题建议使用 issues ,我们会关注和回复。

Email:[email protected]; [email protected]; [email protected]

QQ群:747590892

Comments
  • return定义的的类型无法传递出来了!

    return定义的的类型无法传递出来了!

    ---@class MyModel
        local myModel = class('MyModel')
    
        ---@return MyModel
        function getMyModel()
            return myModel
        end
    
        local model = getMyModel()  -- type is any ??
    

    麻烦作者抽看看一下,是不是之前改出bug了? 这还是非常常用的提示功能,听影响coding的。

  • [bug] 执行文件时未加入双引号以及“luaPath”定义无效

    [bug] 执行文件时未加入双引号以及“luaPath”定义无效

    VSCode Version: 1.62.2 Extension Version: v0.2.2

    问题描述: 在独立文件调试模式中

    1. 当系统登陆用户名含有空格时,其路径事例类似:”C:/Users/USER 1“,这种情况下当Lua Helper执行自身路径下的Lua5.4.exe时未加入双引号,致使CMD/PS因存在空格无法执行对应文件,表现为 'c:/Users/USER' 不是内部或外部命令,也不是可运行的程序或批处理文件。 建议加入双引号或者使用%USERPROFILE%

    2. 为了解决问题1,我尝试修改launch.json中的luaPath为 %USERPROFILE%/.vscode/extensions/yinfei.luahelper-0.2.2/debugger/luasocket/win/x64/lua5.4/lua54.exe 后执行调试发现没有变化,遂改成说明中默认的 "C:/lua5.3/lua.exe" 发现执行调试时的命令行依旧无变化 提示该配置没有起到正确作用

  • 插件一直报错,连接已关闭

    插件一直报错,连接已关闭

    问题

    经常写着代码突然弹出日志窗口提示错误,很影响体验,完全没法正常用

    image

    环境

    • 系统:Windows 11
    • 网络:广东电信 / 香港梯子(国内白名单模式)
    • VSCode Insider 版本
    • Lua Helper:v0.2.11

    错误内容

    [Info  - 09:06:18] Connection to server got closed. Server will restart.
    [Error - 09:06:18] Request textDocument/documentHighlight failed.
    Error: Connection got disposed.
        at Object.dispose (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\connection.js:1061:27)
        at Object.dispose (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-languageclient\lib\common\client.js:73:35)
        at LanguageClient.handleConnectionClosed (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-languageclient\lib\common\client.js:2474:42)
        at LanguageClient.handleConnectionClosed (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-languageclient\lib\node\main.js:159:15)
        at closeHandler (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-languageclient\lib\common\client.js:2461:18)
        at CallbackList.invoke (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\events.js:55:39)
        at Emitter.fire (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\events.js:117:36)
        at closeHandler (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\connection.js:260:26)
        at CallbackList.invoke (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\events.js:55:39)
        at Emitter.fire (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\events.js:117:36)
        at StreamMessageReader.fireClose (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\messageReader.js:40:27)
        at Socket.<anonymous> (c:\Users\Akkariin\.vscode-insiders\extensions\yinfei.luahelper-0.2.11\node_modules\vscode-jsonrpc\lib\common\messageReader.js:125:42)
        at Socket.emit (node:events:402:35)
        at Pipe.<anonymous> (node:net:687:12)
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x0 addr=0x68 pc=0xf4cea9]
    
    goroutine 600 [running]:
    luahelper-lsp/langserver/check/results.(*FileResult).FindGlobalVarInfo(...)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/results/file_result.go:191
    luahelper-lsp/langserver/check/analysis.(*Analysis).findGlobalVar(0xc0002cf680, 0xc00023330b, 0xc, 0x3, 0x0, 0x3, 0xc, 0x0, 0x0, 0xc000400000, ...)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_search.go:378 +0x549
    luahelper-lsp/langserver/check/analysis.(*Analysis).findNameStr(0xc0002cf680, 0xc00040be60, 0x0)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_search.go:430 +0x23d
    luahelper-lsp/langserver/check/analysis.(*Analysis).cgNameExp(0xc0002cf680, 0xc00040be60, 0x0)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_exp.go:69 +0x65
    luahelper-lsp/langserver/check/analysis.(*Analysis).cgExp(0xc0002cf680, 0xff7180, 0xc00040be60, 0x0, 0x0, 0x0, 0x0)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_exp.go:22 +0x2eb
    luahelper-lsp/langserver/check/analysis.(*Analysis).cgFuncCallStat(0xc0002cf680, 0xc00058d720)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_stat.go:47 +0x71
    luahelper-lsp/langserver/check/analysis.(*Analysis).cgStat(0xc0002cf680, 0xff6f00, 0xc00058d720)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_stat.go:14 +0x4bd
    luahelper-lsp/langserver/check/analysis.(*Analysis).cgBlock(0xc0002cf680, 0xc000216690)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis_block.go:10 +0x77
    luahelper-lsp/langserver/check/analysis.(*Analysis).HandleTermTraverseAST(0xc0002cf680, 0x4, 0xc000426a50, 0x0)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/analysis/analysis.go:412 +0x132
    luahelper-lsp/langserver/check.(*AllProject).handleFindferences(0xc000183110, 0xc0002cf5e0)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/check_lsp_references.go:29 +0x1f3
    luahelper-lsp/langserver/check.(*AllProject).FindReferences(0xc000183110, 0xc000546840, 0x59, 0xc000129930, 0x3, 0xc00020acf0, 0x1, 0x1)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/check/check_lsp_references.go:128 +0x805
    luahelper-lsp/langserver.(*LspServer).TextDocumentHighlight(0xc00019c140, 0x110ea20, 0xc00020ac30, 0xc0005467e0, 0x5d, 0x21000000c0, 0x0, 0x0, 0x0, 0x0, ...)
    	G:/companyproject/LuaHelper/github/LuaHelper/luahelper-lsp/langserver/textdocument_highlight.go:39 +0x247
    reflect.Value.call(0x1019640, 0xc00006d050, 0x13, 0x108a7e1, 0x4, 0xc00020ac60, 0x2, 0x2, 0xc00020ac60, 0x199, ...)
    	D:/Go/src/reflect/value.go:476 +0x907
    reflect.Value.Call(0x1019640, 0xc00006d050, 0x13, 0xc00020ac60, 0x2, 0x2, 0x2, 0xc00020ac60, 0x1)
    	D:/Go/src/reflect/value.go:337 +0xc5
    github.com/yinfei8/jrpc2/handler.newHandler.func8(0x110ea20, 0xc00020ac30, 0xc0004be140, 0x1058680, 0xc00020ac30, 0x101db00, 0x1359c40)
    	D:/Go/gopath/pkg/mod/github.com/yinfei8/[email protected]/handler/handler.go:240 +0x1fb
    github.com/yinfei8/jrpc2/handler.Func.Handle(0xc00006f440, 0x110ea20, 0xc00020ac30, 0xc0004be140, 0x0, 0x0, 0x110ea20, 0xc00020ac30)
    	D:/Go/gopath/pkg/mod/github.com/yinfei8/[email protected]/handler/handler.go:23 +0x4b
    github.com/yinfei8/jrpc2.(*Server).invoke(0xc0001a0000, 0x110e978, 0xc0004be180, 0x1109300, 0xc00006f440, 0xc0004be140, 0x0, 0x0, 0x0, 0x0, ...)
    	D:/Go/gopath/pkg/mod/github.com/yinfei8/[email protected]/server.go:351 +0x1ae
    github.com/yinfei8/jrpc2.(*Server).dispatch.func1.1()
    	D:/Go/gopath/pkg/mod/github.com/yinfei8/[email protected]/server.go:233 +0xec
    created by github.com/yinfei8/jrpc2.(*Server).dispatch.func1
    	D:/Go/gopath/pkg/mod/github.com/yinfei8/[email protected]/server.go:236 +0x15e
    
  • err vscodeRoot: is not exist

    err vscodeRoot: is not exist

    How to reproduce the bug Method 1:

    1. open a new vscode window (CTRL+SHIFT+O)
    2. CTRL + O
    3. Select the .lua file

    Method 2:

    1. Open Windows File Explorer
    2. Open the .lua file with a double click

    image

  • Run lua-format failed with exit code: 3221225595

    Run lua-format failed with exit code: 3221225595

    插件版本:0.2.9 VSCode版本: 1.62.3 OS: Windows_NT x64 10.0.19043

    格式化报错,开启日志也没有报错输出。 直接执行 extensions\yinfei.luahelper-0.2.9\server\win32\lua-format.exe 提示 “应用程序无法正常启动(0xc000007b)”

    使用vscode-lua-format格式化,一切正常。

    可能是插件自带 lua-format.exe 有问题?

  • LuaHelper-DebugFile

    LuaHelper-DebugFile

    LuaHelper-DebugFile 一闪而过 不起作用,麻烦给看看休息 ,luaPath/packagePath填写什么呢 { "type": "LuaHelper-Debug", "request": "launch", "name": "LuaHelper-DebugFile", "luaPath": "", "packagePath": [], "luaFileExtension": "cocos2dx", "connectionPort": 8818, "stopOnEntry": true, "useCHook": true, "logLevel": 1 }

  • for 循环没有注释提示

    for 循环没有注释提示

    ---@class Cat
    local Cat = class()
    
    function Cat:test()
    end
    
    
    ---@type table<string, Cat>
    local catsMap = {}
    
    
    ---@return table<string, Cat>
    function getCatsMap()
        return catsMap
    end
    
    
    ---@param catData Cat
    for catId, catData in pairs(getCatsMap()) do
        catData:test()  -- 这句打的时候没提示
    end
    

    如题,这是一个简单的例子,for循环中的提示还是蛮常用的,期待这个支持能早日向emmet一样。 这是我在vscod中用到的最好用的插件了,所以很期待能早日解决这个需求,感激不尽~谢谢辛苦付出的作者

  • todo highlight on multi dashes

    todo highlight on multi dashes

    The change made within the json file makes the todo work on comments with multible dashes like this,

    -- todo: some things
    --- todo: these things
    ---------------                          todo: or these things
    
  • 当方法里 local 与 self 同名时,修正 self 指向正确的位置,通过 scope 寻找合适的 variable 位置

    当方法里 local 与 self 同名时,修正 self 指向正确的位置,通过 scope 寻找合适的 variable 位置

    修正下面这样的场景,hover 或 define foo:test() 中的 self:bar() 时,无法定位到 foo:bar()

    local AnyLib = require("anylib")
    local foo = {}
    
    function foo:test()
        local foo = {}
        self:bar()
    end
    
    function foo:bar()
    end
    
  • 函数注解

    函数注解

    ---@param p1 number @
    ---@param p2 number | nil @
    local function func(p1, p2)
        p2 = p2 or 100
        print(p1, p2)
    end
    

    期望p2可以不写,不写的话会自动给一个默认值 如果加了注解但是不写p2的话 会报错 这种应该怎么写

  • 无法调试

    无法调试

    require("socket.core")

    PS D:\UserProfiles\Menu\Desktop\test> lua -e "package.path = 'c:/Users/MengyuZhang/.vscode/extensions/yinfei.luahelper-0.2.7/debugger/?.lua;'.. package.path; package.cpath = 'c:/Users/MengyuZhang/.vscode/extensions/yinfei.luahelper-0.2.7/debugger/luaso/MengyuZhang/.vscode/extensions/yinfei.luahelper-0.2.7/debugger/luasocket/win/x64/lua5.3/?.dll;'.. package.cpath; require('LuaPanda').start('127.0.0.1',8818);" "d:/UserProfiles/MengyuZhang/Desktop/test/test.lua" [LuaPanda] [Error] reGetSock fail [LuaPanda] [Error] Start debugger but get Socket fail , please install luasocket! C:\Program Files\lua\lua.exe: error loading module 'socket.core' from file 'c:/Users/MengyuZhang/.vscode/extensions/yinfei.luahelper-0.2.7/debugger/luasocket/win/x64/lua5.3/socket\core.dll':
    %1 不是有效的 Win32 应用程序。

    require socket的时候可以看到这个报错。单个文件调试的时候会这样。 项目里也不能调试,可能也是这个原因

  • [BUG] 多行注释格式化问题

    [BUG] 多行注释格式化问题

    --[[
    Date: 2023年1月5日
    Author: msc
    --]]
    local name = "msc"
    

    上面的lua代码格式化之后会变成下面的这样,

    --[[
    Date: 2023年1月5日
    Author: msc
    --]] local name = "msc"
    
  • Why does the extension needs to access Tencent Cloud?

    Why does the extension needs to access Tencent Cloud?

    Hi,

    Is there a way to optout?

    Thanks

    https://github.com/Tencent/LuaHelper/blob/cc916454171f5d70f18ff2bc6229ba2059d5b9f0/luahelper-lsp/langserver/get_online_req.go#L37

    image
  • Read config from .editorconfig for formatter.

    Read config from .editorconfig for formatter.

    [*]
    charset = utf-8
    indent_style = space
    indent_size = 2
    insert_final_newline = true
    trim_trailing_whitespace = true
    max_line_length = 80
    quote_type = single
    

    https://editorconfig.org/

  • linuxlualsp进程占满CPU

    linuxlualsp进程占满CPU

    当安装了此插件,然后在vscode中打开lua文件时,系统会卡死,查看后发现linuxlualsp这个进程占满了所有CPU核。

    插件版本:v0.2.19 系统信息:Linux debian 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux

  • 能否添加类对象返回自身的类型推断

    能否添加类对象返回自身的类型推断

    如题,目前luaHelper 对于返回self的方法没办法自动推断类型,希望增加支持

    `---@class myClass local myClass = class("myClass")

    function myClass:GetSelf() return self -- deduce return type is any now, not myClass end `

A small hexeditor with plugin support, written in Go
A small hexeditor with plugin support, written in Go

Hexdunk A basic gui hex-editor with vi bindings. Features Fast loading and editing of arbitrary large files. Fast cut/copy/paste. Looks good. Unlimite

Sep 4, 2022
🔥 Continuous profiling platform — debug performance issues in your code!
🔥  Continuous profiling platform — debug performance issues in your code!

Pyroscope is an open source continuous profiling platform.

Jan 7, 2023
Drive performance measurement tool

dperf is a drive performance measurement tool to identify slow drives in your host. It takes multiple file paths as input, and performs I/O parallely on those files. The read and write throughput are printed in sorted order, with the fastest drives shown first.

Nov 23, 2022
Heart 💜A high performance Lua web server with a simple, powerful API
Heart 💜A high performance Lua web server with a simple, powerful API

Heart ?? A high performance Lua web server with a simple, powerful API. See the full documentation here. Overview Heart combines Go's fasthttp with Lu

Aug 31, 2022
Create a Protocol Buffers (Protobuf) plugin, which is executed with the protoc compileCreate a Protocol Buffers (Protobuf) plugin, which is executed with the protoc compile

Interview Assignment Overview You assignment is to create a Protocol Buffers (Protobuf) plugin, which is executed with the protoc compiler. In this ex

Nov 19, 2021
🔑A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout (LSM+WAL) similar to Riak.

bitcask A high performance Key/Value store written in Go with a predictable read/write performance and high throughput. Uses a Bitcask on-disk layout

Sep 26, 2022
the pluto is a gateway new time, high performance, high stable, high availability, easy to use

pluto the pluto is a gateway new time, high performance, high stable, high availability, easy to use Acknowledgments thanks nbio for providing low lev

Sep 19, 2021
🎀 a nice lil shell for lua people made with go and lua

Hilbish ?? a nice lil shell for lua people made with go and lua It is currently in a mostly beta state but is very much usable (I'm using it right now

Jan 3, 2023
Please is a cross-language high-performance extensible build system for reproducible multi-language builds.

Please is a cross-language build system with an emphasis on high performance, extensibility and reproducibility. It supports a number of popular languages and can automate nearly any aspect of your build process.

Dec 30, 2022
High-performance framework for building redis-protocol compatible TCP servers/services

Redeo The high-performance Swiss Army Knife for building redis-protocol compatible servers/services. Parts This repository is organised into multiple

Jan 4, 2023
Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.1.1 and V5 in golang

中文文档 Gmqtt News: MQTT V5 is now supported. But due to those new features in v5, there area lots of breaking changes. If you have any migration problem

Jan 5, 2023
high performance distributed task scheduling system, Support multi protocol scheduling tasks
 high performance distributed task scheduling system, Support multi protocol scheduling tasks

high performance distributed task scheduling system, Support multi protocol scheduling tasks

Dec 2, 2022
纯Go编写的IM,完全自定义协议的高性能即时通讯服务(High-performance instant messaging service with fully customizable protocol)
纯Go编写的IM,完全自定义协议的高性能即时通讯服务(High-performance instant messaging service with fully customizable protocol)

LiMaoIM (Everything so easy) This project is a simple and easy to use, powerful performance, simple design concept instant messaging service, fully cu

Dec 5, 2022
Gorm-sharding - High performance table sharding plugin for Gorm

Gorm Sharding This project has moved to Gorm offical organization: https://githu

Nov 18, 2022
Dec 28, 2022
go-fastdfs 是一个简单的分布式文件系统(私有云存储),具有无中心、高性能,高可靠,免维护等优点,支持断点续传,分块上传,小文件合并,自动同步,自动修复。Go-fastdfs is a simple distributed file system (private cloud storage), with no center, high performance, high reliability, maintenance free and other advantages, support breakpoint continuation, block upload, small file merge, automatic synchronization, automatic repair.(similar fastdfs).
go-fastdfs 是一个简单的分布式文件系统(私有云存储),具有无中心、高性能,高可靠,免维护等优点,支持断点续传,分块上传,小文件合并,自动同步,自动修复。Go-fastdfs is a simple distributed file system (private cloud storage), with no center, high performance, high reliability, maintenance free and other advantages, support breakpoint continuation, block upload, small file merge, automatic synchronization, automatic repair.(similar fastdfs).

中文 English 愿景:为用户提供最简单、可靠、高效的分布式文件系统。 go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。 大家担心的是这么简单的文件系统,靠不靠谱,可不

Jan 8, 2023
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.
LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability.

LinDB is an open-source Time Series Database which provides high performance, high availability and horizontal scalability. LinDB stores all monitoring data of ELEME Inc, there is 88TB incremental writes per day and 2.7PB total raw data.

Jan 1, 2023
High level go to Lua binder. Write less, do more.
High level go to Lua binder. Write less, do more.

Binder High level go to Lua binder. Write less, do more. Package binder allows to easily bind to Lua. Based on gopher-lua. Write less, do more! Killer

Oct 9, 2022
A Language Server Protocol (LSP) server for Jsonnet

Jsonnet Language Server Warning: This project is in active development and is likely very buggy. A Language Server Protocol (LSP) server for Jsonnet.

Nov 22, 2022
A Language Server Protocol (LSP) server for Jsonnet

Jsonnet Language Server A Language Server Protocol (LSP) server for Jsonnet. Features Jump to definition self-support.mp4 dollar-support.mp4 Error/War

Dec 14, 2022