adlint 2.6.14 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -3
- data/ChangeLog +511 -0
- data/INSTALL +1 -1
- data/MANIFEST +57 -37
- data/NEWS +36 -7
- data/README +2 -2
- data/Rakefile +6 -6
- data/TODO +1 -1
- data/bin/adlint +25 -16
- data/bin/adlint_chk +22 -12
- data/bin/adlint_cma +17 -12
- data/bin/adlint_sma +22 -12
- data/bin/adlintize +98 -17
- data/etc/conf.d/fallback/cinit.erb +1 -1
- data/etc/conf.d/fallback/traits.erb +37 -37
- data/etc/conf.d/i686-cygwin/cinit-gcc_4.3.4.erb +1 -1
- data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +41 -41
- data/etc/conf.d/i686-devkit/cinit-gcc_4.5.2.erb +1 -1
- data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +40 -40
- data/etc/conf.d/i686-linux/cinit-gcc_4.5.1.erb +1 -1
- data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +40 -40
- data/etc/conf.d/i686-mingw/cinit-gcc_4.6.1.erb +1 -1
- data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +40 -40
- data/etc/conf.d/noarch/GNUmakefile.erb +1 -1
- data/etc/conf.d/noarch/adlint_all_bat.erb +1 -1
- data/etc/conf.d/noarch/adlint_all_sh.erb +1 -1
- data/etc/conf.d/noarch/pinit.erb +1 -1
- data/etc/conf.d/x86_64-ubuntu_12.04/cinit-gcc_4.6.3.erb +1 -1
- data/etc/conf.d/x86_64-ubuntu_12.04/traits-gcc_4.6.3.erb +42 -42
- data/etc/mesg.d/c_builtin/en_US/messages.yml +33 -33
- data/etc/mesg.d/c_builtin/ja_JP/messages.yml +5 -5
- data/etc/mesg.d/core/en_US/messages.yml +2 -2
- data/etc/mesg.d/core/ja_JP/messages.yml +2 -2
- data/features/code_check/W0018.feature +197 -0
- data/features/code_check/W0019.feature +79 -0
- data/features/code_check/W0021.feature +81 -0
- data/features/code_check/W0023.feature +203 -0
- data/features/code_check/W0024.feature +226 -0
- data/features/code_check/W0025.feature +5 -0
- data/features/code_check/W0088.feature +2 -2
- data/features/code_check/W0109.feature +2 -2
- data/features/code_check/W0477.feature +0 -3
- data/features/code_check/W0478.feature +0 -1
- data/features/code_check/W0582.feature +3 -3
- data/features/code_check/W0583.feature +4 -7
- data/features/code_check/W0646.feature +0 -1
- data/features/code_check/W0695.feature +0 -1
- data/features/code_check/W0705.feature +8 -0
- data/features/code_check/W0723.feature +0 -1
- data/features/code_check/W0745.feature +1 -0
- data/features/code_check/W0781.feature +1 -0
- data/features/code_check/W1057.feature +141 -0
- data/features/code_check/W1058.feature +93 -0
- data/features/code_check/W1059.feature +86 -0
- data/features/code_check/W1060.feature +77 -0
- data/features/code_check/W1061.feature +143 -0
- data/features/code_check/W1062.feature +162 -0
- data/features/code_check/W1063.feature +123 -0
- data/features/code_check/W1064.feature +83 -0
- data/features/code_check/W1065.feature +82 -0
- data/features/code_check/W9003.feature +2 -0
- data/features/step_definitions/code_check_steps.rb +1 -0
- data/features/support/env.rb +16 -13
- data/lib/adlint.rb +7 -4
- data/lib/adlint/analyzer.rb +131 -157
- data/lib/adlint/annot.rb +149 -0
- data/lib/adlint/cc1.rb +57 -0
- data/lib/adlint/{c → cc1}/branch.rb +74 -62
- data/lib/adlint/{c → cc1}/builtin.rb +21 -21
- data/lib/adlint/{c → cc1}/const.rb +119 -117
- data/lib/adlint/{c → cc1}/conv.rb +76 -78
- data/lib/adlint/{c → cc1}/ctrlexpr.rb +69 -86
- data/lib/adlint/cc1/domain.rb +8103 -0
- data/lib/adlint/{c → cc1}/enum.rb +3 -3
- data/lib/adlint/{c → cc1}/environ.rb +21 -21
- data/lib/adlint/{c → cc1}/expr.rb +232 -218
- data/lib/adlint/{c → cc1}/format.rb +305 -342
- data/lib/adlint/{c → cc1}/interp.rb +269 -220
- data/lib/adlint/cc1/lexer.rb +246 -0
- data/lib/adlint/{c → cc1}/mediator.rb +78 -84
- data/lib/adlint/{c → cc1}/object.rb +261 -264
- data/lib/adlint/{c → cc1}/operator.rb +7 -7
- data/lib/adlint/{c → cc1}/option.rb +4 -3
- data/lib/adlint/{c → cc1}/parser.rb +274 -506
- data/lib/adlint/{c → cc1}/parser.y +69 -301
- data/lib/adlint/cc1/phase.rb +138 -0
- data/lib/adlint/{c → cc1}/resolver.rb +66 -78
- data/lib/adlint/{c → cc1}/scanner.rb +57 -49
- data/lib/adlint/{c → cc1}/scope.rb +3 -3
- data/lib/adlint/{c → cc1}/seqp.rb +13 -5
- data/lib/adlint/{c → cc1}/syntax.rb +819 -1122
- data/lib/adlint/{c → cc1}/type.rb +1498 -1479
- data/lib/adlint/{c → cc1}/util.rb +20 -12
- data/lib/adlint/{c → cc1}/value.rb +699 -642
- data/lib/adlint/code.rb +163 -164
- data/lib/adlint/cpp.rb +2 -2
- data/lib/adlint/cpp/asm.rb +13 -14
- data/lib/adlint/cpp/constexpr.rb +42 -38
- data/lib/adlint/cpp/constexpr.y +44 -40
- data/lib/adlint/cpp/eval.rb +435 -435
- data/lib/adlint/cpp/lexer.rb +343 -340
- data/lib/adlint/cpp/macro.rb +188 -190
- data/lib/adlint/cpp/phase.rb +66 -45
- data/lib/adlint/cpp/scanner.rb +14 -17
- data/lib/adlint/cpp/source.rb +49 -55
- data/lib/adlint/cpp/subst.rb +65 -65
- data/lib/adlint/cpp/syntax.rb +155 -275
- data/lib/adlint/cpp/util.rb +22 -19
- data/lib/adlint/driver.rb +86 -93
- data/lib/adlint/error.rb +33 -52
- data/lib/adlint/exam.rb +158 -24
- data/lib/adlint/exam/c_builtin.rb +7 -7
- data/lib/adlint/exam/c_builtin/cc1_check.rb +20522 -0
- data/lib/adlint/exam/c_builtin/cc1_check_shima.rb +957 -0
- data/lib/adlint/exam/c_builtin/cc1_code.rb +459 -0
- data/lib/adlint/exam/c_builtin/cc1_metric.rb +794 -0
- data/lib/adlint/exam/c_builtin/cpp_check.rb +486 -441
- data/lib/adlint/exam/c_builtin/cpp_check_shima.rb +36 -39
- data/lib/adlint/exam/c_builtin/cpp_code.rb +63 -65
- data/lib/adlint/exam/c_builtin/ld_check.rb +136 -129
- data/lib/adlint/exam/c_builtin/ld_metric.rb +11 -11
- data/lib/adlint/lang.rb +25 -25
- data/lib/adlint/ld.rb +2 -2
- data/lib/adlint/ld/object.rb +220 -188
- data/lib/adlint/ld/phase.rb +94 -63
- data/lib/adlint/ld/typedef.rb +22 -11
- data/lib/adlint/ld/util.rb +43 -35
- data/lib/adlint/lexer.rb +59 -56
- data/lib/adlint/location.rb +140 -0
- data/lib/adlint/memo.rb +157 -0
- data/lib/adlint/message.rb +207 -156
- data/lib/adlint/metric.rb +139 -217
- data/lib/adlint/monitor.rb +45 -43
- data/lib/adlint/phase.rb +56 -29
- data/lib/adlint/prelude.rb +66 -54
- data/lib/adlint/report.rb +253 -332
- data/lib/adlint/source.rb +26 -27
- data/lib/adlint/supp.rb +131 -0
- data/lib/adlint/symbol.rb +14 -16
- data/lib/adlint/token.rb +19 -91
- data/lib/adlint/traits.rb +242 -226
- data/lib/adlint/util.rb +116 -205
- data/lib/adlint/version.rb +8 -8
- data/share/HEADER +2 -2
- data/share/doc/developers_guide_ja.html +148 -19
- data/share/doc/developers_guide_ja.texi +141 -11
- data/share/doc/samples/GNUmakefile +1 -1
- data/share/doc/samples/adlint_traits.yml +45 -36
- data/share/doc/users_guide_en.html +1321 -1252
- data/share/doc/users_guide_en.texi +475 -408
- data/share/doc/users_guide_ja.html +1932 -1878
- data/share/doc/users_guide_ja.texi +324 -273
- data/share/sample/bison-2.5/adlint/GNUmakefile +5 -1
- data/share/sample/bison-2.5/adlint/adlint_traits.yml +38 -38
- data/share/sample/bison-2.5/adlint/lib/GNUmakefile +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_cinit.h +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_pinit.h +1 -1
- data/share/sample/bison-2.5/adlint/lib/adlint_traits.yml +50 -42
- data/share/sample/bison-2.5/adlint/src/GNUmakefile +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_cinit.h +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_pinit.h +1 -1
- data/share/sample/bison-2.5/adlint/src/adlint_traits.yml +50 -42
- data/share/sample/ctags-5.8/adlint/GNUmakefile +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_cinit.h +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_pinit.h +1 -1
- data/share/sample/ctags-5.8/adlint/adlint_traits.yml +50 -42
- data/share/sample/flex-2.5.35/adlint/GNUmakefile +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +1 -1
- data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/adlint_traits.yml +46 -38
- data/share/sample/ruby-1.9.3-p0/adlint/core/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/core/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc-trans/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/enc/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/enc/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-bigdecimal/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-continuation/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-coverage/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-curses/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-date/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-bubblebabble/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-md5/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-rmd160/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha1/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest-sha2/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-digest/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl-callback/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-dl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-etc/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fcntl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiber/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-fiddle/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-gdbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-iconv/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-console/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-nonblock/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-io-wait/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-generator/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-json-parser/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-complex/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-mathn-rational/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-nkf/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-openssl/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pathname/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-psych/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-pty/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-racc-cparse/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-readline/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-ripper/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-sdbm/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-socket/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-stringio/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-strscan/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syck/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-syslog/adlint_traits.yml +50 -42
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/GNUmakefile +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_cinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_pinit.h +1 -1
- data/share/sample/ruby-1.9.3-p0/adlint/ext-zlib/adlint_traits.yml +50 -42
- data/share/sample/screen-4.0.3/adlint/GNUmakefile +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_cinit.h +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_pinit.h +1 -1
- data/share/sample/screen-4.0.3/adlint/adlint_traits.yml +50 -42
- data/share/sample/vim-7.3/adlint/vim/GNUmakefile +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_cinit.h +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_pinit.h +1 -1
- data/share/sample/vim-7.3/adlint/vim/adlint_traits.yml +50 -42
- data/share/sample/vim-7.3/adlint/xxd/GNUmakefile +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_cinit.h +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_pinit.h +1 -1
- data/share/sample/vim-7.3/adlint/xxd/adlint_traits.yml +49 -41
- data/share/sample/zsh-4.3.15/adlint/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/adlint_traits.yml +46 -38
- data/share/sample/zsh-4.3.15/adlint/builtins/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/builtins/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/core/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/core/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/modules/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/modules/adlint_traits.yml +50 -42
- data/share/sample/zsh-4.3.15/adlint/zle/GNUmakefile +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_cinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_pinit.h +1 -1
- data/share/sample/zsh-4.3.15/adlint/zle/adlint_traits.yml +50 -42
- data/spec/adlint/{c → cc1}/ctrlexpr_spec.rb +51 -49
- data/spec/adlint/{c → cc1}/domain_spec.rb +210 -179
- data/spec/adlint/{c → cc1}/operator_spec.rb +3 -3
- data/spec/adlint/{c → cc1}/syntax_spec.rb +10 -12
- data/spec/adlint/{c → cc1}/type_spec.rb +61 -68
- data/{lib/adlint/c.rb → spec/adlint/location_spec.rb} +24 -29
- data/spec/conf.d/default_traits.yml +38 -37
- data/spec/conf.d/empty_cinit.h +1 -1
- data/spec/conf.d/empty_pinit.h +1 -1
- data/spec/conf.d/project/foo.c +0 -0
- data/spec/spec_helper.rb +2 -2
- metadata +60 -40
- data/lib/adlint/c/domain.rb +0 -7931
- data/lib/adlint/c/lexer.rb +0 -252
- data/lib/adlint/c/phase.rb +0 -135
- data/lib/adlint/exam/c_builtin/c_check.rb +0 -20745
- data/lib/adlint/exam/c_builtin/c_check_shima.rb +0 -983
- data/lib/adlint/exam/c_builtin/c_code.rb +0 -477
- 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-
|
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-
|
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,
|
56
|
-
|
57
|
-
|
58
|
-
|
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,
|
61
|
-
|
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,
|
69
|
-
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,
|
79
|
-
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,
|
98
|
-
|
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,
|
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,
|
126
|
-
|
127
|
-
validator =
|
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,
|
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.
|
189
|
+
if attr_owner.entity_name.nil? || attr_owner.entity_name.empty?
|
190
190
|
@attr_name
|
191
191
|
else
|
192
|
-
"#{attr_owner.
|
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
|
201
|
-
return true if
|
202
|
-
@errors.concat(
|
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,
|
222
|
+
def initialize(attr_name, only_int, min, max)
|
223
223
|
super(attr_name)
|
224
|
-
@only_integer =
|
225
|
-
@
|
226
|
-
@
|
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
|
-
|
231
|
+
val = target_value(attr_owner)
|
232
232
|
|
233
|
-
case
|
233
|
+
case val
|
234
234
|
when Numeric
|
235
|
-
if @only_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 @
|
240
|
+
if @min && val < @min
|
241
241
|
@errors.push("`#{qualified_attr_name(attr_owner)}' " +
|
242
|
-
"is not greater than or equal to #{@
|
242
|
+
"is not greater than or equal to #{@min}.")
|
243
243
|
return false
|
244
244
|
end
|
245
|
-
if @
|
245
|
+
if @max && @max < val
|
246
246
|
@errors.push("`#{qualified_attr_name(attr_owner)}' " +
|
247
|
-
"is not less than or equal to #{@
|
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
|
-
|
268
|
+
val = target_value(attr_owner)
|
269
269
|
|
270
|
-
unless
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
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?(
|
280
|
+
unless File.exist?(val) && File.file?(val)
|
278
281
|
@errors.push("`#{qualified_attr_name(attr_owner)}' " +
|
279
|
-
"is non-existent pathname (#{
|
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
|
-
|
297
|
+
val = target_value(attr_owner)
|
295
298
|
|
296
|
-
unless
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
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?(
|
309
|
+
unless File.exist?(val) && File.directory?(val)
|
304
310
|
@errors.push("`#{qualified_attr_name(attr_owner)}' " +
|
305
|
-
"is non-existent pathname (#{
|
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
|
-
|
321
|
+
val = target_value(attr_owner)
|
316
322
|
|
317
|
-
bad_paths =
|
318
|
-
File.exist?(
|
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 |
|
328
|
+
bad_paths.each do |path|
|
323
329
|
@errors.push("`#{qualified_attr_name(attr_owner)}' " +
|
324
|
-
"contains non-existent pathname (#{
|
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,
|
340
|
+
def initialize(attr_name, vals)
|
335
341
|
super(attr_name)
|
336
|
-
@values =
|
342
|
+
@values = vals
|
337
343
|
end
|
338
344
|
|
339
345
|
def execute(attr_owner)
|
340
346
|
return false unless super
|
341
|
-
|
347
|
+
val = target_value(attr_owner)
|
342
348
|
|
343
|
-
unless @values.include?(
|
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
|
-
|
376
|
+
val = target_value(attr_owner)
|
371
377
|
|
372
|
-
if
|
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 =
|
384
|
+
bad_exams = val.reject { |exam_pkg| exam_pkg.load }
|
379
385
|
|
380
386
|
unless bad_exams.empty?
|
381
|
-
bad_exams.each do |
|
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
|
-
"(#{
|
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,
|
400
|
+
def initialize(attr_name, msg, validator)
|
395
401
|
super(attr_name)
|
396
|
-
@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
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
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(
|
430
|
-
@
|
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
|
-
|
509
|
-
|
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
|
|