0

grunt-tslint を使用して typescript プロジェクトを分析することができました。いくつか問題があります。

デフォルトでは、入力 TS ファイルごとに 1 つの出力ファイルが作成されます。すべての出力ファイルのファイル名が同じであるため、これは失敗し、ファイルが既に存在するため、2 番目の出力ファイルの保存は失敗します。この問題は、appendOutput を使用することで回避できます。これにより、各ファイルの分析からの出力が既存のファイルに追加されます。このオプションを使用すると、プロジェクト全体の分析用に 1 つのファイルが作成されます。

これに関する問題は、この投稿で説明されている pmd フォーマッターを使用する場合です。1 つのファイルが解析されれば問題ありません。1 つの pmd.xml ファイルが作成され、有効になります。複数のファイルが作成され、appendOutput オプションを使用すると、同じファイル内に複数のルート タグを持つ複数の xml ドキュメントが次のように取得されます。

<pmd>content</pmd>
<pmd>content</pmd>
<pmd>content</pmd>
<pmd>content</pmd>

(仕事用のPCから投稿できないので、実際のファイルの内容を貼り付けることはできません)。このファイルを jenkins で分析すると、有効な xml ドキュメントではないため失敗します。

この問題にはいくつかの解決策があるように思えます。

  1. 非 pmd ファイル (おそらく json) を出力し、新しい grunt タスクを作成して、その json ファイルを 1 つの有効な pmd タスクに変換します。
  2. grunt-tslint を修正して、異なる名前の複数のファイルを出力できるようにします (コードを見ると、コードの観点からはそれほど難しくありません)。
  3. 壊れたxmlを修正する単調なタスクを作成します(これは、正規表現の検索と置換で実行できる可能性があります)

誰かがこの問題を経験したことがありますか、または他の解決策がありますか?

4

3 に答える 3

0

私は tslint pmd フォーマッタを書きました。私たちもあなたが話している問題に直面したことを思い出しました。よく覚えていませんが、最終的に使用したのは、<pmd>..</pmd>各ファイル違反にタグを追加しないカスタム フォーマッタ バージョンと、出力全体を最終的にこれらでラップするためのワンライナー ウィザードリィだったと思います。お役に立てれば

私がすることは、次のようにpmd フォーマッタを変更することです (これを独自のフォーマッタとして作成できます)。

export class Formatter extends AbstractFormatter {
public format(failures: Lint.RuleFailure[]): string {
   # comment this out
   #let output = "<pmd version=\"tslint\">";
    #insert this instead
    let output ="";
     ...

    #and comment this out
    #output += "</pmd>";

そして、jenkins で次のようなシェル コマンド ステップを作成します。

echo '<pmd version="tslint">'`cat tslint.out`'</pmd>' > tslint.out

私は記憶からこれを書いていますが、うまくいくはずです。

于 2015-10-26T09:51:39.113 に答える
0

上記のリンクで指定されているのと同じ指示に従いました。pmd フォーマッターを変更する代わりに、単純な Linux コマンドが役に立ちました。jenkins_tslint_error ディレクトリに、tslint エラーを含む pmd.xml ファイルが保持されていると仮定します。

ビルドステップに「シェルスクリプトを実行する」というタスクを追加します

grunt -f jenkins-tslint

cd jenkins_tslint_error

sed -i 's|| |g' pmd.xml

sed -i 's|| |g' pmd.xml

sed -i '1s/^//' pmd.xml

sed -i '$a ' pmd.xml

次に、ビルド後のアクションを使用して、PMD 分析結果をキャプチャして使用します

于 2015-11-07T09:43:24.520 に答える