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)

まず、使用するのに最適なダーツ モードがわかりません。私はこれらの2つを見つけました:

どれが推奨されているかわかりませんか?最初のものを使用しようとしていますが、コンパイル エラーのサポートに関連するものは何も表示されません。後者には何かがありますが、一致していません (コンパイラ メッセージ/スタック トレースが進化したため、おそらく古くなっています)。ここで、私の試みでは、これらの行を最初のダーツ モード ファイルに追加しました。

(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 ...」というエラー タイプ メッセージを残します。 " ジャンプ先のファイル名を入力するように要求するミニバッファー。これを修正したい。それで、本当に2つの質問があります。パッケージの一致をどのように取得したかわかりません。おそらく他の一致アルゴリズムですか?次に、現在のディレクトリ (CWD) でファイルを検索してテキストを処理するように、「#0」スタック フレームを一致させる方法はありますか?

(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))

の docstring はcompilation-error-regexp-alist、このフォーマット文字列のトリックについて言及していますが、パッチがないと正しく動作しないようです。

于 2013-04-23T16:23:05.237 に答える