adlint 2.6.14 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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