项目作者: tkashi-github

项目描述 :
MISRA-C Check on VSCode
高级语言: Python
项目地址: git://github.com/tkashi-github/MISRA-C_Check.git
创建时间: 2019-05-28T02:56:15Z
项目社区:https://github.com/tkashi-github/MISRA-C_Check

开源协议:GNU General Public License v3.0

下载


cppcheckでMISRA 2012をチェックする方法

cppcheckでは不完全ではありますが、misra-c 2012のチェックが可能です。
vscode等に組み込むことで手元で静的解析が可能です。

このプロジェクトを使用すると、VSCodeでMISRA-C 2012のチェックをかけることができます。

environment

OS:Windows 10
others:VSCode, python

setup

python

https://www.python.jp/ からインストーラをダウンロードしてインストールします。
”Add to PATH”にチェック入れるのを忘れずに。

vscode

  • VSCodeのワークスペースの.vscodeフォルダにmisra_check/tasks.jsonをコピー。他のプロジェクトにgit subomodule addした場合はcommandのパスを適宜書き換えてください。

    1. "version": "2.0.0",
    2. "tasks": [
    3. {
    4. "label": "misra",
    5. "type": "shell",
    6. "command": "${workspaceFolder}\\static-analyze\\misra_chk.bat ${workspaceFolder}\\static-analyze ${file}",
    7. "problemMatcher": []
    8. }
    9. ]
  • VSCodeのkeybindings.jsonに以下を追加。もしくはキーボードショートカットから”workbench.action.tasks.runTask”で検索して追加

    1. {
    2. "key": "shift+alt+m",
    3. "command": "workbench.action.tasks.runTask",
    4. "args": "misra",
    5. }

実行

VSCで*.cを開いた状態でAlt+Shift+mを押すと解析が実行されます。

  1. > Executing task in folder MISRA-C_Check: D:\Workspace\MISRA-C_Check\static-analyze\misra_chk.bat D:\Workspace\MISRA-C_Check\static-analyze d:\Workspace\MISRA-C_Check\target\sample.c <
  2. d:\Workspace\MISRA-C_Check>D:\Workspace\MISRA-C_Check\static-analyze\CppCheck\cppcheck.exe --dump d:\Workspace\MISRA-C_Check\target\sample.c
  3. Checking d:\Workspace\MISRA-C_Check\target\sample.c ...
  4. Checking d:\Workspace\MISRA-C_Check\target\sample.c: WIN_TEST...
  5. d:\Workspace\MISRA-C_Check>python D:\Workspace\MISRA-C_Check\static-analyze\CppCheck\addons\misra.py --rule-texts=D:\Workspace\MISRA-C_Check\static-analyze\misra2012-rule.txt d:\Workspace\MISRA-C_Check\target\sample.c.dump
  6. Checking d:\Workspace\MISRA-C_Check\target\sample.c.dump...
  7. Checking d:\Workspace\MISRA-C_Check\target\sample.c.dump, config ""...
  8. [d:/Workspace/MISRA-C_Check/target/sample.c:99] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  9. [d:/Workspace/MISRA-C_Check/target/sample.c:107] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  10. [d:/Workspace/MISRA-C_Check/target/sample.c:117] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  11. [d:/Workspace/MISRA-C_Check/target/sample.c:180] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  12. [d:/Workspace/MISRA-C_Check/target/sample.c:312] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  13. [d:/Workspace/MISRA-C_Check/target/sample.c:327] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  14. [d:/Workspace/MISRA-C_Check/target/sample.c:331] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  15. [d:/Workspace/MISRA-C_Check/target/sample.c:384] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-4.1]
  16. [d:/Workspace/MISRA-C_Check/target/sample.c:207] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-5.3]
  17. [d:/Workspace/MISRA-C_Check/target/sample.c:228] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-5.3]
  18. [d:/Workspace/MISRA-C_Check/target/sample.c:210] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  19. [d:/Workspace/MISRA-C_Check/target/sample.c:210] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  20. [d:/Workspace/MISRA-C_Check/target/sample.c:230] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  21. [d:/Workspace/MISRA-C_Check/target/sample.c:230] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  22. [d:/Workspace/MISRA-C_Check/target/sample.c:273] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  23. [d:/Workspace/MISRA-C_Check/target/sample.c:287] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  24. [d:/Workspace/MISRA-C_Check/target/sample.c:294] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  25. [d:/Workspace/MISRA-C_Check/target/sample.c:306] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  26. [d:/Workspace/MISRA-C_Check/target/sample.c:318] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  27. [d:/Workspace/MISRA-C_Check/target/sample.c:363] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  28. [d:/Workspace/MISRA-C_Check/target/sample.c:88] (style) JP:ここにMISRA-C 2012の文を載せてください (Advisory) [misra-c2012-11.4]
  29. [d:/Workspace/MISRA-C_Check/target/sample.c:179] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-11.8]
  30. [d:/Workspace/MISRA-C_Check/target/sample.c:273] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  31. [d:/Workspace/MISRA-C_Check/target/sample.c:287] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  32. [d:/Workspace/MISRA-C_Check/target/sample.c:294] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  33. [d:/Workspace/MISRA-C_Check/target/sample.c:175] (style) JP:ここにMISRA-C 2012の文を載せてください (Advisory) [misra-c2012-15.5]
  34. [d:/Workspace/MISRA-C_Check/target/sample.c:61] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  35. [d:/Workspace/MISRA-C_Check/target/sample.c:64] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  36. [d:/Workspace/MISRA-C_Check/target/sample.c:66] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  37. [d:/Workspace/MISRA-C_Check/target/sample.c:158] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  38. [d:/Workspace/MISRA-C_Check/target/sample.c:213] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  39. [d:/Workspace/MISRA-C_Check/target/sample.c:233] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  40. [d:/Workspace/MISRA-C_Check/target/sample.c:274] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  41. [d:/Workspace/MISRA-C_Check/target/sample.c:276] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  42. [d:/Workspace/MISRA-C_Check/target/sample.c:281] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  43. [d:/Workspace/MISRA-C_Check/target/sample.c:283] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  44. [d:/Workspace/MISRA-C_Check/target/sample.c:288] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  45. [d:/Workspace/MISRA-C_Check/target/sample.c:290] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  46. [d:/Workspace/MISRA-C_Check/target/sample.c:295] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  47. [d:/Workspace/MISRA-C_Check/target/sample.c:297] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  48. [d:/Workspace/MISRA-C_Check/target/sample.c:342] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  49. [d:/Workspace/MISRA-C_Check/target/sample.c:348] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  50. [d:/Workspace/MISRA-C_Check/target/sample.c:177] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.7]
  51. [d:/Workspace/MISRA-C_Check/target/sample.c:43] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-21.6]
  52. Checking d:\Workspace\MISRA-C_Check\target\sample.c.dump, config "WIN_TEST"...
  53. [d:/Workspace/MISRA-C_Check/target/sample.c:207] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-5.3]
  54. [d:/Workspace/MISRA-C_Check/target/sample.c:228] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-5.3]
  55. [d:/Workspace/MISRA-C_Check/target/sample.c:210] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  56. [d:/Workspace/MISRA-C_Check/target/sample.c:210] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  57. [d:/Workspace/MISRA-C_Check/target/sample.c:230] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  58. [d:/Workspace/MISRA-C_Check/target/sample.c:230] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  59. [d:/Workspace/MISRA-C_Check/target/sample.c:273] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  60. [d:/Workspace/MISRA-C_Check/target/sample.c:287] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  61. [d:/Workspace/MISRA-C_Check/target/sample.c:294] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  62. [d:/Workspace/MISRA-C_Check/target/sample.c:306] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  63. [d:/Workspace/MISRA-C_Check/target/sample.c:318] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  64. [d:/Workspace/MISRA-C_Check/target/sample.c:363] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-10.4]
  65. [d:/Workspace/MISRA-C_Check/target/sample.c:179] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-11.8]
  66. [d:/Workspace/MISRA-C_Check/target/sample.c:273] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  67. [d:/Workspace/MISRA-C_Check/target/sample.c:287] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  68. [d:/Workspace/MISRA-C_Check/target/sample.c:294] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-14.4]
  69. [d:/Workspace/MISRA-C_Check/target/sample.c:175] (style) JP:ここにMISRA-C 2012の文を載せてください (Advisory) [misra-c2012-15.5]
  70. [d:/Workspace/MISRA-C_Check/target/sample.c:61] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  71. [d:/Workspace/MISRA-C_Check/target/sample.c:64] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  72. [d:/Workspace/MISRA-C_Check/target/sample.c:66] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  73. [d:/Workspace/MISRA-C_Check/target/sample.c:158] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  74. [d:/Workspace/MISRA-C_Check/target/sample.c:213] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  75. [d:/Workspace/MISRA-C_Check/target/sample.c:233] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  76. [d:/Workspace/MISRA-C_Check/target/sample.c:274] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  77. [d:/Workspace/MISRA-C_Check/target/sample.c:276] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  78. [d:/Workspace/MISRA-C_Check/target/sample.c:281] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  79. [d:/Workspace/MISRA-C_Check/target/sample.c:283] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  80. [d:/Workspace/MISRA-C_Check/target/sample.c:288] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  81. [d:/Workspace/MISRA-C_Check/target/sample.c:290] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  82. [d:/Workspace/MISRA-C_Check/target/sample.c:295] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  83. [d:/Workspace/MISRA-C_Check/target/sample.c:297] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  84. [d:/Workspace/MISRA-C_Check/target/sample.c:342] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  85. [d:/Workspace/MISRA-C_Check/target/sample.c:348] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.1]
  86. [d:/Workspace/MISRA-C_Check/target/sample.c:71] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.7]
  87. [d:/Workspace/MISRA-C_Check/target/sample.c:177] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-17.7]
  88. [d:/Workspace/MISRA-C_Check/target/sample.c:43] (style) JP:ここにMISRA-C 2012の文を載せてください (Required) [misra-c2012-21.6]
  89. MISRA rules violations found:
  90. Required: 77
  91. Advisory: 3
  92. MISRA rules violated:
  93. misra-c2012-4.1 (-): 8
  94. misra-c2012-5.3 (-): 4
  95. misra-c2012-10.4 (-): 20
  96. misra-c2012-11.4 (-): 1
  97. misra-c2012-11.8 (-): 2
  98. misra-c2012-14.4 (-): 6
  99. misra-c2012-15.5 (-): 2
  100. misra-c2012-17.1 (-): 32
  101. misra-c2012-17.7 (-): 3
  102. misra-c2012-21.6 (-): 2
  103. d:\Workspace\MISRA-C_Check>del d:\Workspace\MISRA-C_Check\target\sample.c.dump
  104. ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

肝心のルール本文

ルールテキストの配布は使用許諾が必要っぽいのでここでは配布しません。

おとなしく€15はらって公式からPDFを買いましょう

購入したらmisra2012-rule.txtを書き換えてください。

LICENSE

  • GPL v3

using Libraries