LoginSignup
1
1

More than 5 years have passed since last update.

sonar-web-pluginに独自のチェックをさせる方法

Last updated at Posted at 2014-11-05

題名にsonar-web-pluginに独自のチェックをさせる方法と書きましたが、
現状存在しないと、Stack Overflowに書いてありました。。。

なので、今回はsonar-web-pluginをgitから落としてきて改造する方法になります。

前提:独自チェックするコードは既にあるものとし、今回はそれをsonarのプラグイン上で動くようにします。

準備:githubからソースを落とす。以下から取れます。
https://github.com/SonarCommunity/sonar-web.git

落としたら、Eclipseか何かに取り込んで早速編集開始。
1.既にあるチェックモジュールを必要なパッケージごと、
  「src/main/java」にコピーして引越ししましょう。

2.チェックモジュールを登録します。
  以下のソースに独自のチェックを行うクラス(MyCheck)を書き足しします。
  クラス名:org.sonar.plugins.web.rules.CheckClasses


  private static final Class[] CLASSES = new Class[] {
          ・・・
      MyCheck.class
   };

3.SonarQubeのプロファイルに表示されるルール名を登録します。
  以下のテキストファイルにキーバリューで登録します。
  ファイル:src/main/resources/org/sonar/l10n/web.properties
  設定値:rule.Web.MyCheck.name=My Checker

4.独自チェックで引っ掛かった場合のソリューションをhtmlで提供します。
  以下に、3で書いた設定値のキー(MyCheck).htmlというファイルを追加し、
  そこに記載します。
htmlを置く場所:src/main/resources/org/sonar/l10n/web/rules/Web

5.独自チェックを行うソースをsonarプラグインとして動くようにします。
①classにアノテーションを付けて、「AbstractPageCheck」を継承する。
以下のような感じになります。


@Rule(key = "MyCheck", priority = Priority.MAJOR)
@WebRule(activeByDefault = true)
@RuleTags( {RuleTags.CONVENTION, RuleTags.JSP_JSF, RuleTags.HTML5} )
public class MyCheck extends AbstractPageCheck{
  ・・・
}

@Ruleのkeyに指定しているのは、3,4で書いた設定値のキーです。
@RuleTagsは、SOnarQubeの品質プロファイルにみたときに、何のチェックがされるかというのをGUIで可視化してくれます。(自己申告ですが。)

②デフォルトのコンストラクタは暗黙で呼ばれるので、行いたい初期処理があれば、入れておきます。

③public void startDocument(List nodes) をオーバーライド実装します。
これは、1ファイルの読み込みが開始したときに呼ばれるメソッドです。
このメソッドの上で実際のチェックを走らせます。
ファイル自体は以下のメソッドで取れるので、元のチェックがFileが渡される作りであるならば、以下メソッドで取って渡せば、全て同じに動きます。
メソッド:super.getWebSourceCode().getFile();

④チェックに引っ掛かったら、以下のメソッドを呼んで、違反を知らせます。
チェックが終わると、まとめて書かれます。

 createViolation("違反が発生した行番号", "違反メッセージ");

書くのはこれだけです。
これをビルドしてjarファイルを作成しなおし、
{SONAR_HOME}/extension/pluginの下に置いて、SonarQubeを再起動すれば、独自チェックが走るようになります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1