adlint 1.0.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +3 -2
- data/ChangeLog +208 -63
- data/MANIFEST +4 -0
- data/NEWS +24 -5
- data/etc/conf.d/fallback/traits.erb +1 -1
- data/etc/conf.d/i686-cygwin/traits-gcc_4.3.4.erb +1 -1
- data/etc/conf.d/i686-devkit/traits-gcc_4.5.2.erb +1 -1
- data/etc/conf.d/i686-linux/traits-gcc_4.5.1.erb +1 -1
- data/etc/conf.d/i686-mingw/traits-gcc_4.6.1.erb +1 -1
- data/etc/mesg.d/en_US/messages.yml +3 -3
- data/etc/mesg.d/ja_JP/messages.yml +4 -4
- data/lib/adlint/c/builtin.rb +3 -3
- data/lib/adlint/c/ctrlexpr.rb +7 -11
- data/lib/adlint/c/expr.rb +548 -363
- data/lib/adlint/c/interp.rb +233 -525
- data/lib/adlint/c/mediator.rb +1 -0
- data/lib/adlint/c/message.rb +144 -1
- data/lib/adlint/c/object.rb +15 -6
- data/lib/adlint/c/parser.rb +170 -128
- data/lib/adlint/c/parser.y +36 -0
- data/lib/adlint/c/phase.rb +4 -0
- data/lib/adlint/c/seqp.rb +72 -0
- data/lib/adlint/c/syntax.rb +254 -3
- data/lib/adlint/c.rb +1 -0
- data/lib/adlint/cpp/code.rb +2 -2
- data/lib/adlint/cpp/eval.rb +29 -13
- data/lib/adlint/cpp/message.rb +71 -70
- data/lib/adlint/cpp/message_shima.rb +100 -0
- data/lib/adlint/cpp/phase.rb +4 -0
- data/lib/adlint/cpp/syntax.rb +5 -1
- data/lib/adlint/cpp.rb +1 -0
- data/lib/adlint/message.rb +6 -3
- data/lib/adlint/traits.rb +1 -1
- data/lib/adlint/version.rb +5 -5
- data/share/demo/Makefile +3 -1
- data/share/demo/bad_line/bad_line.c +27 -0
- data/share/demo/sequence_point/sequence_point.c +31 -0
- data/share/doc/adlint_on_vim_en.png +0 -0
- data/share/doc/adlint_on_vim_ja.png +0 -0
- data/share/doc/developers_guide_ja.html +3 -3
- data/share/doc/developers_guide_ja.texi +1 -1
- data/share/doc/users_guide_en.html +3118 -41
- data/share/doc/users_guide_en.texi +3090 -37
- data/share/doc/users_guide_ja.html +3120 -47
- data/share/doc/users_guide_ja.texi +3106 -65
- data/share/sample/ctags-5.8/adlint/GNUmakefile +13 -1
- data/share/sample/ctags-5.8/adlint/adlint_cinit.h +14 -2
- data/share/sample/ctags-5.8/adlint/adlint_pinit.h +14 -4
- data/share/sample/ctags-5.8/adlint/adlint_traits.yml +14 -1
- data/share/sample/flex-2.5.35/adlint/GNUmakefile +13 -1
- data/share/sample/flex-2.5.35/adlint/adlint_cinit.h +14 -2
- data/share/sample/flex-2.5.35/adlint/adlint_pinit.h +14 -4
- data/share/sample/flex-2.5.35/adlint/adlint_traits.yml +14 -1
- metadata +6 -2
data/lib/adlint/cpp/eval.rb
CHANGED
@@ -377,9 +377,9 @@ module Cpp #:nodoc:
|
|
377
377
|
unless new_line = context.next_token and new_line.type == :NEW_LINE
|
378
378
|
return nil
|
379
379
|
end
|
380
|
-
|
381
|
-
return nil if tokens.empty?
|
382
|
-
case parameter = tokens.map { |t| t.value }.join
|
380
|
+
PPTokensNormalizer.normalize(pp_tokens, context)
|
381
|
+
return nil if pp_tokens.tokens.empty?
|
382
|
+
case parameter = pp_tokens.tokens.map { |t| t.value }.join
|
383
383
|
when /\A".*"\z/
|
384
384
|
user_include_line = UserIncludeLine.new(
|
385
385
|
keyword, Token.new(:USR_HEADER_NAME, parameter,
|
@@ -405,9 +405,9 @@ module Cpp #:nodoc:
|
|
405
405
|
unless new_line = context.next_token and new_line.type == :NEW_LINE
|
406
406
|
return nil
|
407
407
|
end
|
408
|
-
|
409
|
-
return nil if tokens.empty?
|
410
|
-
case parameter = tokens.map { |t| t.value }.join
|
408
|
+
PPTokensNormalizer.normalize(pp_tokens, context)
|
409
|
+
return nil if pp_tokens.tokens.empty?
|
410
|
+
case parameter = pp_tokens.tokens.map { |t| t.value }.join
|
411
411
|
when /\A".*"\z/
|
412
412
|
user_include_next_line = UserIncludeNextLine.new(
|
413
413
|
keyword, Token.new(:USR_HEADER_NAME, parameter,
|
@@ -498,12 +498,27 @@ module Cpp #:nodoc:
|
|
498
498
|
|
499
499
|
def line_line(context)
|
500
500
|
keyword = context.next_token
|
501
|
-
|
502
|
-
return nil
|
503
|
-
end
|
501
|
+
pp_tokens = pp_tokens(context)
|
504
502
|
unless new_line = context.next_token and new_line.type == :NEW_LINE
|
505
503
|
return nil
|
506
504
|
end
|
505
|
+
|
506
|
+
# NOTE: The ISO C99 standard saids;
|
507
|
+
#
|
508
|
+
# 6.10.4 Line control
|
509
|
+
#
|
510
|
+
# Semantics
|
511
|
+
#
|
512
|
+
# 5 A preprocessing directive of the form
|
513
|
+
# # line pp-tokens new-line
|
514
|
+
# that does not match one of the two previous forms is permitted. The
|
515
|
+
# preprocessing tokens after line on the directive are processed just
|
516
|
+
# as in normal text (each identifier currently defined as a macro name
|
517
|
+
# is replaced by its replacement list of preprocessing tokens). The
|
518
|
+
# directive resulting after all replacements shall match one of the two
|
519
|
+
# previous forms and is then processed as appropriate.
|
520
|
+
PPTokensNormalizer.normalize(pp_tokens, context) if pp_tokens
|
521
|
+
|
507
522
|
LineLine.new(keyword, pp_tokens)
|
508
523
|
end
|
509
524
|
|
@@ -523,7 +538,8 @@ module Cpp #:nodoc:
|
|
523
538
|
return nil
|
524
539
|
end
|
525
540
|
pragma_line = PragmaLine.new(keyword, pp_tokens)
|
526
|
-
if pp_tokens.tokens.size == 1 &&
|
541
|
+
if pp_tokens && pp_tokens.tokens.size == 1 &&
|
542
|
+
pp_tokens.tokens.first.value == "once"
|
527
543
|
context.once_set.add(keyword.location.fpath)
|
528
544
|
else
|
529
545
|
notify_unknown_pragma_evaled(pragma_line)
|
@@ -912,15 +928,15 @@ module Cpp #:nodoc:
|
|
912
928
|
module PPTokensNormalizer
|
913
929
|
def normalize(pp_tokens, context)
|
914
930
|
context.macro_table.replace(pp_tokens.tokens)
|
915
|
-
pp_tokens
|
931
|
+
pp_tokens
|
916
932
|
end
|
917
933
|
module_function :normalize
|
918
934
|
end
|
919
935
|
|
920
936
|
module ExpressionNormalizer
|
921
937
|
def normalize(pp_tokens, context, preprocessor = nil)
|
922
|
-
|
923
|
-
const_expr = ConstantExpression.new(context, tokens)
|
938
|
+
PPTokensNormalizer.normalize(pp_tokens, context)
|
939
|
+
const_expr = ConstantExpression.new(context, pp_tokens.tokens)
|
924
940
|
if preprocessor
|
925
941
|
const_expr.on_illformed_defined_op_found +=
|
926
942
|
preprocessor.method(:notify_illformed_defined_op_found)
|
data/lib/adlint/cpp/message.rb
CHANGED
@@ -37,8 +37,8 @@ module AdLint #:nodoc:
|
|
37
37
|
module Cpp #:nodoc:
|
38
38
|
|
39
39
|
class W0001 < PassiveMessageDetection
|
40
|
-
# NOTE: W0001 may be duplicative when the
|
41
|
-
#
|
40
|
+
# NOTE: W0001 may be duplicative when the same header which has the deeply
|
41
|
+
# grouped expression is included twice or more.
|
42
42
|
ensure_uniqueness_of :W0001
|
43
43
|
|
44
44
|
def initialize(context)
|
@@ -190,8 +190,8 @@ module Cpp #:nodoc:
|
|
190
190
|
end
|
191
191
|
|
192
192
|
class W0056 < PassiveMessageDetection
|
193
|
-
# NOTE: W0056 may be duplicative when the
|
194
|
-
#
|
193
|
+
# NOTE: W0056 may be duplicative when the same header which has macro
|
194
|
+
# definition with too many parameters is included twice or more.
|
195
195
|
ensure_uniqueness_of :W0056
|
196
196
|
|
197
197
|
def initialize(context)
|
@@ -210,8 +210,8 @@ module Cpp #:nodoc:
|
|
210
210
|
end
|
211
211
|
|
212
212
|
class W0057 < PassiveMessageDetection
|
213
|
-
# NOTE: W0057 may be duplicative when the
|
214
|
-
#
|
213
|
+
# NOTE: W0057 may be duplicative when the same header which has macro call
|
214
|
+
# with too many arguments is included twice or more.
|
215
215
|
ensure_uniqueness_of :W0057
|
216
216
|
|
217
217
|
def initialize(context)
|
@@ -227,8 +227,8 @@ module Cpp #:nodoc:
|
|
227
227
|
end
|
228
228
|
|
229
229
|
class W0059 < PassiveMessageDetection
|
230
|
-
# NOTE: W0059 may be duplicative when the
|
231
|
-
#
|
230
|
+
# NOTE: W0059 may be duplicative when the same header which has carriage
|
231
|
+
# return at end of lines is included twice or more.
|
232
232
|
ensure_uniqueness_of :W0059
|
233
233
|
|
234
234
|
def initialize(context)
|
@@ -239,8 +239,8 @@ module Cpp #:nodoc:
|
|
239
239
|
end
|
240
240
|
|
241
241
|
class W0060 < PassiveMessageDetection
|
242
|
-
# NOTE: W0060 may be duplicative when the
|
243
|
-
#
|
242
|
+
# NOTE: W0060 may be duplicative when the same header which has the
|
243
|
+
# end-of-file mark is included twice or more.
|
244
244
|
ensure_uniqueness_of :W0060
|
245
245
|
|
246
246
|
def initialize(context)
|
@@ -251,9 +251,9 @@ module Cpp #:nodoc:
|
|
251
251
|
end
|
252
252
|
|
253
253
|
class W0061 < PassiveMessageDetection
|
254
|
-
# NOTE: W0061 may be duplicative when the
|
255
|
-
#
|
256
|
-
#
|
254
|
+
# NOTE: W0061 may be duplicative when the same header which has the token
|
255
|
+
# sequence of the compiler specific extension is included twice or
|
256
|
+
# more.
|
257
257
|
ensure_uniqueness_of :W0061
|
258
258
|
|
259
259
|
def initialize(context)
|
@@ -264,8 +264,8 @@ module Cpp #:nodoc:
|
|
264
264
|
end
|
265
265
|
|
266
266
|
class W0069 < PassiveMessageDetection
|
267
|
-
# NOTE: W0069 may be duplicative when the
|
268
|
-
#
|
267
|
+
# NOTE: W0069 may be duplicative when the same header which has the nested
|
268
|
+
# block comment is included twice or more.
|
269
269
|
ensure_uniqueness_of :W0069
|
270
270
|
|
271
271
|
def initialize(context)
|
@@ -276,9 +276,9 @@ module Cpp #:nodoc:
|
|
276
276
|
end
|
277
277
|
|
278
278
|
class W0072 < PassiveMessageDetection
|
279
|
-
# NOTE: W0072 may be duplicative when the
|
280
|
-
#
|
281
|
-
#
|
279
|
+
# NOTE: W0072 may be duplicative when the same header which has non
|
280
|
+
# basic-source-character in the #include directive is included twice
|
281
|
+
# or more.
|
282
282
|
ensure_uniqueness_of :W0072
|
283
283
|
|
284
284
|
def initialize(context)
|
@@ -303,8 +303,8 @@ module Cpp #:nodoc:
|
|
303
303
|
end
|
304
304
|
|
305
305
|
class W0073 < PassiveMessageDetection
|
306
|
-
# NOTE: W0073 may be duplicative when the
|
307
|
-
#
|
306
|
+
# NOTE: W0073 may be duplicative when the same header without the
|
307
|
+
# include-guard is included twice or more.
|
308
308
|
ensure_uniqueness_of :W0073
|
309
309
|
|
310
310
|
def initialize(context)
|
@@ -381,8 +381,8 @@ module Cpp #:nodoc:
|
|
381
381
|
end
|
382
382
|
|
383
383
|
class W0442 < PassiveMessageDetection
|
384
|
-
# NOTE: W0442 may be duplicative when the
|
385
|
-
#
|
384
|
+
# NOTE: W0442 may be duplicative when the same header which has
|
385
|
+
# function-like macro definitions is included twice or more.
|
386
386
|
ensure_uniqueness_of :W0442
|
387
387
|
|
388
388
|
def initialize(context)
|
@@ -410,8 +410,9 @@ module Cpp #:nodoc:
|
|
410
410
|
end
|
411
411
|
|
412
412
|
class W0443 < PassiveMessageDetection
|
413
|
-
# NOTE: W0443 may be duplicative when the
|
414
|
-
#
|
413
|
+
# NOTE: W0443 may be duplicative when the same header which has
|
414
|
+
# functionizable function-like macro definitions is included twice or
|
415
|
+
# more.
|
415
416
|
ensure_uniqueness_of :W0443
|
416
417
|
|
417
418
|
def initialize(context)
|
@@ -475,9 +476,9 @@ module Cpp #:nodoc:
|
|
475
476
|
end
|
476
477
|
|
477
478
|
class W0444 < PassiveMessageDetection
|
478
|
-
# NOTE: W0444 may be duplicative when the
|
479
|
-
#
|
480
|
-
#
|
479
|
+
# NOTE: W0444 may be duplicative when the same header which has the
|
480
|
+
# function-like macro definition with `#' and `##' operators is
|
481
|
+
# included twice or more.
|
481
482
|
ensure_uniqueness_of :W0444
|
482
483
|
|
483
484
|
def initialize(context)
|
@@ -510,9 +511,9 @@ module Cpp #:nodoc:
|
|
510
511
|
end
|
511
512
|
|
512
513
|
class W0445 < PassiveMessageDetection
|
513
|
-
# NOTE: W0445 may be duplicative when the
|
514
|
-
#
|
515
|
-
#
|
514
|
+
# NOTE: W0445 may be duplicative when the same header which has the
|
515
|
+
# function-like macro definition with two or more `##' operators is
|
516
|
+
# included twice or more.
|
516
517
|
ensure_uniqueness_of :W0445
|
517
518
|
|
518
519
|
def initialize(context)
|
@@ -541,9 +542,9 @@ module Cpp #:nodoc:
|
|
541
542
|
end
|
542
543
|
|
543
544
|
class W0477 < PassiveMessageDetection
|
544
|
-
# NOTE: W0477 may be duplicative when the
|
545
|
-
#
|
546
|
-
#
|
545
|
+
# NOTE: W0477 may be duplicative when the same header which has the macro
|
546
|
+
# definition with unbalanced grouping tokens is included twice or
|
547
|
+
# more.
|
547
548
|
ensure_uniqueness_of :W0477
|
548
549
|
|
549
550
|
def initialize(context)
|
@@ -585,8 +586,8 @@ module Cpp #:nodoc:
|
|
585
586
|
end
|
586
587
|
|
587
588
|
class W0478 < PassiveMessageDetection
|
588
|
-
# NOTE: W0478 may be duplicative when the
|
589
|
-
#
|
589
|
+
# NOTE: W0478 may be duplicative when the same header which causes this
|
590
|
+
# warning is included twice or more.
|
590
591
|
ensure_uniqueness_of :W0478
|
591
592
|
|
592
593
|
def initialize(context)
|
@@ -614,8 +615,8 @@ module Cpp #:nodoc:
|
|
614
615
|
end
|
615
616
|
|
616
617
|
class W0479 < PassiveMessageDetection
|
617
|
-
# NOTE: W0479 may be duplicative when the
|
618
|
-
#
|
618
|
+
# NOTE: W0479 may be duplicative when the same header which has
|
619
|
+
# typedef-able macro definition is included twice or more.
|
619
620
|
ensure_uniqueness_of :W0479
|
620
621
|
|
621
622
|
def initialize(context)
|
@@ -635,8 +636,8 @@ module Cpp #:nodoc:
|
|
635
636
|
end
|
636
637
|
|
637
638
|
class W0480 < PassiveMessageDetection
|
638
|
-
# NOTE: W0480 may be duplicative when the
|
639
|
-
#
|
639
|
+
# NOTE: W0480 may be duplicative when the same header which causes this
|
640
|
+
# warning is included twice or more.
|
640
641
|
ensure_uniqueness_of :W0480
|
641
642
|
|
642
643
|
def initialize(context)
|
@@ -659,8 +660,8 @@ module Cpp #:nodoc:
|
|
659
660
|
end
|
660
661
|
|
661
662
|
class W0481 < PassiveMessageDetection
|
662
|
-
# NOTE: W0481 may be duplicative when the
|
663
|
-
#
|
663
|
+
# NOTE: W0481 may be duplicative when the same header which causes this
|
664
|
+
# warning is included twice or more.
|
664
665
|
ensure_uniqueness_of :W0481
|
665
666
|
|
666
667
|
def initialize(context)
|
@@ -681,8 +682,8 @@ module Cpp #:nodoc:
|
|
681
682
|
end
|
682
683
|
|
683
684
|
class W0482 < PassiveMessageDetection
|
684
|
-
# NOTE: W0482 may be duplicative when the
|
685
|
-
#
|
685
|
+
# NOTE: W0482 may be duplicative when the same header which causes this
|
686
|
+
# warning is included twice or more.
|
686
687
|
ensure_uniqueness_of :W0482
|
687
688
|
|
688
689
|
def initialize(context)
|
@@ -716,8 +717,8 @@ module Cpp #:nodoc:
|
|
716
717
|
end
|
717
718
|
|
718
719
|
class W0483 < PassiveMessageDetection
|
719
|
-
# NOTE: W0483 may be duplicative when the
|
720
|
-
#
|
720
|
+
# NOTE: W0483 may be duplicative when the same header which causes this
|
721
|
+
# warning is included twice or more.
|
721
722
|
ensure_uniqueness_of :W0483
|
722
723
|
|
723
724
|
def initialize(context)
|
@@ -737,8 +738,8 @@ module Cpp #:nodoc:
|
|
737
738
|
end
|
738
739
|
|
739
740
|
class W0511 < PassiveMessageDetection
|
740
|
-
# NOTE: W0511 may be duplicative when the
|
741
|
-
#
|
741
|
+
# NOTE: W0511 may be duplicative when the same header which causes this
|
742
|
+
# warning is included twice or more.
|
742
743
|
ensure_uniqueness_of :W0511
|
743
744
|
|
744
745
|
def initialize(context)
|
@@ -749,8 +750,8 @@ module Cpp #:nodoc:
|
|
749
750
|
end
|
750
751
|
|
751
752
|
class W0528 < PassiveMessageDetection
|
752
|
-
# NOTE: W0528 may be duplicative when the
|
753
|
-
#
|
753
|
+
# NOTE: W0528 may be duplicative when the same header which causes this
|
754
|
+
# warning is included twice or more.
|
754
755
|
ensure_uniqueness_of :W0528
|
755
756
|
|
756
757
|
def initialize(context)
|
@@ -771,8 +772,8 @@ module Cpp #:nodoc:
|
|
771
772
|
end
|
772
773
|
|
773
774
|
class W0549 < PassiveMessageDetection
|
774
|
-
# NOTE: W0549 may be duplicative when the
|
775
|
-
#
|
775
|
+
# NOTE: W0549 may be duplicative when the same header which causes this
|
776
|
+
# warning is included twice or more.
|
776
777
|
ensure_uniqueness_of :W0549
|
777
778
|
|
778
779
|
def initialize(context)
|
@@ -811,8 +812,8 @@ module Cpp #:nodoc:
|
|
811
812
|
end
|
812
813
|
|
813
814
|
class W0554 < PassiveMessageDetection
|
814
|
-
# NOTE: W0554 may be duplicative when the
|
815
|
-
#
|
815
|
+
# NOTE: W0554 may be duplicative when the same header which causes this
|
816
|
+
# warning is included twice or more.
|
816
817
|
ensure_uniqueness_of :W0554
|
817
818
|
|
818
819
|
def initialize(context)
|
@@ -824,13 +825,13 @@ module Cpp #:nodoc:
|
|
824
825
|
private
|
825
826
|
def check(pragma_line)
|
826
827
|
W(:W0554, pragma_line.location,
|
827
|
-
pragma_line.pp_tokens
|
828
|
+
pragma_line.pp_tokens ? pragma_line.pp_tokens.to_s : "")
|
828
829
|
end
|
829
830
|
end
|
830
831
|
|
831
832
|
class W0574 < PassiveMessageDetection
|
832
|
-
# NOTE: W0574 may be duplicative when the
|
833
|
-
#
|
833
|
+
# NOTE: W0574 may be duplicative when the same header which causes this
|
834
|
+
# warning is included twice or more.
|
834
835
|
ensure_uniqueness_of :W0574
|
835
836
|
|
836
837
|
def initialize(context)
|
@@ -859,8 +860,8 @@ module Cpp #:nodoc:
|
|
859
860
|
end
|
860
861
|
|
861
862
|
class W0575 < PassiveMessageDetection
|
862
|
-
# NOTE: W0575 may be duplicative when the
|
863
|
-
#
|
863
|
+
# NOTE: W0575 may be duplicative when the same header which causes this
|
864
|
+
# warning is included twice or more.
|
864
865
|
ensure_uniqueness_of :W0575
|
865
866
|
|
866
867
|
def initialize(context)
|
@@ -889,8 +890,8 @@ module Cpp #:nodoc:
|
|
889
890
|
end
|
890
891
|
|
891
892
|
class W0576 < PassiveMessageDetection
|
892
|
-
# NOTE: W0576 may be duplicative when the
|
893
|
-
#
|
893
|
+
# NOTE: W0576 may be duplicative when the same header which causes this
|
894
|
+
# warning is included twice or more.
|
894
895
|
ensure_uniqueness_of :W0576
|
895
896
|
|
896
897
|
def initialize(context)
|
@@ -914,8 +915,8 @@ module Cpp #:nodoc:
|
|
914
915
|
end
|
915
916
|
|
916
917
|
class W0577 < PassiveMessageDetection
|
917
|
-
# NOTE: W0577 may be duplicative when the
|
918
|
-
#
|
918
|
+
# NOTE: W0577 may be duplicative when the same header which causes this
|
919
|
+
# warning is included twice or more.
|
919
920
|
ensure_uniqueness_of :W0577
|
920
921
|
|
921
922
|
def initialize(context)
|
@@ -935,8 +936,8 @@ module Cpp #:nodoc:
|
|
935
936
|
end
|
936
937
|
|
937
938
|
class W0696 < PassiveMessageDetection
|
938
|
-
# NOTE: W0696 may be duplicative when the
|
939
|
-
#
|
939
|
+
# NOTE: W0696 may be duplicative when the same header which has references
|
940
|
+
# to the undefined macro is included twice or more.
|
940
941
|
ensure_uniqueness_of :W0696
|
941
942
|
|
942
943
|
def initialize(context)
|
@@ -948,8 +949,8 @@ module Cpp #:nodoc:
|
|
948
949
|
end
|
949
950
|
|
950
951
|
class W0804 < PassiveMessageDetection
|
951
|
-
# NOTE: W0804 may be duplicative when the
|
952
|
-
#
|
952
|
+
# NOTE: W0804 may be duplicative when the same header which causes this
|
953
|
+
# warning is included twice or more.
|
953
954
|
ensure_uniqueness_of :W0804
|
954
955
|
|
955
956
|
def initialize(context)
|
@@ -960,8 +961,8 @@ module Cpp #:nodoc:
|
|
960
961
|
end
|
961
962
|
|
962
963
|
class W0831 < PassiveMessageDetection
|
963
|
-
# NOTE: W0831 may be duplicative when the
|
964
|
-
#
|
964
|
+
# NOTE: W0831 may be duplicative when the same header which causes this
|
965
|
+
# warning is included twice or more.
|
965
966
|
ensure_uniqueness_of :W0831
|
966
967
|
|
967
968
|
def initialize(context)
|
@@ -977,8 +978,8 @@ module Cpp #:nodoc:
|
|
977
978
|
end
|
978
979
|
|
979
980
|
class W9002 < PassiveMessageDetection
|
980
|
-
# NOTE: W9002 may be duplicative when the
|
981
|
-
#
|
981
|
+
# NOTE: W9002 may be duplicative when the same header which has no newline
|
982
|
+
# at end of the file is included twice or more.
|
982
983
|
ensure_uniqueness_of :W9002
|
983
984
|
|
984
985
|
def initialize(context)
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# Message detection classes for C preprocessor language.
|
2
|
+
#
|
3
|
+
# Author:: Rie Shima <mailto:rkakuuchi@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:: Rie Shima <mailto:rkakuuchi@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/report"
|
33
|
+
require "adlint/message"
|
34
|
+
|
35
|
+
module AdLint #:nodoc:
|
36
|
+
module Cpp #:nodoc:
|
37
|
+
|
38
|
+
class W0688 < PassiveMessageDetection
|
39
|
+
# NOTE: W0688 may be duplicative when the same header which causes this
|
40
|
+
# warning is included twice or more.
|
41
|
+
ensure_uniqueness_of :W0688
|
42
|
+
|
43
|
+
def initialize(context)
|
44
|
+
super
|
45
|
+
visitor = context[:cpp_visitor]
|
46
|
+
visitor.enter_line_line += method(:check)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def check(line_line)
|
51
|
+
if line_no_arg = line_no_argument(line_line)
|
52
|
+
line_no = Integer(line_no_arg.value)
|
53
|
+
unless line_no > 0 && line_no < 32768
|
54
|
+
W(:W0688, line_no_arg.location)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue
|
58
|
+
end
|
59
|
+
|
60
|
+
def line_no_argument(line_line)
|
61
|
+
line_line.pp_tokens ? line_line.pp_tokens.tokens.first : nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class W0689 < W0688
|
66
|
+
# NOTE: W0689 may be duplicative when the same header which causes this
|
67
|
+
# warning is included twice or more.
|
68
|
+
ensure_uniqueness_of :W0689
|
69
|
+
|
70
|
+
private
|
71
|
+
def check(line_line)
|
72
|
+
if fname_arg = file_name_argument(line_line)
|
73
|
+
unless fname_arg.value =~ /\A".*"\z/
|
74
|
+
W(:W0689, fname_arg.location)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def file_name_argument(line_line)
|
80
|
+
line_line.pp_tokens ? line_line.pp_tokens.tokens[1] : nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class W0690 < W0688
|
85
|
+
# NOTE: W0690 may be duplicative when the same header which causes this
|
86
|
+
# warning is included twice or more.
|
87
|
+
ensure_uniqueness_of :W0690
|
88
|
+
|
89
|
+
private
|
90
|
+
def check(line_line)
|
91
|
+
if line_no_arg = line_no_argument(line_line)
|
92
|
+
Integer(line_no_arg.value)
|
93
|
+
end
|
94
|
+
rescue
|
95
|
+
W(:W0690, line_no_arg.location)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
data/lib/adlint/cpp/phase.rb
CHANGED
@@ -35,6 +35,7 @@ require "adlint/cpp/lexer"
|
|
35
35
|
require "adlint/cpp/eval"
|
36
36
|
require "adlint/cpp/code"
|
37
37
|
require "adlint/cpp/message"
|
38
|
+
require "adlint/cpp/message_shima"
|
38
39
|
require "adlint/cpp/util"
|
39
40
|
|
40
41
|
module AdLint #:nodoc:
|
@@ -99,6 +100,9 @@ module Cpp #:nodoc:
|
|
99
100
|
W0575.new(context),
|
100
101
|
W0576.new(context),
|
101
102
|
W0577.new(context),
|
103
|
+
W0688.new(context),
|
104
|
+
W0689.new(context),
|
105
|
+
W0690.new(context),
|
102
106
|
W0696.new(context),
|
103
107
|
W0804.new(context),
|
104
108
|
W0831.new(context),
|
data/lib/adlint/cpp/syntax.rb
CHANGED
@@ -678,8 +678,12 @@ module Cpp #:nodoc:
|
|
678
678
|
end
|
679
679
|
end
|
680
680
|
|
681
|
+
def to_s
|
682
|
+
@tokens.map { |t| t.value }.join(" ")
|
683
|
+
end
|
684
|
+
|
681
685
|
def inspect(indent = 0)
|
682
|
-
" " * indent +
|
686
|
+
" " * indent + self.to_s
|
683
687
|
end
|
684
688
|
end
|
685
689
|
|
data/lib/adlint/cpp.rb
CHANGED
data/lib/adlint/message.rb
CHANGED
@@ -312,9 +312,12 @@ module AdLint #:nodoc:
|
|
312
312
|
# === RETURN VALUE
|
313
313
|
# None.
|
314
314
|
def validate_version(version)
|
315
|
-
|
316
|
-
|
317
|
-
|
315
|
+
# NOTE: Version field of the message catalog does not mean the schema
|
316
|
+
# version of the catalog file, but a revision number of the catalog
|
317
|
+
# contents.
|
318
|
+
# When AdLint is installed normally, the schema version of the
|
319
|
+
# catalog is always valid. So, schema version validation is
|
320
|
+
# unnecessary.
|
318
321
|
end
|
319
322
|
end
|
320
323
|
|
data/lib/adlint/traits.rb
CHANGED
data/lib/adlint/version.rb
CHANGED
@@ -32,16 +32,16 @@
|
|
32
32
|
module AdLint #:nodoc:
|
33
33
|
|
34
34
|
MAJOR_VERSION = 1
|
35
|
-
MINOR_VERSION =
|
35
|
+
MINOR_VERSION = 2
|
36
36
|
PATCH_VERSION = 0
|
37
|
-
RELEASE_DATE = "2012-
|
37
|
+
RELEASE_DATE = "2012-03-21"
|
38
|
+
|
39
|
+
TRAITS_SCHEMA_VERSION = "1.0.0"
|
38
40
|
|
39
41
|
SHORT_VERSION = "#{MAJOR_VERSION}.#{MINOR_VERSION}.#{PATCH_VERSION}"
|
40
42
|
|
41
43
|
VERSION = "#{SHORT_VERSION} (#{RELEASE_DATE})"
|
42
44
|
|
43
|
-
SCHEMA_VERSION_RE = /\A#{MAJOR_VERSION}\.#{MINOR_VERSION}\.\d+\z/
|
44
|
-
|
45
45
|
COPYRIGHT = <<EOS
|
46
46
|
___ ____ __ ___ _________
|
47
47
|
/ | / _ |/ / / / | / /__ __/ Source Code Static Analyzer
|
@@ -64,7 +64,7 @@ module AdLint #:nodoc:
|
|
64
64
|
EOS
|
65
65
|
|
66
66
|
AUTHOR = <<EOS
|
67
|
-
Written by Yutaka Yanoh and Code Quality Assessment Team of OGIS-RI Co.,Ltd.
|
67
|
+
Written by Yutaka Yanoh, Rie Shima and Code Quality Assessment Team of OGIS-RI Co.,Ltd.
|
68
68
|
|
69
69
|
EOS
|
70
70
|
|
data/share/demo/Makefile
CHANGED
@@ -10,6 +10,7 @@ bad_const \
|
|
10
10
|
bad_conv \
|
11
11
|
bad_indent \
|
12
12
|
bad_init \
|
13
|
+
bad_line \
|
13
14
|
bad_macro \
|
14
15
|
bitwise_expr \
|
15
16
|
call_by_value \
|
@@ -25,8 +26,8 @@ funptr_cast \
|
|
25
26
|
goto_stmt \
|
26
27
|
id_hiding \
|
27
28
|
ill_defined \
|
28
|
-
implicit_int \
|
29
29
|
implicit_conv \
|
30
|
+
implicit_int \
|
30
31
|
incomplete_type \
|
31
32
|
indirect_recur \
|
32
33
|
intro_demo \
|
@@ -58,6 +59,7 @@ output_by_param \
|
|
58
59
|
overflow \
|
59
60
|
press_release \
|
60
61
|
retn_lvar_addr \
|
62
|
+
sequence_point \
|
61
63
|
shift_expr \
|
62
64
|
should_be_typedef \
|
63
65
|
static_paths \
|