0

我正在尝试使用编译模式来正确识别 Dart 中存在错误的源文件。这是一个示例堆栈跟踪。

Illegal argument(s): Id has invalid characters sample.xmi
#0      Id.Id (package:ebisu/src/ebisu_id/id.dart:23:7)
#1      id (package:ebisu/src/ebisu_dart_meta/meta.dart:1104:22)
#2      library (package:ebisu/src/ebisu_dart_meta/meta.dart:1108:46)
#3      Converter.convert (file:///home/user/open_source/codegen/dart/xmi/lib/xmi_to_dart.dart:44:30)
#4      main (file:///home/user/open_source/codegen/dart/xmi/lib/xmi_to_dart.dart:164:20)

首先,我不确定要使用的最佳飞镖模式。我找到了这两个:

不确定推荐哪个?我正在尝试使用第一个,但我没有看到与编译错误支持相关的任何内容。后者有一些东西,但它不匹配(可能随着编译器消息/堆栈跟踪的发展而过时)。在这里,在我的尝试中,我将这些行添加到第一个飞镖模式文件中:

(require 'compile)
(add-to-list 'compilation-error-regexp-alist 'dart)
(add-to-list 'compilation-error-regexp-alist-alist 
             '(dart "(file://\\([^:]*\\):\\([0-9]*\\):\\([0-9]*\\))" 1 2 3))

因此,这确实与列为“...(file:///...)”的行匹配,并正确跳转到错误。它(或其他一些表达式)错误地识别示例'...(package:ebisu/src/...)'中的#0堆栈帧之类的行,并留下错误类型消息“在...中查找此错误" 在 minibuffer 中要求我输入要跳转到的文件名。我想解决这个问题。所以,真的有两个问题,我不确定它是如何匹配包的,也许是其他匹配算法?其次,有没有办法匹配“#0”堆栈帧,以便它只在当前目录(CWD)中查找文件并处理文本

(package:ebisu/src/ebisu_id/id.dart:23:7) 

相当于

(file://CWD/packages/ebisu/src/ebisu_id/id.dart:23:7)

CWD 在哪里用当前工作目录替换文本?

4

1 回答 1

1

如果您将Emacs 错误 11777中的补丁应用到 compile.el,您应该能够执行以下操作:

(add-to-list 'compilation-error-regexp-alist 'dart-package)
(add-to-list 'compilation-error-regexp-alist-alist 
             '(dart-package "(package:\\([^:]*\\):\\([0-9]*\\):\\([0-9]*\\))"
                            (1 "packages/%s") 2 3))

文档字符串compilation-error-regexp-alist提到了这种格式字符串技巧,但如果没有补丁,它似乎无法正常工作。

于 2013-04-23T16:23:05.237 回答