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/util.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Miscellaneous utilities.
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,9 +29,13 @@
29
29
  #
30
30
  #++
31
31
 
32
+ require "adlint/memo"
33
+
32
34
  module AdLint #:nodoc:
33
35
 
34
36
  module Validation
37
+ # NOTE: Host class must respond to #entity_name.
38
+
35
39
  def ensure_validity_of(*args)
36
40
  @validators ||= []
37
41
  attr_names = _attr_names_in(args)
@@ -52,21 +56,21 @@ module AdLint #:nodoc:
52
56
 
53
57
  def ensure_numericality_of(*args)
54
58
  @validators ||= []
55
- attr_names, options = _attr_names_in(args), _options_in(args)
56
- only_integer = options[:only_integer] ? true : false
57
- min_value = options[:min]
58
- max_value = options[:max]
59
+ attr_names, opts = _attr_names_in(args), _options_in(args)
60
+ only_int = opts[:only_integer] ? true : false
61
+ min = opts[:min]
62
+ max = opts[:max]
59
63
  attr_names.each do |attr_name|
60
- @validators.push(NumericalityValidator.new(attr_name, only_integer,
61
- min_value, max_value))
64
+ @validators.push(NumericalityValidator.new(attr_name, only_int,
65
+ min, max))
62
66
  end
63
67
  self
64
68
  end
65
69
 
66
70
  def ensure_file_presence_of(*args)
67
71
  @validators ||= []
68
- attr_names, options = _attr_names_in(args), _options_in(args)
69
- allow_nil = options[:allow_nil]
72
+ attr_names, opts = _attr_names_in(args), _options_in(args)
73
+ allow_nil = opts[:allow_nil]
70
74
  attr_names.each do |attr_name|
71
75
  @validators.push(FilePresenceValidator.new(attr_name, allow_nil))
72
76
  end
@@ -75,8 +79,8 @@ module AdLint #:nodoc:
75
79
 
76
80
  def ensure_dir_presence_of(*args)
77
81
  @validators ||= []
78
- attr_names, options = _attr_names_in(args), _options_in(args)
79
- allow_nil = options[:allow_nil]
82
+ attr_names, opts = _attr_names_in(args), _options_in(args)
83
+ allow_nil = opts[:allow_nil]
80
84
  attr_names.each do |attr_name|
81
85
  @validators.push(DirPresenceValidator.new(attr_name, allow_nil))
82
86
  end
@@ -94,10 +98,10 @@ module AdLint #:nodoc:
94
98
 
95
99
  def ensure_inclusion_of(*args)
96
100
  @validators ||= []
97
- attr_names, options = _attr_names_in(args), _options_in(args)
98
- values = options[:values] || []
101
+ attr_names, opts = _attr_names_in(args), _options_in(args)
102
+ vals = opts[:values] || []
99
103
  attr_names.each do |attr_name|
100
- @validators.push(InclusionValidator.new(attr_name, values))
104
+ @validators.push(InclusionValidator.new(attr_name, vals))
101
105
  end
102
106
  self
103
107
  end
@@ -122,11 +126,11 @@ module AdLint #:nodoc:
122
126
 
123
127
  def ensure_with(*args)
124
128
  @validators ||= []
125
- attr_names, options = _attr_names_in(args), _options_in(args)
126
- message = options[:message] || "is not valid."
127
- validator = options[:validator] || lambda { |value| value }
129
+ attr_names, opts = _attr_names_in(args), _options_in(args)
130
+ msg = opts[:message] || "is not valid."
131
+ validator = opts[:validator] || lambda { |val| val }
128
132
  attr_names.each do |attr_name|
129
- @validators.push(CustomValidator.new(attr_name, message, validator))
133
+ @validators.push(CustomValidator.new(attr_name, msg, validator))
130
134
  end
131
135
  self
132
136
  end
@@ -135,10 +139,6 @@ module AdLint #:nodoc:
135
139
  @validators ||= []
136
140
  end
137
141
 
138
- def name
139
- subclass_responsibility
140
- end
141
-
142
142
  def valid?
143
143
  if self.class.validators
144
144
  self.class.validators.map { |validator| validator.execute(self) }.all?
@@ -186,10 +186,10 @@ module AdLint #:nodoc:
186
186
  end
187
187
 
188
188
  def qualified_attr_name(attr_owner)
189
- if attr_owner.name.nil? || attr_owner.name.empty?
189
+ if attr_owner.entity_name.nil? || attr_owner.entity_name.empty?
190
190
  @attr_name
191
191
  else
192
- "#{attr_owner.name}:#{@attr_name}"
192
+ "#{attr_owner.entity_name}:#{@attr_name}"
193
193
  end
194
194
  end
195
195
  end
@@ -197,9 +197,9 @@ module AdLint #:nodoc:
197
197
 
198
198
  class ObjectValidator < Validator
199
199
  def execute(attr_owner)
200
- if object = target_value(attr_owner)
201
- return true if object.valid?
202
- @errors.concat(object.errors)
200
+ if obj = target_value(attr_owner)
201
+ return true if obj.valid?
202
+ @errors.concat(obj.errors)
203
203
  end
204
204
  false
205
205
  end
@@ -219,32 +219,32 @@ module AdLint #:nodoc:
219
219
  private_constant :PresenceValidator
220
220
 
221
221
  class NumericalityValidator < PresenceValidator
222
- def initialize(attr_name, only_integer, min_value, max_value)
222
+ def initialize(attr_name, only_int, min, max)
223
223
  super(attr_name)
224
- @only_integer = only_integer
225
- @min_value = min_value
226
- @max_value = max_value
224
+ @only_integer = only_int
225
+ @min = min
226
+ @max = max
227
227
  end
228
228
 
229
229
  def execute(attr_owner)
230
230
  return false unless super
231
- value = target_value(attr_owner)
231
+ val = target_value(attr_owner)
232
232
 
233
- case value
233
+ case val
234
234
  when Numeric
235
- if @only_integer && !value.integer?
235
+ if @only_integer && !val.integer?
236
236
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
237
237
  "is not an integer.")
238
238
  return false
239
239
  end
240
- if @min_value && value < @min_value
240
+ if @min && val < @min
241
241
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
242
- "is not greater than or equal to #{@min_value}.")
242
+ "is not greater than or equal to #{@min}.")
243
243
  return false
244
244
  end
245
- if @max_value && @max_value < value
245
+ if @max && @max < val
246
246
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
247
- "is not less than or equal to #{@max_value}.")
247
+ "is not less than or equal to #{@max}.")
248
248
  return false
249
249
  end
250
250
  else
@@ -265,18 +265,21 @@ module AdLint #:nodoc:
265
265
  end
266
266
 
267
267
  def execute(attr_owner)
268
- value = target_value(attr_owner)
268
+ val = target_value(attr_owner)
269
269
 
270
- unless value
271
- return true if @allow_nil
272
- @errors.push("`#{qualified_attr_name(attr_owner)}' " +
273
- "is not specified.")
274
- return false
270
+ unless val
271
+ if @allow_nil
272
+ return true
273
+ else
274
+ @errors.push("`#{qualified_attr_name(attr_owner)}' " +
275
+ "is not specified.")
276
+ return false
277
+ end
275
278
  end
276
279
 
277
- unless File.exist?(value) && File.file?(value)
280
+ unless File.exist?(val) && File.file?(val)
278
281
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
279
- "is non-existent pathname (#{value.to_s}).")
282
+ "is non-existent pathname (#{val.to_s}).")
280
283
  return false
281
284
  end
282
285
  true
@@ -291,18 +294,21 @@ module AdLint #:nodoc:
291
294
  end
292
295
 
293
296
  def execute(attr_owner)
294
- value = target_value(attr_owner)
297
+ val = target_value(attr_owner)
295
298
 
296
- unless value
297
- return true if @allow_nil
298
- @errors.push("`#{qualified_attr_name(attr_owner)}' " +
299
- "is not specified.")
300
- return false
299
+ unless val
300
+ if @allow_nil
301
+ return true
302
+ else
303
+ @errors.push("`#{qualified_attr_name(attr_owner)}' " +
304
+ "is not specified.")
305
+ return false
306
+ end
301
307
  end
302
308
 
303
- unless File.exist?(value) && File.directory?(value)
309
+ unless File.exist?(val) && File.directory?(val)
304
310
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
305
- "is non-existent pathname (#{value.to_s}).")
311
+ "is non-existent pathname (#{val.to_s}).")
306
312
  return false
307
313
  end
308
314
  true
@@ -312,16 +318,16 @@ module AdLint #:nodoc:
312
318
 
313
319
  class DirsPresenceValidator < Validator
314
320
  def execute(attr_owner)
315
- value = target_value(attr_owner)
321
+ val = target_value(attr_owner)
316
322
 
317
- bad_paths = value.reject { |pathname|
318
- File.exist?(pathname) && File.directory?(pathname)
323
+ bad_paths = val.reject { |path|
324
+ File.exist?(path) && File.directory?(path)
319
325
  }
320
326
 
321
327
  unless bad_paths.empty?
322
- bad_paths.each do |pathname|
328
+ bad_paths.each do |path|
323
329
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
324
- "contains non-existent pathname (#{pathname.to_s}).")
330
+ "contains non-existent pathname (#{path.to_s}).")
325
331
  end
326
332
  return false
327
333
  end
@@ -331,16 +337,16 @@ module AdLint #:nodoc:
331
337
  private_constant :DirsPresenceValidator
332
338
 
333
339
  class InclusionValidator < PresenceValidator
334
- def initialize(attr_name, values)
340
+ def initialize(attr_name, vals)
335
341
  super(attr_name)
336
- @values = values
342
+ @values = vals
337
343
  end
338
344
 
339
345
  def execute(attr_owner)
340
346
  return false unless super
341
- value = target_value(attr_owner)
347
+ val = target_value(attr_owner)
342
348
 
343
- unless @values.include?(value)
349
+ unless @values.include?(val)
344
350
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
345
351
  "is not one of #{@values.join(", ")}.")
346
352
  return false
@@ -367,21 +373,21 @@ module AdLint #:nodoc:
367
373
 
368
374
  class ExamPackagesPresenceValidator < Validator
369
375
  def execute(attr_owner)
370
- value = target_value(attr_owner)
376
+ val = target_value(attr_owner)
371
377
 
372
- if value.empty?
378
+ if val.empty?
373
379
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
374
380
  "is not specified.")
375
381
  return false
376
382
  end
377
383
 
378
- bad_exams = value.reject { |exam_package| exam_package.load }
384
+ bad_exams = val.reject { |exam_pkg| exam_pkg.load }
379
385
 
380
386
  unless bad_exams.empty?
381
- bad_exams.each do |exam_package|
387
+ bad_exams.each do |exam_pkg|
382
388
  @errors.push("`#{qualified_attr_name(attr_owner)}' " +
383
389
  "contains non-existent exam-package name " +
384
- "(#{exam_package.name}).")
390
+ "(#{exam_pkg.name}).")
385
391
  end
386
392
  return false
387
393
  end
@@ -391,9 +397,9 @@ module AdLint #:nodoc:
391
397
  private_constant :ExamPackagesPresenceValidator
392
398
 
393
399
  class CustomValidator < Validator
394
- def initialize(attr_name, message, validator)
400
+ def initialize(attr_name, msg, validator)
395
401
  super(attr_name)
396
- @message = message
402
+ @message = msg
397
403
  @validator = validator
398
404
  end
399
405
 
@@ -415,134 +421,21 @@ module AdLint #:nodoc:
415
421
 
416
422
  private
417
423
  def visitor_method_name
418
- unless defined?(@visitor_method_name)
419
- node_name = self.class.name.sub(/\A.*::/, "")
420
- node_name = node_name.gsub(/([A-Z][a-z])/, "_\\1")
421
- node_name = node_name.sub(/\A_/, "").tr("A-Z", "a-z")
422
- @visitor_method_name = "visit_#{node_name}".intern
423
- end
424
- @visitor_method_name
424
+ node_name = self.class.name.sub(/\A.*::/, "")
425
+ node_name = node_name.gsub(/([A-Z][a-z])/, "_\\1")
426
+ node_name = node_name.sub(/\A_/, "").tr("A-Z", "a-z")
427
+ "visit_#{node_name}".to_sym
425
428
  end
429
+ memoize :visitor_method_name
426
430
  end
427
431
 
428
432
  class CsvRecord
429
- def initialize(array)
430
- @array = array
431
- end
432
-
433
- def field_at(index)
434
- @array.fetch(index)
435
- end
436
- end
437
-
438
- module Memoizable
439
- def memoize(name, *key_indices)
440
- orig_name = "_orig_#{name}"
441
- class_eval <<-EOS
442
- alias_method("#{orig_name}", "#{name}")
443
- private("#{orig_name}")
444
- EOS
445
- if key_indices.empty?
446
- if instance_method("#{name}").arity == 0
447
- define_cache_manipulator(name)
448
- class_eval <<-EOS
449
- define_method("#{name}") do |*args|
450
- @_#{name}_cache ||= nil
451
- @_#{name}_cache_forbidden ||= false
452
- if result = @_#{name}_cache
453
- @_#{name}_cache_forbidden = false
454
- else
455
- result = #{orig_name}(*args)
456
- if @_#{name}_cache_forbidden
457
- @_#{name}_cache_forbidden = false
458
- else
459
- @_#{name}_cache = result
460
- end
461
- end
462
- result
463
- end
464
- EOS
465
- else
466
- define_cache_manipulator(name, key_indices)
467
- class_eval <<-EOS
468
- define_method("#{name}") do |*args|
469
- @_#{name}_cache ||= {}
470
- @_#{name}_cache_forbidden ||= false
471
- if result = @_#{name}_cache[args]
472
- @_#{name}_cache_forbidden = false
473
- else
474
- result = #{orig_name}(*args)
475
- if @_#{name}_cache_forbidden
476
- @_#{name}_cache_forbidden = false
477
- else
478
- @_#{name}_cache[args] = result
479
- end
480
- end
481
- result
482
- end
483
- EOS
484
- end
485
- else
486
- define_cache_manipulator(name, key_indices)
487
- class_eval <<-EOS
488
- define_method("#{name}") do |*args|
489
- @_#{name}_cache ||= {}
490
- @_#{name}_cache_forbidden ||= false
491
- key = args.values_at(#{key_indices.join(',')})
492
- if result = @_#{name}_cache[key]
493
- @_#{name}_cache_forbidden = false
494
- else
495
- result = #{orig_name}(*args)
496
- if @_#{name}_cache_forbidden
497
- @_#{name}_cache_forbidden = false
498
- else
499
- @_#{name}_cache[key] = result
500
- end
501
- end
502
- result
503
- end
504
- EOS
505
- end
433
+ def initialize(ary)
434
+ @ary = ary
506
435
  end
507
436
 
508
- private
509
- def define_cache_manipulator(name, key_indices = nil)
510
- class_eval <<-EOS
511
- define_method("forbid_#{name}_memoizing_once") do |*args|
512
- @_#{name}_cache_forbidden = true
513
- end
514
- EOS
515
- case
516
- when key_indices && key_indices.empty?
517
- class_eval <<-EOS
518
- define_method("forget_#{name}_memo") do |*args|
519
- @_#{name}_cache.delete(args) if defined?(@_#{name}_cache)
520
- end
521
- define_method("clear_#{name}_memo") do |*args|
522
- @_#{name}_cache.clear if defined?(@_#{name}_cache)
523
- end
524
- EOS
525
- when key_indices
526
- class_eval <<-EOS
527
- define_method("forget_#{name}_memo") do |*args|
528
- if defined?(@_#{name}_cache)
529
- @_#{name}_cache.delete(args.values_at(#{key_indices.join(',')}))
530
- end
531
- end
532
- define_method("clear_#{name}_memo") do |*args|
533
- @_#{name}_cache.clear if defined?(@_#{name}_cache)
534
- end
535
- EOS
536
- else
537
- class_eval <<-EOS
538
- define_method("forget_#{name}_memo") do |*args|
539
- @_#{name}_cache = nil
540
- end
541
- define_method("clear_#{name}_memo") do |*args|
542
- @_#{name}_cache = nil
543
- end
544
- EOS
545
- end
437
+ def field_at(idx)
438
+ @ary.fetch(idx)
546
439
  end
547
440
  end
548
441
 
@@ -573,17 +466,6 @@ module AdLint #:nodoc:
573
466
  end
574
467
  end
575
468
 
576
- module PackageResolver
577
- def package_name_of(class_or_module)
578
- if class_or_module.name =~ /\AAdLint::Exam::(.*?)::/
579
- $1.sub(/\A./) { |s| s.downcase }.gsub(/[A-Z]/) { |s| "_#{s.downcase}" }
580
- else
581
- "core"
582
- end
583
- end
584
- module_function :package_name_of
585
- end
586
-
587
469
  module CompoundPathParser
588
470
  def parse_compound_path_list(ary)
589
471
  (ary || []).compact.map { |str| parse_compound_path_str(str) }.flatten
@@ -596,6 +478,35 @@ module AdLint #:nodoc:
596
478
  module_function :parse_compound_path_str
597
479
  end
598
480
 
481
+ module LogUtil
482
+ # NOTE: Host class must respond to #logger.
483
+
484
+ def log_fatal(*args, &block)
485
+ logger.fatal(*args, &block)
486
+ end
487
+ alias :LOG_F :log_fatal
488
+
489
+ def log_error(*args, &block)
490
+ logger.error(*args, &block)
491
+ end
492
+ alias :LOG_E :log_error
493
+
494
+ def log_warn(*args, &block)
495
+ logger.warn(*args, &block)
496
+ end
497
+ alias :LOG_W :log_warn
498
+
499
+ def log_info(*args, &block)
500
+ logger.info(*args, &block)
501
+ end
502
+ alias :LOG_I :log_info
503
+
504
+ def log_debug(*args, &block)
505
+ logger.debug(*args, &block)
506
+ end
507
+ alias :LOG_D :log_debug
508
+ end
509
+
599
510
  end
600
511
 
601
512
  if $0 == __FILE__
@@ -606,7 +517,7 @@ if $0 == __FILE__
606
517
  p "foo"
607
518
  end
608
519
 
609
- extend AdLint::Pluggable
520
+ extend ::AdLint::Pluggable
610
521
 
611
522
  def_plugin :on_initialization
612
523