adlint 2.6.14 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (401) hide show
  1. data/AUTHORS +1 -3
  2. data/ChangeLog +511 -0
  3. data/INSTALL +1 -1
  4. data/MANIFEST +57 -37
  5. data/NEWS +36 -7
  6. data/README +2 -2
  7. data/Rakefile +6 -6
  8. data/TODO +1 -1
  9. data/bin/adlint +25 -16
  10. data/bin/adlint_chk +22 -12
  11. data/bin/adlint_cma +17 -12
  12. data/bin/adlint_sma +22 -12
  13. data/bin/adlintize +98 -17
  14. data/etc/conf.d/fallback/cinit.erb +1 -1
  15. data/etc/conf.d/fallback/traits.erb +37 -37
  16. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
  17. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +41 -41
  18. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
  19. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +40 -40
  20. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
  21. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +40 -40
  22. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
  23. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +40 -40
  24. data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
  25. data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
  26. data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
  27. data/etc/conf.d/noarch/pinit.erb +1 -1
  28. data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
  29. data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +42 -42
  30. data/etc/mesg.d/c_builtin/en_US/messages.yml +33 -33
  31. data/etc/mesg.d/c_builtin/ja_JP/messages.yml +5 -5
  32. data/etc/mesg.d/core/en_US/messages.yml +2 -2
  33. data/etc/mesg.d/core/ja_JP/messages.yml +2 -2
  34. data/features/code_check/W0018.feature +197 -0
  35. data/features/code_check/W0019.feature +79 -0
  36. data/features/code_check/W0021.feature +81 -0
  37. data/features/code_check/W0023.feature +203 -0
  38. data/features/code_check/W0024.feature +226 -0
  39. data/features/code_check/W0025.feature +5 -0
  40. data/features/code_check/W0088.feature +2 -2
  41. data/features/code_check/W0109.feature +2 -2
  42. data/features/code_check/W0477.feature +0 -3
  43. data/features/code_check/W0478.feature +0 -1
  44. data/features/code_check/W0582.feature +3 -3
  45. data/features/code_check/W0583.feature +4 -7
  46. data/features/code_check/W0646.feature +0 -1
  47. data/features/code_check/W0695.feature +0 -1
  48. data/features/code_check/W0705.feature +8 -0
  49. data/features/code_check/W0723.feature +0 -1
  50. data/features/code_check/W0745.feature +1 -0
  51. data/features/code_check/W0781.feature +1 -0
  52. data/features/code_check/W1057.feature +141 -0
  53. data/features/code_check/W1058.feature +93 -0
  54. data/features/code_check/W1059.feature +86 -0
  55. data/features/code_check/W1060.feature +77 -0
  56. data/features/code_check/W1061.feature +143 -0
  57. data/features/code_check/W1062.feature +162 -0
  58. data/features/code_check/W1063.feature +123 -0
  59. data/features/code_check/W1064.feature +83 -0
  60. data/features/code_check/W1065.feature +82 -0
  61. data/features/code_check/W9003.feature +2 -0
  62. data/features/step_definitions/code_check_steps.rb +1 -0
  63. data/features/support/env.rb +16 -13
  64. data/lib/adlint.rb +7 -4
  65. data/lib/adlint/analyzer.rb +131 -157
  66. data/lib/adlint/annot.rb +149 -0
  67. data/lib/adlint/cc1.rb +57 -0
  68. data/lib/adlint/{c → cc1}/branch.rb +74 -62
  69. data/lib/adlint/{c → cc1}/builtin.rb +21 -21
  70. data/lib/adlint/{c → cc1}/const.rb +119 -117
  71. data/lib/adlint/{c → cc1}/conv.rb +76 -78
  72. data/lib/adlint/{c → cc1}/ctrlexpr.rb +69 -86
  73. data/lib/adlint/cc1/domain.rb +8103 -0
  74. data/lib/adlint/{c → cc1}/enum.rb +3 -3
  75. data/lib/adlint/{c → cc1}/environ.rb +21 -21
  76. data/lib/adlint/{c → cc1}/expr.rb +232 -218
  77. data/lib/adlint/{c → cc1}/format.rb +305 -342
  78. data/lib/adlint/{c → cc1}/interp.rb +269 -220
  79. data/lib/adlint/cc1/lexer.rb +246 -0
  80. data/lib/adlint/{c → cc1}/mediator.rb +78 -84
  81. data/lib/adlint/{c → cc1}/object.rb +261 -264
  82. data/lib/adlint/{c → cc1}/operator.rb +7 -7
  83. data/lib/adlint/{c → cc1}/option.rb +4 -3
  84. data/lib/adlint/{c → cc1}/parser.rb +274 -506
  85. data/lib/adlint/{c → cc1}/parser.y +69 -301
  86. data/lib/adlint/cc1/phase.rb +138 -0
  87. data/lib/adlint/{c → cc1}/resolver.rb +66 -78
  88. data/lib/adlint/{c → cc1}/scanner.rb +57 -49
  89. data/lib/adlint/{c → cc1}/scope.rb +3 -3
  90. data/lib/adlint/{c → cc1}/seqp.rb +13 -5
  91. data/lib/adlint/{c → cc1}/syntax.rb +819 -1122
  92. data/lib/adlint/{c → cc1}/type.rb +1498 -1479
  93. data/lib/adlint/{c → cc1}/util.rb +20 -12
  94. data/lib/adlint/{c → cc1}/value.rb +699 -642
  95. data/lib/adlint/code.rb +163 -164
  96. data/lib/adlint/cpp.rb +2 -2
  97. data/lib/adlint/cpp/asm.rb +13 -14
  98. data/lib/adlint/cpp/constexpr.rb +42 -38
  99. data/lib/adlint/cpp/constexpr.y +44 -40
  100. data/lib/adlint/cpp/eval.rb +435 -435
  101. data/lib/adlint/cpp/lexer.rb +343 -340
  102. data/lib/adlint/cpp/macro.rb +188 -190
  103. data/lib/adlint/cpp/phase.rb +66 -45
  104. data/lib/adlint/cpp/scanner.rb +14 -17
  105. data/lib/adlint/cpp/source.rb +49 -55
  106. data/lib/adlint/cpp/subst.rb +65 -65
  107. data/lib/adlint/cpp/syntax.rb +155 -275
  108. data/lib/adlint/cpp/util.rb +22 -19
  109. data/lib/adlint/driver.rb +86 -93
  110. data/lib/adlint/error.rb +33 -52
  111. data/lib/adlint/exam.rb +158 -24
  112. data/lib/adlint/exam/c_builtin.rb +7 -7
  113. data/lib/adlint/exam/c_builtin/cc1_check.rb +20522 -0
  114. data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +957 -0
  115. data/lib/adlint/exam/c_builtin/cc1_code.rb +459 -0
  116. data/lib/adlint/exam/c_builtin/cc1_metric.rb +794 -0
  117. data/lib/adlint/exam/c_builtin/cpp_check.rb +486 -441
  118. data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +36 -39
  119. data/lib/adlint/exam/c_builtin/cpp_code.rb +63 -65
  120. data/lib/adlint/exam/c_builtin/ld_check.rb +136 -129
  121. data/lib/adlint/exam/c_builtin/ld_metric.rb +11 -11
  122. data/lib/adlint/lang.rb +25 -25
  123. data/lib/adlint/ld.rb +2 -2
  124. data/lib/adlint/ld/object.rb +220 -188
  125. data/lib/adlint/ld/phase.rb +94 -63
  126. data/lib/adlint/ld/typedef.rb +22 -11
  127. data/lib/adlint/ld/util.rb +43 -35
  128. data/lib/adlint/lexer.rb +59 -56
  129. data/lib/adlint/location.rb +140 -0
  130. data/lib/adlint/memo.rb +157 -0
  131. data/lib/adlint/message.rb +207 -156
  132. data/lib/adlint/metric.rb +139 -217
  133. data/lib/adlint/monitor.rb +45 -43
  134. data/lib/adlint/phase.rb +56 -29
  135. data/lib/adlint/prelude.rb +66 -54
  136. data/lib/adlint/report.rb +253 -332
  137. data/lib/adlint/source.rb +26 -27
  138. data/lib/adlint/supp.rb +131 -0
  139. data/lib/adlint/symbol.rb +14 -16
  140. data/lib/adlint/token.rb +19 -91
  141. data/lib/adlint/traits.rb +242 -226
  142. data/lib/adlint/util.rb +116 -205
  143. data/lib/adlint/version.rb +8 -8
  144. data/share/HEADER +2 -2
  145. data/share/doc/developers_guide_ja.html +148 -19
  146. data/share/doc/developers_guide_ja.texi +141 -11
  147. data/share/doc/samples/GNUmakefile +1 -1
  148. data/share/doc/samples/adlint_traits.yml +45 -36
  149. data/share/doc/users_guide_en.html +1321 -1252
  150. data/share/doc/users_guide_en.texi +475 -408
  151. data/share/doc/users_guide_ja.html +1932 -1878
  152. data/share/doc/users_guide_ja.texi +324 -273
  153. data/share/sample/bison-2.5/adlint/GNUmakefile +5 -1
  154. data/share/sample/bison-2.5/adlint/adlint_traits.yml +38 -38
  155. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
  156. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
  157. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
  158. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +50 -42
  159. data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
  160. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
  161. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
  162. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +50 -42
  163. data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
  164. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
  165. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
  166. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +50 -42
  167. data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
  168. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
  169. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
  170. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +50 -42
  171. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
  172. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +46 -38
  173. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
  174. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
  175. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
  176. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +50 -42
  177. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
  178. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
  179. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
  180. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +50 -42
  181. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
  182. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
  183. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
  184. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +50 -42
  185. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
  186. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
  187. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
  188. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +50 -42
  189. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
  190. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
  191. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
  192. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +50 -42
  193. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
  194. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
  195. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
  196. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +50 -42
  197. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
  198. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
  199. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
  200. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +50 -42
  201. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
  202. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
  203. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
  204. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +50 -42
  205. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
  206. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
  207. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
  208. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +50 -42
  209. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
  210. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
  211. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
  212. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +50 -42
  213. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
  214. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
  215. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
  216. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +50 -42
  217. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
  218. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
  219. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
  220. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +50 -42
  221. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
  222. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
  223. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
  224. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +50 -42
  225. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
  226. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
  227. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
  228. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +50 -42
  229. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
  230. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
  231. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
  232. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +50 -42
  233. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
  234. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
  235. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
  236. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +50 -42
  237. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
  238. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
  239. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
  240. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +50 -42
  241. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
  242. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
  243. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
  244. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +50 -42
  245. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
  246. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
  247. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
  248. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +50 -42
  249. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
  250. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
  251. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
  252. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +50 -42
  253. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
  254. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
  255. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
  256. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +50 -42
  257. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
  258. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
  259. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
  260. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +50 -42
  261. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
  262. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
  263. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
  264. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +50 -42
  265. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +50 -42
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +50 -42
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +50 -42
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +50 -42
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +50 -42
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +50 -42
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +50 -42
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +50 -42
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +50 -42
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +50 -42
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +50 -42
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +50 -42
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +50 -42
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +50 -42
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +50 -42
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +50 -42
  329. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
  330. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
  331. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
  332. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +50 -42
  333. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
  334. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
  335. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
  336. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +50 -42
  337. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
  338. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
  339. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
  340. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +50 -42
  341. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
  342. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
  343. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
  344. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +50 -42
  345. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
  346. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
  347. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
  348. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +50 -42
  349. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
  350. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
  351. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
  352. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +50 -42
  353. data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
  354. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
  355. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
  356. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +50 -42
  357. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
  358. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
  359. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
  360. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +50 -42
  361. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
  362. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
  363. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
  364. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +49 -41
  365. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
  366. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +46 -38
  367. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
  368. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
  369. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
  370. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +50 -42
  371. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
  372. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
  373. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
  374. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +50 -42
  375. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
  376. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
  377. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
  378. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +50 -42
  379. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
  380. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
  381. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
  382. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +50 -42
  383. data/spec/adlint/{c → cc1}/ctrlexpr_spec.rb +51 -49
  384. data/spec/adlint/{c → cc1}/domain_spec.rb +210 -179
  385. data/spec/adlint/{c → cc1}/operator_spec.rb +3 -3
  386. data/spec/adlint/{c → cc1}/syntax_spec.rb +10 -12
  387. data/spec/adlint/{c → cc1}/type_spec.rb +61 -68
  388. data/{lib/adlint/c.rb → spec/adlint/location_spec.rb} +24 -29
  389. data/spec/conf.d/default_traits.yml +38 -37
  390. data/spec/conf.d/empty_cinit.h +1 -1
  391. data/spec/conf.d/empty_pinit.h +1 -1
  392. data/spec/conf.d/project/foo.c +0 -0
  393. data/spec/spec_helper.rb +2 -2
  394. metadata +60 -40
  395. data/lib/adlint/c/domain.rb +0 -7931
  396. data/lib/adlint/c/lexer.rb +0 -252
  397. data/lib/adlint/c/phase.rb +0 -135
  398. data/lib/adlint/exam/c_builtin/c_check.rb +0 -20745
  399. data/lib/adlint/exam/c_builtin/c_check_shima.rb +0 -983
  400. data/lib/adlint/exam/c_builtin/c_code.rb +0 -477
  401. data/lib/adlint/exam/c_builtin/c_metric.rb +0 -818
data/lib/adlint/metric.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Code quality metrics.
2
2
  #
3
3
  # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
- # Copyright:: Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
4
+ # Copyright:: Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
5
5
  # License:: GPLv3+: GNU General Public License version 3 or later
6
6
  #
7
7
  # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
@@ -11,7 +11,7 @@
11
11
  # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
12
  # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
13
  # / __ |/ /_/ / /___/ / /| / / /
14
- # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2013, OGIS-RI Co.,Ltd.
15
15
  #
16
16
  # This file is part of AdLint.
17
17
  #
@@ -29,13 +29,11 @@
29
29
  #
30
30
  #++
31
31
 
32
- require "adlint/util"
33
-
34
32
  module AdLint #:nodoc:
35
33
 
36
34
  class CodeMetric
37
- def to_a
38
- subclass_responsibility
35
+ def print_as_csv(io)
36
+ io.puts(to_csv)
39
37
  end
40
38
 
41
39
  def to_s
@@ -43,273 +41,185 @@ module AdLint #:nodoc:
43
41
  to_a.map { |obj| obj.to_s.to_default_external }.join(delim)
44
42
  end
45
43
 
44
+ private
45
+ def to_a
46
+ subclass_responsibility
47
+ end
48
+
46
49
  def to_csv
47
50
  to_a.map { |obj| obj ? obj.to_s.to_default_external : nil }.to_csv
48
51
  end
49
52
  end
50
53
 
51
- class FL_STMT_Metric < CodeMetric
52
- def initialize(fpath, statement_count)
54
+ class FileMetric < CodeMetric
55
+ def initialize(name, fpath, val)
56
+ @name = name
53
57
  @fpath = fpath
54
- @statement_count = statement_count
58
+ @val = val
55
59
  end
56
60
 
61
+ private
57
62
  def to_a
58
- ["MET", "FL_STMT", @fpath, @statement_count]
63
+ ["MET", @name, @fpath, @val]
59
64
  end
60
65
  end
61
66
 
62
- class FL_FUNC_Metric < CodeMetric
63
- def initialize(fpath, function_count)
64
- @fpath = fpath
65
- @function_count = function_count
66
- end
67
-
68
- def to_a
69
- ["MET", "FL_FUNC", @fpath, @function_count]
67
+ class FL_STMT_Metric < FileMetric
68
+ def initialize(fpath, stmt_cnt)
69
+ super("FL_STMT", fpath, stmt_cnt)
70
70
  end
71
71
  end
72
72
 
73
- class FN_STMT_Metric < CodeMetric
74
- def initialize(function_identifier, location, statement_count)
75
- @function_identifier = function_identifier
76
- @location = location
77
- @statement_count = statement_count
78
- end
79
-
80
- def to_a
81
- ["MET", "FN_STMT",
82
- @function_identifier.name, @function_identifier.signature,
83
- @location.fpath, @location.line_no, @location.column_no,
84
- @statement_count]
73
+ class FL_FUNC_Metric < FileMetric
74
+ def initialize(fpath, fun_cnt)
75
+ super("FL_FUNC", fpath, fun_cnt)
85
76
  end
86
77
  end
87
78
 
88
- class FN_UNRC_Metric < CodeMetric
89
- def initialize(function_identifier, location, unreached_statement_count)
90
- @function_identifier = function_identifier
91
- @location = location
92
- @unreached_statement_count = unreached_statement_count
79
+ class FunctionMetric < CodeMetric
80
+ def initialize(name, fun_id, loc, val)
81
+ @name = name
82
+ @fun_id = fun_id
83
+ @loc = loc
84
+ @val = val
93
85
  end
94
86
 
87
+ private
95
88
  def to_a
96
- ["MET", "FN_UNRC",
97
- @function_identifier.name, @function_identifier.signature,
98
- @location.fpath, @location.line_no, @location.column_no,
99
- @unreached_statement_count]
89
+ ["MET", @name, *@fun_id.to_a, *@loc.to_a, @val]
100
90
  end
101
91
  end
102
92
 
103
- class FN_LINE_Metric < CodeMetric
104
- def initialize(function_identifier, location, total_lines)
105
- @function_identifier = function_identifier
106
- @location = location
107
- @total_lines = total_lines
108
- end
109
-
110
- def to_a
111
- ["MET", "FN_LINE",
112
- @function_identifier.name, @function_identifier.signature,
113
- @location.fpath, @location.line_no, @location.column_no,
114
- @total_lines]
93
+ class FN_STMT_Metric < FunctionMetric
94
+ def initialize(fun_id, loc, stmt_cnt)
95
+ super("FN_STMT", fun_id, loc, stmt_cnt)
115
96
  end
116
97
  end
117
98
 
118
- class FN_PARA_Metric < CodeMetric
119
- def initialize(function_identifier, location, parameter_count)
120
- @function_identifier = function_identifier
121
- @location = location
122
- @parameter_count = parameter_count
123
- end
124
-
125
- def to_a
126
- ["MET", "FN_PARA",
127
- @function_identifier.name, @function_identifier.signature,
128
- @location.fpath, @location.line_no, @location.column_no,
129
- @parameter_count]
99
+ class FN_UNRC_Metric < FunctionMetric
100
+ def initialize(fun_id, loc, unreached_stmt_cnt)
101
+ super("FN_UNRC", fun_id, loc, unreached_stmt_cnt)
130
102
  end
131
103
  end
132
104
 
133
- class FN_UNUV_Metric < CodeMetric
134
- def initialize(function_identifier, location, useless_variable_count)
135
- @function_identifier = function_identifier
136
- @location = location
137
- @useless_variable_count = useless_variable_count
138
- end
139
-
140
- def to_a
141
- ["MET", "FN_UNUV",
142
- @function_identifier.name, @function_identifier.signature,
143
- @location.fpath, @location.line_no, @location.column_no,
144
- @useless_variable_count]
105
+ class FN_LINE_Metric < FunctionMetric
106
+ def initialize(fun_id, loc, fun_lines)
107
+ super("FN_LINE", fun_id, loc, fun_lines)
145
108
  end
146
109
  end
147
110
 
148
- class FN_CSUB_Metric < CodeMetric
149
- def initialize(function_identifier, location, function_call_count)
150
- @function_identifier = function_identifier
151
- @location = location
152
- @function_call_count = function_call_count
153
- end
154
-
155
- def to_a
156
- ["MET", "FN_CSUB",
157
- @function_identifier.name, @function_identifier.signature,
158
- @location.fpath, @location.line_no, @location.column_no,
159
- @function_call_count]
111
+ class FN_PARA_Metric < FunctionMetric
112
+ def initialize(fun_id, loc, param_cnt)
113
+ super("FN_PARA", fun_id, loc, param_cnt)
160
114
  end
161
115
  end
162
116
 
163
- class FN_GOTO_Metric < CodeMetric
164
- def initialize(function_identifier, location, goto_count)
165
- @function_identifier = function_identifier
166
- @location = location
167
- @goto_count = goto_count
168
- end
169
-
170
- def to_a
171
- ["MET", "FN_GOTO",
172
- @function_identifier.name, @function_identifier.signature,
173
- @location.fpath, @location.line_no, @location.column_no,
174
- @goto_count]
117
+ class FN_UNUV_Metric < FunctionMetric
118
+ def initialize(fun_id, loc, useless_var_cnt)
119
+ super("FN_UNUV", fun_id, loc, useless_var_cnt)
175
120
  end
176
121
  end
177
122
 
178
- class FN_RETN_Metric < CodeMetric
179
- def initialize(function_identifier, location, return_count)
180
- @function_identifier = function_identifier
181
- @location = location
182
- @return_count = return_count
183
- end
184
-
185
- def to_a
186
- ["MET", "FN_RETN",
187
- @function_identifier.name, @function_identifier.signature,
188
- @location.fpath, @location.line_no, @location.column_no,
189
- @return_count]
123
+ class FN_CSUB_Metric < FunctionMetric
124
+ def initialize(fun_id, loc, funcall_cnt)
125
+ super("FN_CSUB", fun_id, loc, funcall_cnt)
190
126
  end
191
127
  end
192
128
 
193
- class FN_UELS_Metric < CodeMetric
194
- def initialize(function_identifier, location, if_statement_count)
195
- @function_identifier = function_identifier
196
- @location = location
197
- @if_statement_count = if_statement_count
198
- end
199
-
200
- def to_a
201
- ["MET", "FN_UELS",
202
- @function_identifier.name, @function_identifier.signature,
203
- @location.fpath, @location.line_no, @location.column_no,
204
- @if_statement_count]
129
+ class FN_GOTO_Metric < FunctionMetric
130
+ def initialize(fun_id, loc, goto_cnt)
131
+ super("FN_GOTO", fun_id, loc, goto_cnt)
205
132
  end
206
133
  end
207
134
 
208
- class FN_NEST_Metric < CodeMetric
209
- def initialize(function_identifier, location, max_nest_level)
210
- @function_identifier = function_identifier
211
- @location = location
212
- @max_nest_level = max_nest_level
213
- end
214
-
215
- def to_a
216
- ["MET", "FN_NEST",
217
- @function_identifier.name, @function_identifier.signature,
218
- @location.fpath, @location.line_no, @location.column_no,
219
- @max_nest_level]
135
+ class FN_RETN_Metric < FunctionMetric
136
+ def initialize(fun_id, loc, retn_cnt)
137
+ super("FN_RETN", fun_id, loc, retn_cnt)
220
138
  end
221
139
  end
222
140
 
223
- class FN_PATH_Metric < CodeMetric
224
- def initialize(function_identifier, location, path_count)
225
- @function_identifier = function_identifier
226
- @location = location
227
- @path_count = path_count
228
- end
229
-
230
- def to_a
231
- ["MET", "FN_PATH",
232
- @function_identifier.name, @function_identifier.signature,
233
- @location.fpath, @location.line_no, @location.column_no,
234
- @path_count]
141
+ class FN_UELS_Metric < FunctionMetric
142
+ def initialize(fun_id, loc, if_stmt_cnt)
143
+ super("FN_UELS", fun_id, loc, if_stmt_cnt)
235
144
  end
236
145
  end
237
146
 
238
- class FN_CYCM_Metric < CodeMetric
239
- def initialize(function_identifier, location, cyclomatic_complexity)
240
- @function_identifier = function_identifier
241
- @location = location
242
- @cyclomatic_complexity = cyclomatic_complexity
147
+ class FN_NEST_Metric < FunctionMetric
148
+ def initialize(fun_id, loc, max_nest)
149
+ super("FN_NEST", fun_id, loc, max_nest)
243
150
  end
151
+ end
244
152
 
245
- def to_a
246
- ["MET", "FN_CYCM",
247
- @function_identifier.name, @function_identifier.signature,
248
- @location.fpath, @location.line_no, @location.column_no,
249
- @cyclomatic_complexity]
153
+ class FN_PATH_Metric < FunctionMetric
154
+ def initialize(fun_id, loc, path_cnt)
155
+ super("FN_PATH", fun_id, loc, path_cnt)
250
156
  end
251
157
  end
252
158
 
253
- class FN_CALL_Metric < CodeMetric
254
- def initialize(function_identifier, location, caller_count)
255
- @function_identifier = function_identifier
256
- @location = location
257
- @caller_count = caller_count
159
+ class FN_CYCM_Metric < FunctionMetric
160
+ def initialize(fun_id, loc, cycl_compl)
161
+ super("FN_CYCM", fun_id, loc, cycl_compl)
258
162
  end
163
+ end
259
164
 
260
- def to_a
261
- ["MET", "FN_CALL",
262
- @function_identifier.name, @function_identifier.signature,
263
- @location.fpath, @location.line_no, @location.column_no,
264
- @caller_count]
165
+ class FN_CALL_Metric < FunctionMetric
166
+ def initialize(fun_id, loc, caller_cnt)
167
+ super("FN_CALL", fun_id, loc, caller_cnt)
265
168
  end
266
169
  end
267
170
 
268
171
  class MetricRecord < CsvRecord
269
- def self.of(csv_row)
172
+ def self.of(csv_row, sma_wd)
270
173
  case csv_row[0]
271
174
  when "VER"
272
175
  create_version_record(csv_row)
273
176
  when "DCL"
274
- create_declaration_record(csv_row)
177
+ create_declaration_record(csv_row, sma_wd)
275
178
  when "DEF"
276
- create_definition_record(csv_row)
179
+ create_definition_record(csv_row, sma_wd)
277
180
  when "INI"
278
- create_initialization_record(csv_row)
181
+ create_initialization_record(csv_row, sma_wd)
279
182
  when "ASN"
280
- create_assignment_record(csv_row)
183
+ create_assignment_record(csv_row, sma_wd)
281
184
  when "DEP"
282
- create_dependency_record(csv_row)
185
+ create_dependency_record(csv_row, sma_wd)
283
186
  when "LIT"
284
- create_literal_record(csv_row)
187
+ create_literal_record(csv_row, sma_wd)
285
188
  when "PRE"
286
- create_pp_directive_record(csv_row)
189
+ create_pp_directive_record(csv_row, sma_wd)
287
190
  when "MET"
288
- create_metric_record(csv_row)
191
+ create_metric_record(csv_row, sma_wd)
289
192
  else
290
193
  raise "invalid metric record."
291
194
  end
292
195
  end
293
196
 
197
+ def initialize(csv_row, sma_wd)
198
+ super(csv_row)
199
+ @sma_wd = sma_wd
200
+ end
201
+
294
202
  def type
295
203
  field_at(0)
296
204
  end
297
205
 
298
206
  def fpath
299
- Pathname.new(field_at(1))
207
+ sma_abs_fpath = Pathname.new(field_at(1)).expand_path(@sma_wd)
208
+ sma_abs_fpath.relative_path_from(Pathname.pwd)
300
209
  end
301
210
 
302
211
  def line_no
303
- field_at(2)
212
+ field_at(2).to_i
304
213
  end
305
214
 
306
215
  def column_no
307
- field_at(3)
216
+ field_at(3).to_i
308
217
  end
309
218
 
310
219
  def location
311
220
  Location.new(fpath, line_no, column_no)
312
221
  end
222
+ memoize :location
313
223
 
314
224
  def version?; false end
315
225
 
@@ -354,69 +264,69 @@ module AdLint #:nodoc:
354
264
  end
355
265
  private_class_method :create_version_record
356
266
 
357
- def self.create_declaration_record(csv_row)
267
+ def self.create_declaration_record(csv_row, sma_wd)
358
268
  case csv_row[4]
359
269
  when "T"
360
270
  case csv_row[5]
361
271
  when "T"
362
- TypedefDeclarationRecord.new(csv_row)
272
+ TypedefDeclarationRecord.new(csv_row, sma_wd)
363
273
  when "S"
364
- StructDeclarationRecord.new(csv_row)
274
+ StructDeclarationRecord.new(csv_row, sma_wd)
365
275
  when "U"
366
- UnionDeclarationRecord.new(csv_row)
276
+ UnionDeclarationRecord.new(csv_row, sma_wd)
367
277
  when "E"
368
- EnumDeclarationRecord.new(csv_row)
278
+ EnumDeclarationRecord.new(csv_row, sma_wd)
369
279
  else
370
280
  raise "invalid DCL record."
371
281
  end
372
282
  when "V"
373
- GlobalVariableDeclarationRecord.new(csv_row)
283
+ GlobalVariableDeclarationRecord.new(csv_row, sma_wd)
374
284
  when "F"
375
- FunctionDeclarationRecord.new(csv_row)
285
+ FunctionDeclarationRecord.new(csv_row, sma_wd)
376
286
  else
377
287
  raise "invalid DCL record."
378
288
  end
379
289
  end
380
290
  private_class_method :create_declaration_record
381
291
 
382
- def self.create_definition_record(csv_row)
292
+ def self.create_definition_record(csv_row, sma_wd)
383
293
  case csv_row[4]
384
294
  when "V"
385
- VariableDefinitionRecord.new(csv_row)
295
+ VariableDefinitionRecord.new(csv_row, sma_wd)
386
296
  when "F"
387
- FunctionDefinitionRecord.new(csv_row)
297
+ FunctionDefinitionRecord.new(csv_row, sma_wd)
388
298
  when "M"
389
- MacroDefinitionRecord.new(csv_row)
299
+ MacroDefinitionRecord.new(csv_row, sma_wd)
390
300
  when "L"
391
- LabelDefinitionRecord.new(csv_row)
301
+ LabelDefinitionRecord.new(csv_row, sma_wd)
392
302
  else
393
303
  raise "invalid DEF record."
394
304
  end
395
305
  end
396
306
  private_class_method :create_definition_record
397
307
 
398
- def self.create_initialization_record(csv_row)
399
- InitializationRecord.new(csv_row)
308
+ def self.create_initialization_record(csv_row, sma_wd)
309
+ InitializationRecord.new(csv_row, sma_wd)
400
310
  end
401
311
  private_class_method :create_initialization_record
402
312
 
403
- def self.create_assignment_record(csv_row)
404
- AssignmentRecord.new(csv_row)
313
+ def self.create_assignment_record(csv_row, sma_wd)
314
+ AssignmentRecord.new(csv_row, sma_wd)
405
315
  end
406
316
  private_class_method :create_assignment_record
407
317
 
408
- def self.create_dependency_record(csv_row)
318
+ def self.create_dependency_record(csv_row, sma_wd)
409
319
  case csv_row[4]
410
320
  when "I"
411
- IncludeRecord.new(csv_row)
321
+ IncludeRecord.new(csv_row, sma_wd)
412
322
  when "C"
413
- FunctionCallRecord.new(csv_row)
323
+ FunctionCallRecord.new(csv_row, sma_wd)
414
324
  when "X"
415
325
  case csv_row[5]
416
326
  when "V"
417
- VariableXRefRecord.new(csv_row)
327
+ VariableXRefRecord.new(csv_row, sma_wd)
418
328
  when "F"
419
- FunctionXRefRecord.new(csv_row)
329
+ FunctionXRefRecord.new(csv_row, sma_wd)
420
330
  else
421
331
  raise "invalid DEP record."
422
332
  end
@@ -426,22 +336,26 @@ module AdLint #:nodoc:
426
336
  end
427
337
  private_class_method :create_dependency_record
428
338
 
429
- def self.create_literal_record(csv_row)
430
- LiteralRecord.new(csv_row)
339
+ def self.create_literal_record(csv_row, sma_wd)
340
+ LiteralRecord.new(csv_row, sma_wd)
431
341
  end
432
342
  private_class_method :create_literal_record
433
343
 
434
- def self.create_pp_directive_record(csv_row)
435
- PPDirectiveRecord.new(csv_row)
344
+ def self.create_pp_directive_record(csv_row, sma_wd)
345
+ PPDirectiveRecord.new(csv_row, sma_wd)
436
346
  end
437
347
  private_class_method :create_pp_directive_record
438
348
 
439
- def self.create_metric_record(csv_row)
440
- MetricRecord.new(csv_row)
349
+ def self.create_metric_record(csv_row, sma_wd)
350
+ new(csv_row, sma_wd)
441
351
  end
442
352
  private_class_method :create_metric_record
443
353
 
444
354
  class VersionRecord < MetricRecord
355
+ def initialize(csv_row)
356
+ super(csv_row, nil)
357
+ end
358
+
445
359
  def version?
446
360
  true
447
361
  end
@@ -453,6 +367,10 @@ module AdLint #:nodoc:
453
367
  def exec_timestamp
454
368
  field_at(2)
455
369
  end
370
+
371
+ def exec_working_directory
372
+ field_at(3)
373
+ end
456
374
  end
457
375
  private_constant :VersionRecord
458
376
 
@@ -560,8 +478,12 @@ module AdLint #:nodoc:
560
478
  field_at(6)
561
479
  end
562
480
 
563
- def function_identifier
564
- FunctionIdentifier.new(field_at(7), field_at(8))
481
+ def function_declaration_type
482
+ field_at(7)
483
+ end
484
+
485
+ def function_id
486
+ FunctionId.new(field_at(8), field_at(9))
565
487
  end
566
488
  end
567
489
  private_constant :FunctionDeclarationRecord
@@ -571,11 +493,11 @@ module AdLint #:nodoc:
571
493
  true
572
494
  end
573
495
 
574
- def var_linkage_type
496
+ def variable_linkage_type
575
497
  field_at(5)
576
498
  end
577
499
 
578
- def var_scope_type
500
+ def variable_scope_type
579
501
  field_at(6)
580
502
  end
581
503
 
@@ -606,8 +528,8 @@ module AdLint #:nodoc:
606
528
  field_at(6)
607
529
  end
608
530
 
609
- def function_identifier
610
- FunctionIdentifier.new(field_at(7), field_at(8))
531
+ def function_id
532
+ FunctionId.new(field_at(7), field_at(8))
611
533
  end
612
534
 
613
535
  def lines
@@ -689,11 +611,11 @@ module AdLint #:nodoc:
689
611
  end
690
612
 
691
613
  def caller_function
692
- FunctionIdentifier.new(field_at(5), field_at(6))
614
+ FunctionId.new(field_at(5), field_at(6))
693
615
  end
694
616
 
695
617
  def callee_function
696
- FunctionIdentifier.new(field_at(7), field_at(8))
618
+ FunctionId.new(field_at(7), field_at(8))
697
619
  end
698
620
  end
699
621
  private_constant :FunctionCallRecord
@@ -704,7 +626,7 @@ module AdLint #:nodoc:
704
626
  end
705
627
 
706
628
  def accessor_function
707
- FunctionIdentifier.new(field_at(6), field_at(7))
629
+ FunctionId.new(field_at(6), field_at(7))
708
630
  end
709
631
 
710
632
  def access_type
@@ -723,7 +645,7 @@ module AdLint #:nodoc:
723
645
  end
724
646
 
725
647
  def accessor_function
726
- FunctionIdentifier.new(field_at(6), field_at(7))
648
+ FunctionId.new(field_at(6), field_at(7))
727
649
  end
728
650
 
729
651
  def access_type
@@ -731,7 +653,7 @@ module AdLint #:nodoc:
731
653
  end
732
654
 
733
655
  def accessee_function
734
- FunctionIdentifier.new(field_at(9), field_at(10))
656
+ FunctionId.new(field_at(9), field_at(10))
735
657
  end
736
658
  end
737
659
  private_constant :FunctionXRefRecord