Emacs 如何在编译模式下从包跳转到堆栈跟踪错误
我正在尝试获得编译模式,以正确识别Dart中有错误的源文件。下面是一个堆栈跟踪示例Emacs 如何在编译模式下从包跳转到堆栈跟踪错误,emacs,dart,Emacs,Dart,我正在尝试获得编译模式,以正确识别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:ebis
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堆栈帧”这样的行,并在微缓冲区中留下一条错误类型消息“Find this error in…”,请求我输入要跳转到的文件名。我想解决这个问题。所以,有两个问题真的,我不确定它是如何得到包匹配的,也许是其他匹配算法?第二,是否有方法匹配“#0”堆栈帧,以便它只在当前目录(CWD)中查找文件并处理文本
(package:ebisu/src/ebisu_id/id.dart:23:7)
相当于
(file://CWD/packages/ebisu/src/ebisu_id/id.dart:23:7)
CWD的文本替换为当前工作目录的位置?如果将修补程序应用于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))
编译错误regexp alist的docstring提到了这种格式字符串技巧,但如果没有补丁,它似乎无法正常工作