adlint 1.0.0 → 1.2.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.
- 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 \
|