Emacs Typescript 错误行格式输出 - 用户定义选项?

问题描述 投票:0回答:3

我们已经开始使用 TypeScript 和 Emacs 作为我们选择的编辑器。

我们发现的一个问题是 TypeScript 错误行格式似乎与 Emacs 编译模式错误处理不兼容。

例如

如果我们编译一个 C 程序并引入一个故意的错误,我们会得到

t1.c:6:5: error: use of undeclared identifier 'a'                                       

如果我们对 TypeScript 编译器执行相同的操作(忽略该消息,其格式很重要)

utilities.ts(13,18): error TS2384: Overload signatures must all be ambient or non-ambient.

Emacs 可以使用键盘命令 ESC-g n 处理第一类错误消息,并将主编辑器窗口移动到错误处。

Emacs 无法处理第二个错误行格式。

我们通过将 TypeScript 编译器包装在 Perl 脚本中,并让 Perl 脚本适当地重新格式化行,找到了一种解决方法。这可行,但有点混乱,如果 TypeScript 具有更多的灵活性那就太好了。

我们想知道是否有一个标志或某种方法可以将 Typescript 错误输出更改为与 Emacs 兼容的格式。

emacs typescript
3个回答
1
投票

t1.c:6:5: ...
格式实际上是GNU编码标准中记录的官方格式,所以我认为你应该联系Typescript编译器的作者并要求他们更改错误消息的格式。

同时,您需要调整

compilation-error-regexp-alist
向compile.el 解释如何识别 Typescript 的错误消息。

大概是这样的

(eval-after-load 'compile
  (add-to-list 'compilation-error-regexp-alist
               '("^\\([^(\n]+\\)(\\([0-9]+\\),\\([0-9]+\\)):" 1 2 3)))

可能会让你开始。如果某些消息不是实际错误,而是更像警告或辅助信息,您可以改进上述内容。有关格式的详细信息,请参见

C-h v compilation-error-regexp-alist RET


1
投票

您还可以通过运行类似

tsc --pretty false app.ts
的命令来关闭漂亮模式,然后 emacs 编译模式将开始识别错误输出。


0
投票

重申上面 Dimitri 所说的,您可以以正常方式将

tsc
调用包装在
Makefile
中:

TSC = tsc
TSCFLAGS := --noEmitOnError --pretty false

.PHONY: clean

all: app.js

app.js: app.ts
    $(TSC) $(TSCFLAGS) $<

clean:
    rm -f *.js

现在您可以

M-x compile
,然后
M-x next-error
,Emacs 将能够正确解释
tsc
输出(因为 --pretty 选项)。

© www.soinside.com 2019 - 2024. All rights reserved.