Menu

絶対パスによるインクルードも警告してほしい

Anonymous
2012-09-01
2012-09-24
  • Anonymous

    Anonymous - 2012-09-01

    AdLintが報告する警告についての要望です.

    ヘッダファイルのインクルードを絶対パスで行なっているようなケースも警告してほしいです.
    例えば下のようなケースです.
    #include </usr>
    #include "/usr/local/include/foo.h"
    これは明らかに移植性を下げると思いますので.

    また上に関連して,プロジェクトのディレクトリに含まれるヘッダファイルを
    #include <config.h>
    としてインクルードするケースも,慣例に反し保守性を下げると思うので
    #include "config.h"
    のように書くよう警告があると助かります.

     
    • Yutaka Yanoh

      Yutaka Yanoh - 2012-09-21

      ご要望ありがとうございます。

      たしかに、絶対パス指定のインクルードや、プロジェクト内のヘッダをシステムヘッダのように #include \<...> でインクルードするのは望ましくないですね。
      上記ふたつのコードチェック機能を新規追加しました。


      追加ですが、既存のコードチェック機能とは異なる方法で対応しました。
      AdLint 本体に直接組み込むのではなく、オプションでインストール可能な別コード検査パッケージ adlint-exam-c_staging を新規作成し、このパッケージに収録する形態となります。

      インストール方法

      % gem install adlint-exam-c_staging
      

      adlint-exam-c_staging パッケージのインストールには AdLint 2.4.0 以降のバージョンが必要です。

      使用方法

      adlintize コマンドで生成した特性ファイルを下記のように修正してから解析してください。

      % cp adlint-traits.yml adlint-traits.yml.orig
      % vi adlint-traits.yml
      % diff -u adlint_traits.yml.orig adlint_traits.yml
      --- adlint_traits.yml.orig      2012-09-21 11:06:03.203849235 +0900
      +++ adlint_traits.yml   2012-09-21 11:28:04.668237869 +0900
      @@ -17,6 +17,7 @@
       # list to specify which examination packages are to be run.
       exam_packages:
         - "c_builtin"
      +  - "c_staging"
      
       #
       # Project specific traits section
      

      この修正により、既存の AdLint 組み込みのコードチェックと、adlint-exam-c_staging パッケージが提供するコードチェックを使用して解析します。

      サンプルセッション

      % mkdir absinc
      % cd absinc
      % vi absinc.c
      % cat absinc.c
      #include "/dev/null"
      #include </dev/null>
      % adlintize
      % cp adlint_traits.yml adlint_traits.yml.orig
      % vi adlint_traits.yml
      % diff -u adlint_traits.yml.orig adlint_traits.yml
      --- adlint_traits.yml.orig      2012-09-21 11:36:25.317944491 +0900
      +++ adlint_traits.yml   2012-09-21 11:36:34.714826366 +0900
      @@ -17,6 +17,7 @@
       # list to specify which examination packages are to be run.
       exam_packages:
         - "c_builtin"
      +  - "c_staging"
      
       #
       # Project specific traits section
      % make
      adlint_sma -t adlint_traits.yml -o . -p 1 absinc.c
      absinc.c:1:1:warning:c_staging:W2001:UNC:X99:`/dev/null' は絶対パス指定でインクルードされています。
      /dev/null::warning:c_builtin:W9002:UNC:X99:ファイルの末尾に改行文字がありません。
      absinc.c:2:1:warning:c_staging:W2001:UNC:X99:`/dev/null' は絶対パス指定でインクルードされています。
      absinc.c:2:1:warning:c_builtin:W0070:UNC:X99:インクルードされている </dev/null> の内容は翻訳単位の中で全く 参照されていません。削除することができます。
      absinc.c:1:1:warning:c_builtin:W0071:UNC:X99:インクルードされている "/dev/null" の内容は翻訳単位の中で全く 参照されていません。削除することができます。
      adlint_cma -t adlint_traits.yml -o . absinc.c.met.csv
      

      ぜひお試しください。

       
  • Anonymous

    Anonymous - 2012-09-23

    要望へのご対応,またそれを新しいパッケージに取りまとめるお手間をおかけ頂き,誠にありがとうございます.c_stagingを追加し,望みの結果が得られることを確認いたしました.

    さらにこれは,もし独自のコードチェックを追加したくなったときに良い参考になりそうですね.

     

Log in to post a comment.