AntlrVSIX - 好用(?)的ANTLR语言服务器

最近要写.g4文件,上网找antlr的Emacs支持,发现内置有一个antlr-mode,但效果好像不是很好(也许是我配置的问题?)最后在GitHub找到了AntlrVSIX,一个VS的插件。正当打算关闭标签页的时候,突然看到支持LSP。于是就折腾了一下。(官方其实也有说支持Emacs)

仓库链接: kaby76/AntlrVSIX: AntlrVSIX is a language server for use with Visual Studio 2019, Visual Studio Code, and Gnu Emacs to support Antlr, Bison, and W3C EBNF grammars. In addition to the IDE extensions provided here, a command-line tool is available to refactor grammars in order to make them cleaner, more readable, and more efficient. (github.com)

官方的教程: AntlrVSIX/Emacs at master · kaby76/AntlrVSIX (github.com)

官方的实在是太麻烦了,于是我写了:

(straight-use-package
 '(el-patch :type git :host github :repo "kaby76/AntlrVSIX"))

  (add-to-list 'lsp-language-id-configuration
	       '(antlr-mode . "antlr"))
  (lsp-register-client
   (make-lsp-client :new-connection (lsp-stdio-connection "~/.emacs.d/straight/repos/AntlrVSIX/Server/bin/Release/Server.exe") ;; change if needed!!!
                    :activation-fn (lsp-activate-on "antlr")
                    :server-id 'AntlrVSIX))

其中lsp-stdio-connection的路径要给到Server.exe。至于Server.exe,则需要用dotnet手动编译一下AntlrVSIX项目下的Server,建议用Release的配置。

(本来有图片的但是新人只能添加一条媒体条目TaT)

图中编译出来的Server.exe就是我们需要的目标。

另外,这个文件夹可以单独分出来,不影响运行。所以其实也可以编译一次后就将AntlrVSIX删掉。

还有,不知道为什么Emacs不支持识别.g4文件,所以加上:

;; recognize *.g4 as an antlr file
(add-to-list 'auto-mode-alist '("\\.g4\\'" . antlr-mode))

随便打开一个文件写一点东西,效果如下:

(本来有图片的但是新人只能添加一条媒体条目TaT)

还是蛮不错的。

附注:官方给出的features列表:

(本来有图片的但是新人只能添加一条媒体条目TaT)

附注2:本人萌新一枚,初入Emacs,请各位大佬多多批评指教! :wink:

3 个赞

官方features列表:

效果图片:

antlr-mode 不要用内置的,内置的版本太老了,用下面地址里的版本,选个最新的比如:antlr-mode-3.1.5

试了一下,还是觉得AntlrVSIX会好用一些。可能是我不会使用?比如下面的Hover,用ANTLR-Mode怎么实现:image

觉得不好应该去 emacs-devel 上反映一下,看看能不能升级?

1 个赞

英语渣……而且我也不用这个

emacs不会考虑内置这种带lsp协议的吧?

我是指

升级自带的 antlr-mode

哦哦,好的,谢谢!