adlint 1.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 (465) hide show
  1. data/AUTHORS +27 -0
  2. data/COPYING +674 -0
  3. data/ChangeLog +820 -0
  4. data/INSTALL +78 -0
  5. data/MANIFEST +464 -0
  6. data/NEWS +38 -0
  7. data/README +74 -0
  8. data/Rakefile +167 -0
  9. data/TODO +29 -0
  10. data/bin/adlint +141 -0
  11. data/bin/adlint_chk +129 -0
  12. data/bin/adlint_cma +122 -0
  13. data/bin/adlint_sma +129 -0
  14. data/bin/adlintize +286 -0
  15. data/etc/conf.d/fallback/cinit.erb +11 -0
  16. data/etc/conf.d/fallback/traits.erb +216 -0
  17. data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +149 -0
  18. data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +227 -0
  19. data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +224 -0
  20. data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +226 -0
  21. data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +219 -0
  22. data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +224 -0
  23. data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +234 -0
  24. data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +226 -0
  25. data/etc/conf.d/noarch/GNUmakefile.erb +119 -0
  26. data/etc/conf.d/noarch/adlint_all_bat.erb +9 -0
  27. data/etc/conf.d/noarch/adlint_all_sh.erb +10 -0
  28. data/etc/conf.d/noarch/pinit.erb +11 -0
  29. data/etc/mesg.d/en_US/messages.yml +784 -0
  30. data/etc/mesg.d/ja_JP/messages.yml +784 -0
  31. data/lib/adlint/analyzer.rb +294 -0
  32. data/lib/adlint/c/branch.rb +251 -0
  33. data/lib/adlint/c/builtin.rb +92 -0
  34. data/lib/adlint/c/code.rb +490 -0
  35. data/lib/adlint/c/const.rb +465 -0
  36. data/lib/adlint/c/conv.rb +212 -0
  37. data/lib/adlint/c/ctrlexpr.rb +949 -0
  38. data/lib/adlint/c/domain.rb +7499 -0
  39. data/lib/adlint/c/environ.rb +133 -0
  40. data/lib/adlint/c/expr.rb +1725 -0
  41. data/lib/adlint/c/format.rb +3209 -0
  42. data/lib/adlint/c/interp.rb +1740 -0
  43. data/lib/adlint/c/lexer.rb +241 -0
  44. data/lib/adlint/c/mediator.rb +313 -0
  45. data/lib/adlint/c/message.rb +13597 -0
  46. data/lib/adlint/c/metric.rb +765 -0
  47. data/lib/adlint/c/object.rb +1018 -0
  48. data/lib/adlint/c/parser.rb +3800 -0
  49. data/lib/adlint/c/parser.y +2054 -0
  50. data/lib/adlint/c/phase.rb +712 -0
  51. data/lib/adlint/c/resolver.rb +270 -0
  52. data/lib/adlint/c/scanner.rb +248 -0
  53. data/lib/adlint/c/scope.rb +74 -0
  54. data/lib/adlint/c/syntax.rb +4279 -0
  55. data/lib/adlint/c/type.rb +7506 -0
  56. data/lib/adlint/c/util.rb +91 -0
  57. data/lib/adlint/c/value.rb +2310 -0
  58. data/lib/adlint/c.rb +56 -0
  59. data/lib/adlint/code.rb +500 -0
  60. data/lib/adlint/cpp/code.rb +189 -0
  61. data/lib/adlint/cpp/constexpr.rb +721 -0
  62. data/lib/adlint/cpp/constexpr.y +389 -0
  63. data/lib/adlint/cpp/eval.rb +1012 -0
  64. data/lib/adlint/cpp/lexer.rb +860 -0
  65. data/lib/adlint/cpp/macro.rb +637 -0
  66. data/lib/adlint/cpp/message.rb +992 -0
  67. data/lib/adlint/cpp/phase.rb +176 -0
  68. data/lib/adlint/cpp/scanner.rb +93 -0
  69. data/lib/adlint/cpp/source.rb +169 -0
  70. data/lib/adlint/cpp/subst.rb +300 -0
  71. data/lib/adlint/cpp/syntax.rb +1412 -0
  72. data/lib/adlint/cpp/util.rb +97 -0
  73. data/lib/adlint/cpp.rb +43 -0
  74. data/lib/adlint/driver.rb +147 -0
  75. data/lib/adlint/error.rb +179 -0
  76. data/lib/adlint/lang.rb +97 -0
  77. data/lib/adlint/ld/message.rb +259 -0
  78. data/lib/adlint/ld/metric.rb +57 -0
  79. data/lib/adlint/ld/object.rb +542 -0
  80. data/lib/adlint/ld/phase.rb +193 -0
  81. data/lib/adlint/ld/typedef.rb +109 -0
  82. data/lib/adlint/ld/util.rb +88 -0
  83. data/lib/adlint/ld.rb +37 -0
  84. data/lib/adlint/lexer.rb +293 -0
  85. data/lib/adlint/message.rb +368 -0
  86. data/lib/adlint/metric.rb +805 -0
  87. data/lib/adlint/monitor.rb +144 -0
  88. data/lib/adlint/phase.rb +90 -0
  89. data/lib/adlint/prelude.rb +314 -0
  90. data/lib/adlint/report.rb +617 -0
  91. data/lib/adlint/source.rb +155 -0
  92. data/lib/adlint/symbol.rb +127 -0
  93. data/lib/adlint/token.rb +215 -0
  94. data/lib/adlint/traits.rb +643 -0
  95. data/lib/adlint/util.rb +524 -0
  96. data/lib/adlint/version.rb +71 -0
  97. data/lib/adlint.rb +66 -0
  98. data/share/HEADER +45 -0
  99. data/share/demo/Makefile +110 -0
  100. data/share/demo/ambig_operator/ambig_operator.c +289 -0
  101. data/share/demo/arg_points_unset/arg_points_unset.c +37 -0
  102. data/share/demo/array_range/array_range.c +62 -0
  103. data/share/demo/bad_bitfields/bad_bitfields.c +74 -0
  104. data/share/demo/bad_brace/bad_brace.c +19 -0
  105. data/share/demo/bad_charset/abcde$.h +0 -0
  106. data/share/demo/bad_charset/bad_charset.c +22 -0
  107. data/share/demo/bad_comment/bad_comment.c +3 -0
  108. data/share/demo/bad_const/bad_const.c +19 -0
  109. data/share/demo/bad_conv/bad_conv.c +48 -0
  110. data/share/demo/bad_indent/bad_indent.c +50 -0
  111. data/share/demo/bad_init/bad_init.c +49 -0
  112. data/share/demo/bad_macro/bad_macro.c +97 -0
  113. data/share/demo/bitwise_expr/bitwise_expr.c +19 -0
  114. data/share/demo/call_by_value/call_by_value.c +26 -0
  115. data/share/demo/cross_ref/cross_ref.c +21 -0
  116. data/share/demo/dangling_else/dangling_else.c +20 -0
  117. data/share/demo/dead_code/dead_code.c +237 -0
  118. data/share/demo/deep_nest/deep_nest.c +57 -0
  119. data/share/demo/dense_switch/dense_switch.c +62 -0
  120. data/share/demo/direct_recur/direct_recur.c +15 -0
  121. data/share/demo/div_by_zero/div_by_zero.c +35 -0
  122. data/share/demo/dos_source/dos_source.c +7 -0
  123. data/share/demo/funptr_cast/funptr_cast.c +26 -0
  124. data/share/demo/goto_stmt/goto_stmt.c +19 -0
  125. data/share/demo/id_hiding/id_hiding.c +19 -0
  126. data/share/demo/ill_defined/ill_defined.c +13 -0
  127. data/share/demo/implicit_conv/implicit_conv.c +60 -0
  128. data/share/demo/implicit_int/implicit_int.c +14 -0
  129. data/share/demo/incomplete_type/incomplete_type.c +49 -0
  130. data/share/demo/indirect_recur/indirect_recur_1.c +14 -0
  131. data/share/demo/indirect_recur/indirect_recur_1.h +7 -0
  132. data/share/demo/indirect_recur/indirect_recur_2.c +12 -0
  133. data/share/demo/indirect_recur/indirect_recur_2.h +6 -0
  134. data/share/demo/indirect_recur/indirect_recur_3.c +6 -0
  135. data/share/demo/indirect_recur/indirect_recur_3.h +6 -0
  136. data/share/demo/indirect_recur/indirect_recur_4.c +25 -0
  137. data/share/demo/intro_demo/intro_demo.c +76 -0
  138. data/share/demo/intro_demo/intro_demo.h +12 -0
  139. data/share/demo/intro_demo/useless_header.h +5 -0
  140. data/share/demo/invalid_call/invalid_call.c +32 -0
  141. data/share/demo/kandr_fundef/kandr_fundef.c +10 -0
  142. data/share/demo/line_comment/line_comment.c +12 -0
  143. data/share/demo/local_decl/local_decl.c +9 -0
  144. data/share/demo/logical_trick/logical_trick.c +36 -0
  145. data/share/demo/long_sym/long_sym.c +5 -0
  146. data/share/demo/loop_var/loop_var.c +92 -0
  147. data/share/demo/malloc_or_die/malloc_or_die.c +43 -0
  148. data/share/demo/may_be_null/may_be_null.c +52 -0
  149. data/share/demo/may_be_null_arith/may_be_null_arith.c +15 -0
  150. data/share/demo/may_be_unset/may_be_unset.c +34 -0
  151. data/share/demo/mmapped_io/mmapped_io.c +23 -0
  152. data/share/demo/multi_break/multi_break.c +33 -0
  153. data/share/demo/multi_decl/multi_decl_1.c +17 -0
  154. data/share/demo/multi_decl/multi_decl_1.h +6 -0
  155. data/share/demo/multi_decl/multi_decl_2.c +13 -0
  156. data/share/demo/multi_decl/multi_decl_2.h +6 -0
  157. data/share/demo/multi_decl/multi_decl_3.c +22 -0
  158. data/share/demo/multi_def/multi_def_1.c +36 -0
  159. data/share/demo/multi_def/multi_def_1.h +6 -0
  160. data/share/demo/multi_def/multi_def_2.c +22 -0
  161. data/share/demo/multi_def/multi_def_2.h +6 -0
  162. data/share/demo/multi_def/multi_def_3.c +6 -0
  163. data/share/demo/multi_typedef/multi_typedef.c +11 -0
  164. data/share/demo/multi_typedef/multi_typedef_1.h +1 -0
  165. data/share/demo/multi_typedef/multi_typedef_2.h +1 -0
  166. data/share/demo/must_be_false/must_be_false.c +53 -0
  167. data/share/demo/must_be_null/must_be_null.c +13 -0
  168. data/share/demo/must_be_null_arith/must_be_null_arith.c +14 -0
  169. data/share/demo/must_be_true/must_be_true.c +21 -0
  170. data/share/demo/no_eof_nl/no_eof_nl.c +4 -0
  171. data/share/demo/no_void_arg/no_void_arg.c +14 -0
  172. data/share/demo/null_stmt/null_stmt.c +19 -0
  173. data/share/demo/octal_const/octal_const.c +20 -0
  174. data/share/demo/output_by_param/output_by_param.c +17 -0
  175. data/share/demo/overflow/overflow.c +74 -0
  176. data/share/demo/press_release/press_release.c +40 -0
  177. data/share/demo/retn_lvar_addr/retn_lvar_addr.c +47 -0
  178. data/share/demo/shift_expr/shift_expr.c +14 -0
  179. data/share/demo/should_be_typedef/should_be_typedef.c +51 -0
  180. data/share/demo/static_paths/static_paths.c +153 -0
  181. data/share/demo/static_vars/static_vars.c +39 -0
  182. data/share/demo/tag_hiding/tag_hiding.c +18 -0
  183. data/share/demo/tricky_incdec/tricky_incdec.c +12 -0
  184. data/share/demo/undefined_macro/undefined_macro.c +17 -0
  185. data/share/demo/uninit_vars/uninit_vars.c +28 -0
  186. data/share/demo/union_type/union_type.c +23 -0
  187. data/share/demo/unmatch_decl/unmatch_decl_1.c +12 -0
  188. data/share/demo/unmatch_decl/unmatch_decl_1.h +8 -0
  189. data/share/demo/unmatch_decl/unmatch_decl_2.c +10 -0
  190. data/share/demo/unmatch_decl/unmatch_decl_2.h +8 -0
  191. data/share/demo/unmatch_decl/unmatch_decl_3.c +7 -0
  192. data/share/demo/unmatch_paren_macro/unmatch_paren_macro.c +15 -0
  193. data/share/demo/unreachable/unreachable.c +34 -0
  194. data/share/demo/useless_exp_funs/useless_exp_funs_1.c +14 -0
  195. data/share/demo/useless_exp_funs/useless_exp_funs_1.h +1 -0
  196. data/share/demo/useless_exp_funs/useless_exp_funs_2.c +6 -0
  197. data/share/demo/useless_exp_vars/useless_export_1.c +8 -0
  198. data/share/demo/useless_exp_vars/useless_export_1.h +1 -0
  199. data/share/demo/useless_exp_vars/useless_export_2.c +7 -0
  200. data/share/demo/useless_expr/useless_expr.c +17 -0
  201. data/share/demo/useless_funs/useless_funs_1.c +21 -0
  202. data/share/demo/useless_funs/useless_funs_1.h +8 -0
  203. data/share/demo/useless_funs/useless_funs_2.c +6 -0
  204. data/share/demo/useless_header/useless_header.c +9 -0
  205. data/share/demo/useless_header/useless_header_1.h +12 -0
  206. data/share/demo/useless_header/useless_header_2.h +6 -0
  207. data/share/demo/useless_header/useless_header_3.h +9 -0
  208. data/share/demo/useless_header/useless_header_4.h +3 -0
  209. data/share/demo/useless_vars/useless_vars.c +17 -0
  210. data/share/demo/va_funcall/va_funcall.c +25 -0
  211. data/share/demo/various_fundef/various_fundef.c +36 -0
  212. data/share/demo/wchar_wstring/wchar_wstring.c +7 -0
  213. data/share/demo/wrap_around/wrap_around.c +38 -0
  214. data/share/doc/Makefile +16 -0
  215. data/share/doc/adlint_on_adqua.png +0 -0
  216. data/share/doc/adlint_on_eclipse_en.png +0 -0
  217. data/share/doc/adlint_on_eclipse_ja.png +0 -0
  218. data/share/doc/adlint_on_vim_en.png +0 -0
  219. data/share/doc/adlint_on_vim_ja.png +0 -0
  220. data/share/doc/developers_guide_ja.html +171 -0
  221. data/share/doc/developers_guide_ja.texi +87 -0
  222. data/share/doc/gen_mesg_sections.rb +39 -0
  223. data/share/doc/samples/GNUmakefile +162 -0
  224. data/share/doc/samples/adlint_traits.yml +238 -0
  225. data/share/doc/texinfo.css +22 -0
  226. data/share/doc/users_guide_en.html +39975 -0
  227. data/share/doc/users_guide_en.texi +32640 -0
  228. data/share/doc/users_guide_ja.html +40505 -0
  229. data/share/doc/users_guide_ja.texi +33189 -0
  230. data/share/logo/adlint-110.png +0 -0
  231. data/share/logo/adlint-524.png +0 -0
  232. data/share/logo/adlint.svg +4637 -0
  233. data/share/sample/README +6 -0
  234. data/share/sample/bison-2.5/adlint/GNUmakefile +170 -0
  235. data/share/sample/bison-2.5/adlint/adlint_traits.yml +225 -0
  236. data/share/sample/bison-2.5/adlint/lib/GNUmakefile +198 -0
  237. data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +228 -0
  238. data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +21 -0
  239. data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +238 -0
  240. data/share/sample/bison-2.5/adlint/src/GNUmakefile +166 -0
  241. data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +228 -0
  242. data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +21 -0
  243. data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +239 -0
  244. data/share/sample/ctags-5.8/adlint/GNUmakefile +169 -0
  245. data/share/sample/ctags-5.8/adlint/adlint_cinit.h +219 -0
  246. data/share/sample/ctags-5.8/adlint/adlint_pinit.h +13 -0
  247. data/share/sample/ctags-5.8/adlint/adlint_traits.yml +225 -0
  248. data/share/sample/flex-2.5.35/adlint/GNUmakefile +140 -0
  249. data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +219 -0
  250. data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +14 -0
  251. data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +225 -0
  252. data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +314 -0
  253. data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +225 -0
  254. data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +204 -0
  255. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +228 -0
  256. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +28 -0
  257. data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +240 -0
  258. data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +163 -0
  259. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +228 -0
  260. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +24 -0
  261. data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +240 -0
  262. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +149 -0
  263. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +228 -0
  264. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +24 -0
  265. data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +240 -0
  266. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +131 -0
  267. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +228 -0
  268. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +24 -0
  269. data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +241 -0
  270. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +131 -0
  271. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +228 -0
  272. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +24 -0
  273. data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +241 -0
  274. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +131 -0
  275. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +228 -0
  276. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +24 -0
  277. data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +241 -0
  278. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +131 -0
  279. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +228 -0
  280. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +24 -0
  281. data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +241 -0
  282. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +134 -0
  283. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +228 -0
  284. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +24 -0
  285. data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +241 -0
  286. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +131 -0
  287. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +228 -0
  288. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +24 -0
  289. data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +241 -0
  290. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +131 -0
  291. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +228 -0
  292. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +24 -0
  293. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +241 -0
  294. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +131 -0
  295. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +228 -0
  296. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +24 -0
  297. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +242 -0
  298. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +132 -0
  299. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +228 -0
  300. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +24 -0
  301. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +242 -0
  302. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +132 -0
  303. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +228 -0
  304. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +24 -0
  305. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +242 -0
  306. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +132 -0
  307. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +228 -0
  308. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +24 -0
  309. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +242 -0
  310. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +132 -0
  311. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +228 -0
  312. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +24 -0
  313. data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +242 -0
  314. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +134 -0
  315. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +228 -0
  316. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +24 -0
  317. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +241 -0
  318. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +140 -0
  319. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +228 -0
  320. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +24 -0
  321. data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +242 -0
  322. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +131 -0
  323. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +228 -0
  324. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +24 -0
  325. data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +241 -0
  326. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +131 -0
  327. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +228 -0
  328. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +24 -0
  329. data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +241 -0
  330. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +131 -0
  331. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +228 -0
  332. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +24 -0
  333. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +241 -0
  334. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +134 -0
  335. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +228 -0
  336. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +24 -0
  337. data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +242 -0
  338. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +131 -0
  339. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +228 -0
  340. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +24 -0
  341. data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +241 -0
  342. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +131 -0
  343. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +228 -0
  344. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +24 -0
  345. data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +241 -0
  346. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +131 -0
  347. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +228 -0
  348. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +24 -0
  349. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +241 -0
  350. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +131 -0
  351. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +228 -0
  352. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +24 -0
  353. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +241 -0
  354. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +131 -0
  355. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +228 -0
  356. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +24 -0
  357. data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +241 -0
  358. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +131 -0
  359. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +228 -0
  360. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +24 -0
  361. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +241 -0
  362. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +131 -0
  363. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +228 -0
  364. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +24 -0
  365. data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +241 -0
  366. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +131 -0
  367. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +228 -0
  368. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +24 -0
  369. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +241 -0
  370. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +131 -0
  371. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +228 -0
  372. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +24 -0
  373. data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +241 -0
  374. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +131 -0
  375. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +228 -0
  376. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +24 -0
  377. data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +241 -0
  378. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +162 -0
  379. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +228 -0
  380. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +24 -0
  381. data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +241 -0
  382. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +131 -0
  383. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +228 -0
  384. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +24 -0
  385. data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +241 -0
  386. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +135 -0
  387. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +228 -0
  388. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +24 -0
  389. data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +241 -0
  390. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +131 -0
  391. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +228 -0
  392. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +24 -0
  393. data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +241 -0
  394. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +131 -0
  395. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +228 -0
  396. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +24 -0
  397. data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +241 -0
  398. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +131 -0
  399. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +228 -0
  400. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +24 -0
  401. data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +241 -0
  402. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +131 -0
  403. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +228 -0
  404. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +24 -0
  405. data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +241 -0
  406. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +132 -0
  407. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +228 -0
  408. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +24 -0
  409. data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +241 -0
  410. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +144 -0
  411. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +228 -0
  412. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +24 -0
  413. data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +241 -0
  414. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +131 -0
  415. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +228 -0
  416. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +24 -0
  417. data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +241 -0
  418. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +131 -0
  419. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +228 -0
  420. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +24 -0
  421. data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +241 -0
  422. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +140 -0
  423. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +228 -0
  424. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +24 -0
  425. data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +241 -0
  426. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +131 -0
  427. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +228 -0
  428. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +24 -0
  429. data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +241 -0
  430. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +131 -0
  431. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +228 -0
  432. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +24 -0
  433. data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +241 -0
  434. data/share/sample/screen-4.0.3/adlint/GNUmakefile +162 -0
  435. data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +228 -0
  436. data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +21 -0
  437. data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +238 -0
  438. data/share/sample/vim-7.3/adlint/vim/GNUmakefile +185 -0
  439. data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +228 -0
  440. data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +25 -0
  441. data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +250 -0
  442. data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +131 -0
  443. data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +228 -0
  444. data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +24 -0
  445. data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +237 -0
  446. data/share/sample/zsh-4.3.15/adlint/GNUmakefile +146 -0
  447. data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +225 -0
  448. data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +132 -0
  449. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +228 -0
  450. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +24 -0
  451. data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +240 -0
  452. data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +153 -0
  453. data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +228 -0
  454. data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +23 -0
  455. data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +239 -0
  456. data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +147 -0
  457. data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +228 -0
  458. data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +24 -0
  459. data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +240 -0
  460. data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +144 -0
  461. data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +228 -0
  462. data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +24 -0
  463. data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +239 -0
  464. data/spec/MUST_WRITE_SPECS_WITH_RSPEC +0 -0
  465. metadata +532 -0
@@ -0,0 +1,805 @@
1
+ # Code quality metrics.
2
+ #
3
+ # Author:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
4
+ # Copyright:: Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
5
+ # License:: GPLv3+: GNU General Public License version 3 or later
6
+ #
7
+ # Owner:: Yutaka Yanoh <mailto:yanoh@users.sourceforge.net>
8
+
9
+ #--
10
+ # ___ ____ __ ___ _________
11
+ # / | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
12
+ # / /| | / / / / / / / |/ / / / AdLint - Advanced Lint
13
+ # / __ |/ /_/ / /___/ / /| / / /
14
+ # /_/ |_|_____/_____/_/_/ |_/ /_/ Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
15
+ #
16
+ # This file is part of AdLint.
17
+ #
18
+ # AdLint is free software: you can redistribute it and/or modify it under the
19
+ # terms of the GNU General Public License as published by the Free Software
20
+ # Foundation, either version 3 of the License, or (at your option) any later
21
+ # version.
22
+ #
23
+ # AdLint is distributed in the hope that it will be useful, but WITHOUT ANY
24
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
25
+ # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
26
+ #
27
+ # You should have received a copy of the GNU General Public License along with
28
+ # AdLint. If not, see <http://www.gnu.org/licenses/>.
29
+ #
30
+ #++
31
+
32
+ require "adlint/token"
33
+ require "adlint/code"
34
+ require "adlint/util"
35
+
36
+ module AdLint #:nodoc:
37
+
38
+ class CodeMetric
39
+ def to_a
40
+ subclass_responsibility
41
+ end
42
+
43
+ def to_s
44
+ delim = ",".to_default_external
45
+ to_a.map { |obj| obj.to_s.to_default_external }.join(delim)
46
+ end
47
+
48
+ def to_csv
49
+ to_a.map { |obj| obj ? obj.to_s.to_default_external : nil }.to_csv
50
+ end
51
+ end
52
+
53
+ class FL_STMT_Metric < CodeMetric
54
+ def initialize(fpath, statement_count)
55
+ @fpath = fpath
56
+ @statement_count = statement_count
57
+ end
58
+
59
+ def to_a
60
+ ["MET", "FL_STMT", @fpath, @statement_count]
61
+ end
62
+ end
63
+
64
+ class FL_FUNC_Metric < CodeMetric
65
+ def initialize(fpath, function_count)
66
+ @fpath = fpath
67
+ @function_count = function_count
68
+ end
69
+
70
+ def to_a
71
+ ["MET", "FL_FUNC", @fpath, @function_count]
72
+ end
73
+ end
74
+
75
+ class FN_STMT_Metric < CodeMetric
76
+ def initialize(function_identifier, location, statement_count)
77
+ @function_identifier = function_identifier
78
+ @location = location
79
+ @statement_count = statement_count
80
+ end
81
+
82
+ def to_a
83
+ ["MET", "FN_STMT",
84
+ @function_identifier.name, @function_identifier.signature,
85
+ @location.fpath, @location.line_no, @location.column_no,
86
+ @statement_count]
87
+ end
88
+ end
89
+
90
+ class FN_UNRC_Metric < CodeMetric
91
+ def initialize(function_identifier, location, unreached_statement_count)
92
+ @function_identifier = function_identifier
93
+ @location = location
94
+ @unreached_statement_count = unreached_statement_count
95
+ end
96
+
97
+ def to_a
98
+ ["MET", "FN_UNRC",
99
+ @function_identifier.name, @function_identifier.signature,
100
+ @location.fpath, @location.line_no, @location.column_no,
101
+ @unreached_statement_count]
102
+ end
103
+ end
104
+
105
+ class FN_LINE_Metric < CodeMetric
106
+ def initialize(function_identifier, location, total_lines)
107
+ @function_identifier = function_identifier
108
+ @location = location
109
+ @total_lines = total_lines
110
+ end
111
+
112
+ def to_a
113
+ ["MET", "FN_LINE",
114
+ @function_identifier.name, @function_identifier.signature,
115
+ @location.fpath, @location.line_no, @location.column_no,
116
+ @total_lines]
117
+ end
118
+ end
119
+
120
+ class FN_PARA_Metric < CodeMetric
121
+ def initialize(function_identifier, location, parameter_count)
122
+ @function_identifier = function_identifier
123
+ @location = location
124
+ @parameter_count = parameter_count
125
+ end
126
+
127
+ def to_a
128
+ ["MET", "FN_PARA",
129
+ @function_identifier.name, @function_identifier.signature,
130
+ @location.fpath, @location.line_no, @location.column_no,
131
+ @parameter_count]
132
+ end
133
+ end
134
+
135
+ class FN_UNUV_Metric < CodeMetric
136
+ def initialize(function_identifier, location, useless_variable_count)
137
+ @function_identifier = function_identifier
138
+ @location = location
139
+ @useless_variable_count = useless_variable_count
140
+ end
141
+
142
+ def to_a
143
+ ["MET", "FN_UNUV",
144
+ @function_identifier.name, @function_identifier.signature,
145
+ @location.fpath, @location.line_no, @location.column_no,
146
+ @useless_variable_count]
147
+ end
148
+ end
149
+
150
+ class FN_CSUB_Metric < CodeMetric
151
+ def initialize(function_identifier, location, function_call_count)
152
+ @function_identifier = function_identifier
153
+ @location = location
154
+ @function_call_count = function_call_count
155
+ end
156
+
157
+ def to_a
158
+ ["MET", "FN_CSUB",
159
+ @function_identifier.name, @function_identifier.signature,
160
+ @location.fpath, @location.line_no, @location.column_no,
161
+ @function_call_count]
162
+ end
163
+ end
164
+
165
+ class FN_GOTO_Metric < CodeMetric
166
+ def initialize(function_identifier, location, goto_count)
167
+ @function_identifier = function_identifier
168
+ @location = location
169
+ @goto_count = goto_count
170
+ end
171
+
172
+ def to_a
173
+ ["MET", "FN_GOTO",
174
+ @function_identifier.name, @function_identifier.signature,
175
+ @location.fpath, @location.line_no, @location.column_no,
176
+ @goto_count]
177
+ end
178
+ end
179
+
180
+ class FN_RETN_Metric < CodeMetric
181
+ def initialize(function_identifier, location, return_count)
182
+ @function_identifier = function_identifier
183
+ @location = location
184
+ @return_count = return_count
185
+ end
186
+
187
+ def to_a
188
+ ["MET", "FN_RETN",
189
+ @function_identifier.name, @function_identifier.signature,
190
+ @location.fpath, @location.line_no, @location.column_no,
191
+ @return_count]
192
+ end
193
+ end
194
+
195
+ class FN_UELS_Metric < CodeMetric
196
+ def initialize(function_identifier, location, if_statement_count)
197
+ @function_identifier = function_identifier
198
+ @location = location
199
+ @if_statement_count = if_statement_count
200
+ end
201
+
202
+ def to_a
203
+ ["MET", "FN_UELS",
204
+ @function_identifier.name, @function_identifier.signature,
205
+ @location.fpath, @location.line_no, @location.column_no,
206
+ @if_statement_count]
207
+ end
208
+ end
209
+
210
+ class FN_NEST_Metric < CodeMetric
211
+ def initialize(function_identifier, location, max_nest_level)
212
+ @function_identifier = function_identifier
213
+ @location = location
214
+ @max_nest_level = max_nest_level
215
+ end
216
+
217
+ def to_a
218
+ ["MET", "FN_NEST",
219
+ @function_identifier.name, @function_identifier.signature,
220
+ @location.fpath, @location.line_no, @location.column_no,
221
+ @max_nest_level]
222
+ end
223
+ end
224
+
225
+ class FN_PATH_Metric < CodeMetric
226
+ def initialize(function_identifier, location, path_count)
227
+ @function_identifier = function_identifier
228
+ @location = location
229
+ @path_count = path_count
230
+ end
231
+
232
+ def to_a
233
+ ["MET", "FN_PATH",
234
+ @function_identifier.name, @function_identifier.signature,
235
+ @location.fpath, @location.line_no, @location.column_no,
236
+ @path_count]
237
+ end
238
+ end
239
+
240
+ class FN_CYCM_Metric < CodeMetric
241
+ def initialize(function_identifier, location, cyclomatic_complexity)
242
+ @function_identifier = function_identifier
243
+ @location = location
244
+ @cyclomatic_complexity = cyclomatic_complexity
245
+ end
246
+
247
+ def to_a
248
+ ["MET", "FN_CYCM",
249
+ @function_identifier.name, @function_identifier.signature,
250
+ @location.fpath, @location.line_no, @location.column_no,
251
+ @cyclomatic_complexity]
252
+ end
253
+ end
254
+
255
+ class FN_CALL_Metric < CodeMetric
256
+ def initialize(function_identifier, location, caller_count)
257
+ @function_identifier = function_identifier
258
+ @location = location
259
+ @caller_count = caller_count
260
+ end
261
+
262
+ def to_a
263
+ ["MET", "FN_CALL",
264
+ @function_identifier.name, @function_identifier.signature,
265
+ @location.fpath, @location.line_no, @location.column_no,
266
+ @caller_count]
267
+ end
268
+ end
269
+
270
+ # == Base of metric measurement classes.
271
+ class MetricMeasurement
272
+ def initialize(context)
273
+ @context = context
274
+ end
275
+
276
+ def execute
277
+ do_prepare(@context)
278
+ do_execute(@context)
279
+ end
280
+
281
+ private
282
+ def do_prepare(context)
283
+ subclass_responsibility
284
+ end
285
+
286
+ def do_execute(context)
287
+ subclass_responsibility
288
+ end
289
+
290
+ def report
291
+ @context.report
292
+ end
293
+ end
294
+
295
+ class MetricRecord < CsvRecord
296
+ def self.of(csv_row)
297
+ case csv_row[0]
298
+ when "VER"
299
+ create_version_record(csv_row)
300
+ when "DCL"
301
+ create_declaration_record(csv_row)
302
+ when "DEF"
303
+ create_definition_record(csv_row)
304
+ when "INI"
305
+ create_initialization_record(csv_row)
306
+ when "ASN"
307
+ create_assignment_record(csv_row)
308
+ when "DEP"
309
+ create_dependency_record(csv_row)
310
+ when "LIT"
311
+ create_literal_record(csv_row)
312
+ when "PRE"
313
+ create_pp_directive_record(csv_row)
314
+ when "MET"
315
+ create_metric_record(csv_row)
316
+ else
317
+ raise "invalid metric record."
318
+ end
319
+ end
320
+
321
+ def type
322
+ field_at(0)
323
+ end
324
+
325
+ def fpath
326
+ Pathname.new(field_at(1))
327
+ end
328
+
329
+ def line_no
330
+ field_at(2)
331
+ end
332
+
333
+ def column_no
334
+ field_at(3)
335
+ end
336
+
337
+ def location
338
+ Location.new(fpath, line_no, column_no)
339
+ end
340
+
341
+ def version?; false end
342
+
343
+ def typedef_declaration?; false end
344
+
345
+ def struct_declaration?; false end
346
+
347
+ def union_declaration?; false end
348
+
349
+ def enum_declaration?; false end
350
+
351
+ def global_variable_declaration?; false end
352
+
353
+ def function_declaration?; false end
354
+
355
+ def variable_definition?; false end
356
+
357
+ def function_definition?; false end
358
+
359
+ def macro_definition?; false end
360
+
361
+ def label_definition?; false end
362
+
363
+ def initialization?; false end
364
+
365
+ def assignment?; false end
366
+
367
+ def include?; false end
368
+
369
+ def function_call?; false end
370
+
371
+ def variable_xref?; false end
372
+
373
+ def function_xref?; false end
374
+
375
+ def literal?; false end
376
+
377
+ def pp_directive?; false end
378
+
379
+ def self.create_version_record(csv_row)
380
+ VersionRecord.new(csv_row)
381
+ end
382
+ private_class_method :create_version_record
383
+
384
+ def self.create_declaration_record(csv_row)
385
+ case csv_row[4]
386
+ when "T"
387
+ case csv_row[5]
388
+ when "T"
389
+ TypedefDeclarationRecord.new(csv_row)
390
+ when "S"
391
+ StructDeclarationRecord.new(csv_row)
392
+ when "U"
393
+ UnionDeclarationRecord.new(csv_row)
394
+ when "E"
395
+ EnumDeclarationRecord.new(csv_row)
396
+ else
397
+ raise "invalid DCL record."
398
+ end
399
+ when "V"
400
+ GlobalVariableDeclarationRecord.new(csv_row)
401
+ when "F"
402
+ FunctionDeclarationRecord.new(csv_row)
403
+ else
404
+ raise "invalid DCL record."
405
+ end
406
+ end
407
+ private_class_method :create_declaration_record
408
+
409
+ def self.create_definition_record(csv_row)
410
+ case csv_row[4]
411
+ when "V"
412
+ VariableDefinitionRecord.new(csv_row)
413
+ when "F"
414
+ FunctionDefinitionRecord.new(csv_row)
415
+ when "M"
416
+ MacroDefinitionRecord.new(csv_row)
417
+ when "L"
418
+ LabelDefinitionRecord.new(csv_row)
419
+ else
420
+ raise "invalid DEF record."
421
+ end
422
+ end
423
+ private_class_method :create_definition_record
424
+
425
+ def self.create_initialization_record(csv_row)
426
+ InitializationRecord.new(csv_row)
427
+ end
428
+ private_class_method :create_initialization_record
429
+
430
+ def self.create_assignment_record(csv_row)
431
+ AssignmentRecord.new(csv_row)
432
+ end
433
+ private_class_method :create_assignment_record
434
+
435
+ def self.create_dependency_record(csv_row)
436
+ case csv_row[4]
437
+ when "I"
438
+ IncludeRecord.new(csv_row)
439
+ when "C"
440
+ FunctionCallRecord.new(csv_row)
441
+ when "X"
442
+ case csv_row[5]
443
+ when "V"
444
+ VariableXRefRecord.new(csv_row)
445
+ when "F"
446
+ FunctionXRefRecord.new(csv_row)
447
+ else
448
+ raise "invalid DEP record."
449
+ end
450
+ else
451
+ raise "invalid DEP record."
452
+ end
453
+ end
454
+ private_class_method :create_dependency_record
455
+
456
+ def self.create_literal_record(csv_row)
457
+ LiteralRecord.new(csv_row)
458
+ end
459
+ private_class_method :create_literal_record
460
+
461
+ def self.create_pp_directive_record(csv_row)
462
+ PPDirectiveRecord.new(csv_row)
463
+ end
464
+ private_class_method :create_pp_directive_record
465
+
466
+ def self.create_metric_record(csv_row)
467
+ MetricRecord.new(csv_row)
468
+ end
469
+ private_class_method :create_metric_record
470
+
471
+ class VersionRecord < MetricRecord
472
+ def version?
473
+ true
474
+ end
475
+
476
+ def version_number
477
+ field_at(1)
478
+ end
479
+
480
+ def exec_timestamp
481
+ field_at(2)
482
+ end
483
+ end
484
+ private_constant :VersionRecord
485
+
486
+ class TypedefDeclarationRecord < MetricRecord
487
+ def typedef_declaration?
488
+ true
489
+ end
490
+
491
+ def typedcl_type
492
+ field_at(5)
493
+ end
494
+
495
+ def type_name
496
+ field_at(6)
497
+ end
498
+
499
+ def type_rep
500
+ field_at(7)
501
+ end
502
+ end
503
+ private_constant :TypedefDeclarationRecord
504
+
505
+ class StructDeclarationRecord < MetricRecord
506
+ def struct_declaration?
507
+ true
508
+ end
509
+
510
+ def typedcl_type
511
+ field_at(5)
512
+ end
513
+
514
+ def type_name
515
+ field_at(6)
516
+ end
517
+
518
+ def type_rep
519
+ field_at(7)
520
+ end
521
+ end
522
+ private_constant :StructDeclarationRecord
523
+
524
+ class UnionDeclarationRecord < MetricRecord
525
+ def union_declaration?
526
+ true
527
+ end
528
+
529
+ def typedcl_type
530
+ field_at(5)
531
+ end
532
+
533
+ def type_name
534
+ field_at(6)
535
+ end
536
+
537
+ def type_rep
538
+ field_at(7)
539
+ end
540
+ end
541
+ private_constant :UnionDeclarationRecord
542
+
543
+ class EnumDeclarationRecord < MetricRecord
544
+ def enum_declaration?
545
+ true
546
+ end
547
+
548
+ def typedcl_type
549
+ field_at(5)
550
+ end
551
+
552
+ def type_name
553
+ field_at(6)
554
+ end
555
+
556
+ def type_rep
557
+ field_at(7)
558
+ end
559
+ end
560
+ private_constant :EnumDeclarationRecord
561
+
562
+ class GlobalVariableDeclarationRecord < MetricRecord
563
+ def global_variable_declaration?
564
+ true
565
+ end
566
+
567
+ def variable_name
568
+ field_at(5)
569
+ end
570
+
571
+ def type_rep
572
+ field_at(6)
573
+ end
574
+ end
575
+ private_constant :GlobalVariableDeclarationRecord
576
+
577
+ class FunctionDeclarationRecord < MetricRecord
578
+ def function_declaration?
579
+ true
580
+ end
581
+
582
+ def function_linkage_type
583
+ field_at(5)
584
+ end
585
+
586
+ def function_scope_type
587
+ field_at(6)
588
+ end
589
+
590
+ def function_identifier
591
+ FunctionIdentifier.new(field_at(7), field_at(8))
592
+ end
593
+ end
594
+ private_constant :FunctionDeclarationRecord
595
+
596
+ class VariableDefinitionRecord < MetricRecord
597
+ def variable_definition?
598
+ true
599
+ end
600
+
601
+ def var_linkage_type
602
+ field_at(5)
603
+ end
604
+
605
+ def var_scope_type
606
+ field_at(6)
607
+ end
608
+
609
+ def storage_class_type
610
+ field_at(7)
611
+ end
612
+
613
+ def variable_name
614
+ field_at(8)
615
+ end
616
+
617
+ def type_rep
618
+ field_at(9)
619
+ end
620
+ end
621
+ private_constant :VariableDefinitionRecord
622
+
623
+ class FunctionDefinitionRecord < MetricRecord
624
+ def function_definition?
625
+ true
626
+ end
627
+
628
+ def function_linkage_type
629
+ field_at(5)
630
+ end
631
+
632
+ def function_scope_type
633
+ field_at(6)
634
+ end
635
+
636
+ def function_identifier
637
+ FunctionIdentifier.new(field_at(7), field_at(8))
638
+ end
639
+
640
+ def lines
641
+ field_at(9)
642
+ end
643
+ end
644
+ private_constant :FunctionDefinitionRecord
645
+
646
+ class MacroDefinitionRecord < MetricRecord
647
+ def macro_definition?
648
+ true
649
+ end
650
+
651
+ def macro_name
652
+ field_at(5)
653
+ end
654
+
655
+ def macro_type
656
+ field_at(6)
657
+ end
658
+ end
659
+ private_constant :MacroDefinitionRecord
660
+
661
+ class LabelDefinitionRecord < MetricRecord
662
+ def label_definition?
663
+ true
664
+ end
665
+
666
+ def label_name
667
+ field_at(5)
668
+ end
669
+ end
670
+ private_constant :LabelDefinitionRecord
671
+
672
+ class InitializationRecord < MetricRecord
673
+ def initialization?
674
+ true
675
+ end
676
+
677
+ def variable_name
678
+ field_at(4)
679
+ end
680
+
681
+ def initializer_rep
682
+ field_at(5)
683
+ end
684
+ end
685
+ private_constant :InitializationRecord
686
+
687
+ class AssignmentRecord < MetricRecord
688
+ def assignment?
689
+ true
690
+ end
691
+
692
+ def variable_name
693
+ field_at(4)
694
+ end
695
+
696
+ def assignment_rep
697
+ field_at(5)
698
+ end
699
+ end
700
+ private_constant :AssignmentRecord
701
+
702
+ class IncludeRecord < MetricRecord
703
+ def include?
704
+ true
705
+ end
706
+
707
+ def included_fpath
708
+ Pathname.new(field_at(5))
709
+ end
710
+ end
711
+ private_constant :IncludeRecord
712
+
713
+ class FunctionCallRecord < MetricRecord
714
+ def function_call?
715
+ true
716
+ end
717
+
718
+ def caller_function
719
+ FunctionIdentifier.new(field_at(5), field_at(6))
720
+ end
721
+
722
+ def callee_function
723
+ FunctionIdentifier.new(field_at(7), field_at(8))
724
+ end
725
+ end
726
+ private_constant :FunctionCallRecord
727
+
728
+ class VariableXRefRecord < MetricRecord
729
+ def variable_xref?
730
+ true
731
+ end
732
+
733
+ def accessor_function
734
+ FunctionIdentifier.new(field_at(6), field_at(7))
735
+ end
736
+
737
+ def access_type
738
+ field_at(8)
739
+ end
740
+
741
+ def accessee_variable
742
+ field_at(9)
743
+ end
744
+ end
745
+ private_constant :VariableXRefRecord
746
+
747
+ class FunctionXRefRecord < MetricRecord
748
+ def function_xref?
749
+ true
750
+ end
751
+
752
+ def accessor_function
753
+ FunctionIdentifier.new(field_at(6), field_at(7))
754
+ end
755
+
756
+ def access_type
757
+ field_at(8)
758
+ end
759
+
760
+ def accessee_function
761
+ FunctionIdentifier.new(field_at(9), field_at(10))
762
+ end
763
+ end
764
+ private_constant :FunctionXRefRecord
765
+
766
+ class LiteralRecord < MetricRecord
767
+ def literal?
768
+ true
769
+ end
770
+
771
+ def literal_type
772
+ field_at(4)
773
+ end
774
+
775
+ def literal_prefix
776
+ field_at(5)
777
+ end
778
+
779
+ def literal_suffix
780
+ field_at(6)
781
+ end
782
+
783
+ def literal_value
784
+ field_at(7)
785
+ end
786
+ end
787
+ private_constant :LiteralRecord
788
+
789
+ class PPDirectiveRecord < MetricRecord
790
+ def pp_directive?
791
+ true
792
+ end
793
+
794
+ def pp_directive
795
+ field_at(4)
796
+ end
797
+
798
+ def pp_tokens
799
+ field_at(5)
800
+ end
801
+ end
802
+ private_constant :PPDirectiveRecord
803
+ end
804
+
805
+ end