adlint 3.2.10 → 3.2.12
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.
- checksums.yaml +4 -4
- data/ChangeLog +59 -0
- data/MANIFEST +1 -0
- data/NEWS +13 -3
- data/etc/mesg.d/c_builtin/en_US/messages.yml +1 -1
- data/etc/mesg.d/c_builtin/ja_JP/messages.yml +1 -1
- data/etc/mesg.d/core/en_US/messages.yml +1 -1
- data/etc/mesg.d/core/ja_JP/messages.yml +1 -1
- data/features/code_check/W0067.feature +74 -0
- data/features/code_check/W0801.feature +2 -0
- data/lib/adlint/cc1/lexer.rb +1 -1
- data/lib/adlint/cc1/object.rb +15 -6
- data/lib/adlint/cc1/parser.rb +1 -1
- data/lib/adlint/cc1/resolver.rb +6 -4
- data/lib/adlint/cc1/syntax.rb +27 -8
- data/lib/adlint/cc1/type.rb +23 -11
- data/lib/adlint/cc1/value.rb +1 -1
- data/lib/adlint/cpp/constexpr.rb +1 -1
- data/lib/adlint/cpp/eval.rb +1 -1
- data/lib/adlint/cpp/macro.rb +1 -1
- data/lib/adlint/cpp/subst.rb +1 -1
- data/lib/adlint/exam.rb +3 -0
- data/lib/adlint/exam/c_builtin/cc1_check.rb +37 -29
- data/lib/adlint/ld/object.rb +48 -41
- data/lib/adlint/ld/typedef.rb +7 -6
- data/lib/adlint/metric.rb +5 -1
- data/lib/adlint/version.rb +2 -2
- data/share/doc/c99gram.pdf +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 +3 -3
- data/share/doc/users_guide_en.texi +1 -1
- data/share/doc/users_guide_ja.html +3 -3
- data/share/doc/users_guide_ja.texi +1 -1
- data/spec/adlint/cc1/syntax_spec.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa76355096835da637b733c8206bf5d759f01147
|
4
|
+
data.tar.gz: 8fa414fe9df4b715c950d45c07ace9d5a1356ac4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb322d1d2e7d67215b23706ba00f3509386f2ba06f661816001867fa7513d63e34498afbb4cb1824591871b91a3ae3d4119ed6dd3127491719030c98e33c291c
|
7
|
+
data.tar.gz: 19c980d7ef83983142b54430609941a6fefec254cbb674f3dac9041db64bcd093b60081ca555b4d887cd4e55ff87b395c0155b684a8fb6de75f13f65f8846db3
|
data/ChangeLog
CHANGED
@@ -1,3 +1,62 @@
|
|
1
|
+
Sat Apr 12 09:08:17 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
|
+
|
3
|
+
* release.ga : 3.2.12
|
4
|
+
- Fix the type and object model in order to correctly manage unnamed
|
5
|
+
struct or union members.
|
6
|
+
- Add examination package initializer.
|
7
|
+
- Revise behavior of the CMA code structure collection so that an
|
8
|
+
optional examination package can output its own special
|
9
|
+
met-records.
|
10
|
+
|
11
|
+
Thu Apr 10 18:48:43 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
12
|
+
|
13
|
+
* release.rc : 3.2.11
|
14
|
+
- Fix the type and object model in order to correctly manage unnamed
|
15
|
+
struct or union members.
|
16
|
+
- Add examination package initializer.
|
17
|
+
- Revise behavior of the CMA code structure collection so that an
|
18
|
+
optional examination package can output its own special
|
19
|
+
met-records.
|
20
|
+
|
21
|
+
Thu Apr 10 15:11:38 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
22
|
+
|
23
|
+
* lib/adlint/metric.rb : Revise behavior of the CMA code structure
|
24
|
+
collection so that an optional examination package can output its own
|
25
|
+
special met-records.
|
26
|
+
* lib/adlint/ld/object.rb : Ditto.
|
27
|
+
* lib/adlint/ld/typedef.rb : Ditto.
|
28
|
+
|
29
|
+
Thu Apr 10 13:34:44 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
30
|
+
|
31
|
+
* lib/adlint/exam.rb : Add examination package initializer.
|
32
|
+
|
33
|
+
Thu Apr 10 10:57:34 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
34
|
+
|
35
|
+
* lib/adlint/cc1/type.rb : Fix the type and object model in order to
|
36
|
+
correctly manage unnamed struct or union members.
|
37
|
+
* lib/adlint/cc1/syntax.rb : Ditto.
|
38
|
+
* lib/adlint/cc1/resolver.rb : Ditto.
|
39
|
+
* lib/adlint/cc1/object.rb : Ditto.
|
40
|
+
|
41
|
+
* lib/adlint/exam/c_builtin/cc1_check.rb : Correct W0067 and W0492 code
|
42
|
+
check according to changes of the type and object model.
|
43
|
+
* features/code_check/W0801.feature : Ditto.
|
44
|
+
|
45
|
+
* features/code_check/W0067.feature : Add scenario to reproduce
|
46
|
+
false-positive of W0067 code check.
|
47
|
+
* MANIFEST : Ditto.
|
48
|
+
|
49
|
+
Fri Mar 7 12:57:41 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
50
|
+
|
51
|
+
* lib/adlint/cc1/lexer.rb : Refactor a bit in order to clarify
|
52
|
+
intention to take tail part of an array.
|
53
|
+
* lib/adlint/cc1/value.rb : Ditto.
|
54
|
+
* lib/adlint/cpp/eval.rb : Ditto.
|
55
|
+
* lib/adlint/cpp/macro.rb : Ditto.
|
56
|
+
* lib/adlint/cpp/subst.rb : Ditto.
|
57
|
+
* lib/adlint/exam/c_builtin/cc1_check.rb : Ditto.
|
58
|
+
* spec/adlint/cc1/syntax_spec.rb : Ditto.
|
59
|
+
|
1
60
|
Mon Feb 17 12:56:05 2014 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
61
|
|
3
62
|
* release.ga : 3.2.10
|
data/MANIFEST
CHANGED
@@ -55,6 +55,7 @@ features/code_check/W0023.feature
|
|
55
55
|
features/code_check/W0024.feature
|
56
56
|
features/code_check/W0025.feature
|
57
57
|
features/code_check/W0026.feature
|
58
|
+
features/code_check/W0067.feature
|
58
59
|
features/code_check/W0070.feature
|
59
60
|
features/code_check/W0071.feature
|
60
61
|
features/code_check/W0088.feature
|
data/NEWS
CHANGED
@@ -21,6 +21,19 @@
|
|
21
21
|
|
22
22
|
++
|
23
23
|
|
24
|
+
=== \AdLint 3.2.12 is released (2014-04-12)
|
25
|
+
|
26
|
+
==== Changes since the 3.2.10 release
|
27
|
+
|
28
|
+
* Fix the type and object model in order to correctly manage unnamed struct or
|
29
|
+
union members
|
30
|
+
* Add examination package initializer
|
31
|
+
* Revise behavior of the CMA code structure collection so that an optional
|
32
|
+
examination package can output its own special met-records
|
33
|
+
|
34
|
+
See the file {ChangeLog}[https://github.com/yanoh/adlint/blob/master/ChangeLog]
|
35
|
+
for more details.
|
36
|
+
|
24
37
|
=== \AdLint 3.2.10 is released (2014-02-17)
|
25
38
|
|
26
39
|
==== Changes since the 3.2.8 release
|
@@ -28,9 +41,6 @@
|
|
28
41
|
* Add new templates for MSVC100 (Visual C++ 2010) as a C compiler on 32bit
|
29
42
|
Windows
|
30
43
|
|
31
|
-
See the file {ChangeLog}[https://github.com/yanoh/adlint/blob/master/ChangeLog]
|
32
|
-
for more details.
|
33
|
-
|
34
44
|
=== \AdLint 3.2.8 is released (2014-02-07)
|
35
45
|
|
36
46
|
==== Changes since the 3.2.6 release
|
@@ -0,0 +1,74 @@
|
|
1
|
+
Feature: W0067
|
2
|
+
|
3
|
+
W0067 detects that the nested member of a composite data type is accessed
|
4
|
+
directly without parent member names.
|
5
|
+
|
6
|
+
Scenario: no direct access
|
7
|
+
Given a target source named "fixture.c" with:
|
8
|
+
"""
|
9
|
+
static int foo(void)
|
10
|
+
{
|
11
|
+
struct {
|
12
|
+
int i;
|
13
|
+
struct {
|
14
|
+
int j;
|
15
|
+
} baz;
|
16
|
+
} bar = { 0, { 0 } };
|
17
|
+
|
18
|
+
return bar.i + bar.baz.j; /* OK */
|
19
|
+
}
|
20
|
+
"""
|
21
|
+
When I successfully run `adlint fixture.c` on noarch
|
22
|
+
Then the output should exactly match with:
|
23
|
+
| mesg | line | column |
|
24
|
+
| W1076 | 1 | 12 |
|
25
|
+
| W0100 | 8 | 7 |
|
26
|
+
| W0629 | 1 | 12 |
|
27
|
+
| W0628 | 1 | 12 |
|
28
|
+
|
29
|
+
Scenario: direct access to nested member included in a named member
|
30
|
+
Given a target source named "fixture.c" with:
|
31
|
+
"""
|
32
|
+
static int foo(void)
|
33
|
+
{
|
34
|
+
struct {
|
35
|
+
int i;
|
36
|
+
struct {
|
37
|
+
int j;
|
38
|
+
} baz;
|
39
|
+
} bar = { 0, { 0 } };
|
40
|
+
|
41
|
+
return bar.i + bar.j; /* W0067 */
|
42
|
+
}
|
43
|
+
"""
|
44
|
+
When I successfully run `adlint fixture.c` on noarch
|
45
|
+
Then the output should exactly match with:
|
46
|
+
| mesg | line | column |
|
47
|
+
| W1076 | 1 | 12 |
|
48
|
+
| W0067 | 10 | 23 |
|
49
|
+
| W0100 | 8 | 7 |
|
50
|
+
| W0629 | 1 | 12 |
|
51
|
+
| W0628 | 1 | 12 |
|
52
|
+
|
53
|
+
Scenario: direct access to nested member included in an unnamed member
|
54
|
+
Given a target source named "fixture.c" with:
|
55
|
+
"""
|
56
|
+
static int foo(void)
|
57
|
+
{
|
58
|
+
struct {
|
59
|
+
int i;
|
60
|
+
struct {
|
61
|
+
int j;
|
62
|
+
};
|
63
|
+
} bar = { 0, { 0 } };
|
64
|
+
|
65
|
+
return bar.i + bar.j; /* OK */
|
66
|
+
}
|
67
|
+
"""
|
68
|
+
When I successfully run `adlint fixture.c` on noarch
|
69
|
+
Then the output should exactly match with:
|
70
|
+
| mesg | line | column |
|
71
|
+
| W1076 | 1 | 12 |
|
72
|
+
| W0100 | 8 | 7 |
|
73
|
+
| W0629 | 1 | 12 |
|
74
|
+
| W0628 | 1 | 12 |
|
@@ -26,6 +26,7 @@ Feature: W0801
|
|
26
26
|
When I successfully run `adlint fixture.c` on noarch
|
27
27
|
Then the output should exactly match with:
|
28
28
|
| mesg | line | column |
|
29
|
+
| W0040 | 1 | 8 |
|
29
30
|
| W0801 | 1 | 8 |
|
30
31
|
|
31
32
|
Scenario: named member exists in the struct
|
@@ -65,6 +66,7 @@ Feature: W0801
|
|
65
66
|
When I successfully run `adlint fixture.c` on noarch
|
66
67
|
Then the output should exactly match with:
|
67
68
|
| mesg | line | column |
|
69
|
+
| W0040 | 1 | 7 |
|
68
70
|
| W0551 | 1 | 7 |
|
69
71
|
| W0801 | 1 | 7 |
|
70
72
|
|
data/lib/adlint/cc1/lexer.rb
CHANGED
@@ -170,7 +170,7 @@ module Cc1 #:nodoc:
|
|
170
170
|
head_idx = @lst_toks.rindex { |tok| keys.include?(tok.type) }
|
171
171
|
|
172
172
|
if head_idx
|
173
|
-
toks = @lst_toks
|
173
|
+
toks = @lst_toks.drop(head_idx + 1)
|
174
174
|
case toks.size
|
175
175
|
when 1
|
176
176
|
patch_identifier_translation_mode1(*toks)
|
data/lib/adlint/cc1/object.rb
CHANGED
@@ -447,10 +447,18 @@ module Cc1 #:nodoc:
|
|
447
447
|
# TODO: If linear searching is too slow, use an index of inner
|
448
448
|
# variables.
|
449
449
|
target_name = CompositeMemberVariable.component_name_of(name)
|
450
|
-
@inner_variables.
|
451
|
-
|
452
|
-
|
450
|
+
@inner_variables.each do |inner|
|
451
|
+
case
|
452
|
+
when inner.component_name.nil?
|
453
|
+
if var = inner.inner_variable_named(name)
|
454
|
+
return var
|
455
|
+
end
|
456
|
+
when inner.component_name == target_name
|
457
|
+
return inner
|
458
|
+
end
|
459
|
+
end
|
453
460
|
end
|
461
|
+
nil
|
454
462
|
end
|
455
463
|
|
456
464
|
private
|
@@ -619,10 +627,11 @@ module Cc1 #:nodoc:
|
|
619
627
|
private
|
620
628
|
def create_qualified_name(outer_var, component_name)
|
621
629
|
if outer_var.named?
|
622
|
-
|
630
|
+
prefix = outer_var.name
|
623
631
|
else
|
624
|
-
"__adlint__tempvar
|
632
|
+
prefix = "__adlint__tempvar"
|
625
633
|
end
|
634
|
+
component_name ? "#{prefix}#{component_name}" : prefix
|
626
635
|
end
|
627
636
|
end
|
628
637
|
|
@@ -638,7 +647,7 @@ module Cc1 #:nodoc:
|
|
638
647
|
|
639
648
|
class CompositeMemberVariable < InnerVariable
|
640
649
|
def self.component_name_of(name)
|
641
|
-
".#{name}"
|
650
|
+
name ? ".#{name}" : nil
|
642
651
|
end
|
643
652
|
|
644
653
|
def initialize(mem, outer_var, type, name)
|
data/lib/adlint/cc1/parser.rb
CHANGED
data/lib/adlint/cc1/resolver.rb
CHANGED
@@ -69,16 +69,18 @@ module Cc1 #:nodoc:
|
|
69
69
|
def visit_member_declaration(node)
|
70
70
|
checkpoint(node.location)
|
71
71
|
node.specifier_qualifier_list.accept(self)
|
72
|
-
node.struct_declarator.accept(self)
|
72
|
+
node.struct_declarator.accept(self) if node.struct_declarator
|
73
73
|
|
74
74
|
type_quals = node.specifier_qualifier_list.type_qualifiers
|
75
75
|
type_specs = node.specifier_qualifier_list.type_specifiers
|
76
|
+
struct_dcr = node.struct_declarator
|
77
|
+
|
76
78
|
type = lookup_variable_type(type_quals, type_specs,
|
77
|
-
|
79
|
+
struct_dcr ? struct_dcr.declarator : nil)
|
78
80
|
type = @type_table.pointer_type(type) if type.function?
|
79
81
|
|
80
|
-
if
|
81
|
-
if bit_width = compute_bitfield_width(
|
82
|
+
if struct_dcr and struct_dcr.bitfield?
|
83
|
+
if bit_width = compute_bitfield_width(struct_dcr)
|
82
84
|
type = @type_table.bitfield_type(type, bit_width)
|
83
85
|
else
|
84
86
|
type = fallback_type
|
data/lib/adlint/cc1/syntax.rb
CHANGED
@@ -2867,10 +2867,14 @@ module Cc1 #:nodoc:
|
|
2867
2867
|
|
2868
2868
|
private
|
2869
2869
|
def build_items(spec_qual_list, struct_dcrs)
|
2870
|
-
|
2871
|
-
|
2872
|
-
|
2873
|
-
|
2870
|
+
# FIXME: Must support unnamed bit padding.
|
2871
|
+
|
2872
|
+
if struct_dcrs.empty?
|
2873
|
+
[MemberDeclaration.new(spec_qual_list, nil)]
|
2874
|
+
else
|
2875
|
+
struct_dcrs.map do |struct_dcr|
|
2876
|
+
MemberDeclaration.new(spec_qual_list, struct_dcr)
|
2877
|
+
end
|
2874
2878
|
end
|
2875
2879
|
end
|
2876
2880
|
end
|
@@ -2888,20 +2892,35 @@ module Cc1 #:nodoc:
|
|
2888
2892
|
attr_accessor :type
|
2889
2893
|
|
2890
2894
|
def identifier
|
2891
|
-
@struct_declarator.declarator
|
2895
|
+
if @struct_declarator && @struct_declarator.declarator
|
2896
|
+
@struct_declarator.declarator.identifier
|
2897
|
+
else
|
2898
|
+
nil
|
2899
|
+
end
|
2892
2900
|
end
|
2893
2901
|
|
2894
2902
|
def location
|
2895
|
-
|
2903
|
+
case
|
2904
|
+
when @struct_declarator && @struct_declarator.declarator
|
2905
|
+
@struct_declarator.declarator.identifier.location
|
2906
|
+
when @struct_declarator
|
2907
|
+
@struct_declarator.head_location
|
2908
|
+
else
|
2909
|
+
@specifier_qualifier_list.head_location
|
2910
|
+
end
|
2896
2911
|
end
|
2897
2912
|
|
2898
2913
|
def to_s
|
2899
|
-
|
2914
|
+
if id = identifier
|
2915
|
+
"#{type.brief_image} #{id.value}"
|
2916
|
+
else
|
2917
|
+
type.brief_image
|
2918
|
+
end
|
2900
2919
|
end
|
2901
2920
|
|
2902
2921
|
def inspect(indent = 0)
|
2903
2922
|
" " * indent + "#{short_class_name} (#{location.inspect}) " +
|
2904
|
-
identifier.value
|
2923
|
+
((id = identifier) ? id.value : "")
|
2905
2924
|
end
|
2906
2925
|
end
|
2907
2926
|
|
data/lib/adlint/cc1/type.rb
CHANGED
@@ -6306,7 +6306,17 @@ module Cc1 #:nodoc:
|
|
6306
6306
|
|
6307
6307
|
def member_named(name)
|
6308
6308
|
# FIXME: Should use the member name index.
|
6309
|
-
@members.
|
6309
|
+
@members.each do |memb|
|
6310
|
+
case
|
6311
|
+
when memb.name.nil? && memb.type.composite?
|
6312
|
+
if inner_memb = memb.type.member_named(name)
|
6313
|
+
return inner_memb
|
6314
|
+
end
|
6315
|
+
when memb.name == name
|
6316
|
+
return memb
|
6317
|
+
end
|
6318
|
+
end
|
6319
|
+
nil
|
6310
6320
|
end
|
6311
6321
|
|
6312
6322
|
def min
|
@@ -6691,6 +6701,10 @@ module Cc1 #:nodoc:
|
|
6691
6701
|
attr_reader :name
|
6692
6702
|
attr_reader :type
|
6693
6703
|
|
6704
|
+
def named?
|
6705
|
+
!@name.nil?
|
6706
|
+
end
|
6707
|
+
|
6694
6708
|
def dup
|
6695
6709
|
Member.new(@name, @type.dup)
|
6696
6710
|
end
|
@@ -7584,16 +7598,6 @@ module Cc1 #:nodoc:
|
|
7584
7598
|
end
|
7585
7599
|
end
|
7586
7600
|
|
7587
|
-
def create_members(struct_dcls)
|
7588
|
-
membs = []
|
7589
|
-
struct_dcls.each do |struct_dcl|
|
7590
|
-
struct_dcl.items.each do |item|
|
7591
|
-
membs.push(Member.new(item.identifier.value, item.type))
|
7592
|
-
end
|
7593
|
-
end
|
7594
|
-
membs
|
7595
|
-
end
|
7596
|
-
|
7597
7601
|
def rewrite_struct_type(struct_type, type_dcl)
|
7598
7602
|
struct_type.declarations.push(type_dcl)
|
7599
7603
|
struct_type.image = type_dcl.struct_specifier.to_s
|
@@ -7608,6 +7612,14 @@ module Cc1 #:nodoc:
|
|
7608
7612
|
union_type.members.replace(create_members(type_dcl.struct_declarations))
|
7609
7613
|
end
|
7610
7614
|
|
7615
|
+
def create_members(struct_dcls)
|
7616
|
+
struct_dcls.map { |struct_dcl|
|
7617
|
+
struct_dcl.items.map do |item|
|
7618
|
+
Member.new(item.identifier ? item.identifier.value : nil, item.type)
|
7619
|
+
end
|
7620
|
+
}.flatten
|
7621
|
+
end
|
7622
|
+
|
7611
7623
|
def rewrite_enum_type(enum_type, type_dcl)
|
7612
7624
|
enum_type.declarations.push(type_dcl)
|
7613
7625
|
enum_type.image = type_dcl.enum_specifier.to_s
|
data/lib/adlint/cc1/value.rb
CHANGED
data/lib/adlint/cpp/constexpr.rb
CHANGED
data/lib/adlint/cpp/eval.rb
CHANGED
@@ -994,7 +994,7 @@ module Cpp #:nodoc:
|
|
994
994
|
|
995
995
|
# NOTE: It's not completed when a new-line appears after the macro
|
996
996
|
# name.
|
997
|
-
return false unless pp_toks
|
997
|
+
return false unless pp_toks.drop(idx).any? { |t| t.value == "(" }
|
998
998
|
|
999
999
|
paren_cnt = 0
|
1000
1000
|
while tok = pp_toks[idx]
|
data/lib/adlint/cpp/macro.rb
CHANGED
@@ -738,7 +738,7 @@ module Cpp #:nodoc:
|
|
738
738
|
return nil unless tok = toks[idx] and macro = lookup(tok.value)
|
739
739
|
return nil if repl_ctxt.hidden?(tok, macro.name.value)
|
740
740
|
|
741
|
-
size = macro.replaceable_size(toks
|
741
|
+
size = macro.replaceable_size(toks.drop(idx))
|
742
742
|
|
743
743
|
if toks[idx, size].all? { |t| t.need_no_further_replacement? }
|
744
744
|
return nil
|
data/lib/adlint/cpp/subst.rb
CHANGED
data/lib/adlint/exam.rb
CHANGED
@@ -127,6 +127,7 @@ module AdLint #:nodoc:
|
|
127
127
|
class ExaminationCatalog
|
128
128
|
def initialize(loader_fpath)
|
129
129
|
@loader_fpath = loader_fpath
|
130
|
+
@initializer = lambda {}
|
130
131
|
yield(self) if block_given?
|
131
132
|
end
|
132
133
|
|
@@ -136,6 +137,7 @@ module AdLint #:nodoc:
|
|
136
137
|
attr_accessor :patch_version
|
137
138
|
attr_accessor :release_date
|
138
139
|
attr_accessor :examination_classes
|
140
|
+
attr_accessor :initializer
|
139
141
|
|
140
142
|
def short_version
|
141
143
|
"#{major_version}.#{minor_version}.#{patch_version}"
|
@@ -161,6 +163,7 @@ module AdLint #:nodoc:
|
|
161
163
|
|
162
164
|
def load
|
163
165
|
require "adlint/exam/#{@name}"
|
166
|
+
catalog.initializer.call
|
164
167
|
true
|
165
168
|
rescue LoadError
|
166
169
|
false
|
@@ -269,7 +269,7 @@ module CBuiltin #:nodoc:
|
|
269
269
|
if fmt_str_idx
|
270
270
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
271
271
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
272
|
-
args = arg_vars
|
272
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
273
273
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
274
274
|
end
|
275
275
|
end
|
@@ -315,7 +315,7 @@ module CBuiltin #:nodoc:
|
|
315
315
|
if fmt_str_idx
|
316
316
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
317
317
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
318
|
-
args = arg_vars
|
318
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
319
319
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
320
320
|
end
|
321
321
|
end
|
@@ -361,7 +361,7 @@ module CBuiltin #:nodoc:
|
|
361
361
|
if fmt_str_idx
|
362
362
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
363
363
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
364
|
-
args = arg_vars
|
364
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
365
365
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
366
366
|
end
|
367
367
|
end
|
@@ -1593,15 +1593,20 @@ module CBuiltin #:nodoc:
|
|
1593
1593
|
|
1594
1594
|
private
|
1595
1595
|
def check_member_access(expr, outer_var, inner_var)
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1596
|
+
case expr
|
1597
|
+
when Cc1::MemberAccessByValueExpression
|
1598
|
+
outer_type = outer_var.type.unqualify
|
1599
|
+
when Cc1::MemberAccessByPointerExpression
|
1600
|
+
outer_type = outer_var.type.unqualify.base_type
|
1601
|
+
else
|
1601
1602
|
return
|
1602
1603
|
end
|
1603
1604
|
|
1604
|
-
|
1605
|
+
if outer_type.composite? && !outer_type.incomplete?
|
1606
|
+
unless outer_type.member_named(expr.identifier.value)
|
1607
|
+
W(expr.location)
|
1608
|
+
end
|
1609
|
+
end
|
1605
1610
|
end
|
1606
1611
|
end
|
1607
1612
|
|
@@ -8216,7 +8221,7 @@ module CBuiltin #:nodoc:
|
|
8216
8221
|
if enums = node.enum_specifier.enumerators
|
8217
8222
|
exprs = enums.map { |enum| enum.expression }
|
8218
8223
|
return if exprs.all? { |expr| expr.nil? }
|
8219
|
-
return if exprs.first && exprs
|
8224
|
+
return if exprs.first && exprs.drop(1).all? { |expr| expr.nil? }
|
8220
8225
|
return if exprs.all? { |expr| !expr.nil? }
|
8221
8226
|
W(node.location)
|
8222
8227
|
end
|
@@ -10484,7 +10489,7 @@ module CBuiltin #:nodoc:
|
|
10484
10489
|
def declare_members(struct_or_union_dcl)
|
10485
10490
|
memb_dcls = MemberExtractor.new.tap { |extr|
|
10486
10491
|
struct_or_union_dcl.accept(extr)
|
10487
|
-
}.result
|
10492
|
+
}.result.select { |memb| !memb.identifier.nil? }
|
10488
10493
|
|
10489
10494
|
memb_dcls.each do |memb_dcl|
|
10490
10495
|
pair_names =
|
@@ -12139,8 +12144,11 @@ module CBuiltin #:nodoc:
|
|
12139
12144
|
private
|
12140
12145
|
def check(node)
|
12141
12146
|
return unless node.type.scalar? && node.type.integer?
|
12142
|
-
|
12143
|
-
|
12147
|
+
|
12148
|
+
if node.identifier
|
12149
|
+
if node.type.bitfield? && node.type.signed? && node.type.bit_size == 1
|
12150
|
+
W(node.location)
|
12151
|
+
end
|
12144
12152
|
end
|
12145
12153
|
end
|
12146
12154
|
end
|
@@ -12520,7 +12528,7 @@ module CBuiltin #:nodoc:
|
|
12520
12528
|
}
|
12521
12529
|
|
12522
12530
|
if params.size > 1
|
12523
|
-
params.first.zip(*params
|
12531
|
+
params.first.zip(*params.drop(1)) do |names|
|
12524
12532
|
unless names.tap { |ary| ary.delete("") }.uniq.size == 1
|
12525
12533
|
W(node.location)
|
12526
12534
|
break
|
@@ -13378,7 +13386,7 @@ module CBuiltin #:nodoc:
|
|
13378
13386
|
if fmt_str_idx
|
13379
13387
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
13380
13388
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
13381
|
-
trailing_args = arg_vars
|
13389
|
+
trailing_args = arg_vars.drop(fmt_str_idx + 1) || []
|
13382
13390
|
return Cc1::ScanfFormat.new($1, fmt_str.location, trailing_args, env)
|
13383
13391
|
end
|
13384
13392
|
end
|
@@ -14863,7 +14871,7 @@ module CBuiltin #:nodoc:
|
|
14863
14871
|
if fmt_str_idx
|
14864
14872
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
14865
14873
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
14866
|
-
args = arg_vars
|
14874
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
14867
14875
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
14868
14876
|
end
|
14869
14877
|
end
|
@@ -14912,7 +14920,7 @@ module CBuiltin #:nodoc:
|
|
14912
14920
|
if fmt_str_idx
|
14913
14921
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
14914
14922
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
14915
|
-
args = arg_vars
|
14923
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
14916
14924
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
14917
14925
|
end
|
14918
14926
|
end
|
@@ -14961,7 +14969,7 @@ module CBuiltin #:nodoc:
|
|
14961
14969
|
if fmt_str_idx
|
14962
14970
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
14963
14971
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
14964
|
-
args = arg_vars
|
14972
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
14965
14973
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
14966
14974
|
end
|
14967
14975
|
end
|
@@ -15037,7 +15045,7 @@ module CBuiltin #:nodoc:
|
|
15037
15045
|
if fmt_str_idx
|
15038
15046
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15039
15047
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15040
|
-
args = arg_vars
|
15048
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15041
15049
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
15042
15050
|
end
|
15043
15051
|
end
|
@@ -15090,7 +15098,7 @@ module CBuiltin #:nodoc:
|
|
15090
15098
|
if fmt_str_idx
|
15091
15099
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15092
15100
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15093
|
-
args = arg_vars
|
15101
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15094
15102
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
15095
15103
|
end
|
15096
15104
|
end
|
@@ -15404,7 +15412,7 @@ module CBuiltin #:nodoc:
|
|
15404
15412
|
if fmt_str_idx
|
15405
15413
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15406
15414
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15407
|
-
args = arg_vars
|
15415
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15408
15416
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
15409
15417
|
end
|
15410
15418
|
end
|
@@ -15457,7 +15465,7 @@ module CBuiltin #:nodoc:
|
|
15457
15465
|
if fmt_str_idx
|
15458
15466
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15459
15467
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15460
|
-
args = arg_vars
|
15468
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15461
15469
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
15462
15470
|
end
|
15463
15471
|
end
|
@@ -15688,7 +15696,7 @@ module CBuiltin #:nodoc:
|
|
15688
15696
|
if fmt_str_idx
|
15689
15697
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15690
15698
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15691
|
-
args = arg_vars
|
15699
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15692
15700
|
return Cc1::PrintfFormat.new($1, fmt_str.location, args, env)
|
15693
15701
|
end
|
15694
15702
|
end
|
@@ -15735,7 +15743,7 @@ module CBuiltin #:nodoc:
|
|
15735
15743
|
if fmt_str_idx
|
15736
15744
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15737
15745
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15738
|
-
args = arg_vars
|
15746
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15739
15747
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
15740
15748
|
end
|
15741
15749
|
end
|
@@ -15788,7 +15796,7 @@ module CBuiltin #:nodoc:
|
|
15788
15796
|
if fmt_str_idx
|
15789
15797
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15790
15798
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15791
|
-
args = arg_vars
|
15799
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15792
15800
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
15793
15801
|
end
|
15794
15802
|
end
|
@@ -15954,7 +15962,7 @@ module CBuiltin #:nodoc:
|
|
15954
15962
|
if fmt_str_idx
|
15955
15963
|
fmt_str = funcall_expr.argument_expressions[fmt_str_idx]
|
15956
15964
|
if fmt_str && fmt_str.literal.value =~ /\AL?"(.*)"\z/i
|
15957
|
-
args = arg_vars
|
15965
|
+
args = arg_vars.drop(fmt_str_idx + 1) || []
|
15958
15966
|
return Cc1::ScanfFormat.new($1, fmt_str.location, args, env)
|
15959
15967
|
end
|
15960
15968
|
end
|
@@ -19969,7 +19977,7 @@ module CBuiltin #:nodoc:
|
|
19969
19977
|
|
19970
19978
|
private
|
19971
19979
|
def check(node)
|
19972
|
-
W(node.location) if node.type.members.
|
19980
|
+
W(node.location) if node.type.members.none? { |memb| memb.named? }
|
19973
19981
|
end
|
19974
19982
|
end
|
19975
19983
|
|
@@ -20800,7 +20808,7 @@ module CBuiltin #:nodoc:
|
|
20800
20808
|
fmt_arg = expr.argument_expressions[fmt_idx]
|
20801
20809
|
if fmt_arg && fmt_arg.literal.value =~ /\AL?"(.*)"\z/i
|
20802
20810
|
loc = fmt_arg.location
|
20803
|
-
args = arg_vars
|
20811
|
+
args = arg_vars.drop(fmt_idx + 1) || []
|
20804
20812
|
return Cc1::PrintfFormat.new($1, loc, args, @environ)
|
20805
20813
|
end
|
20806
20814
|
end
|
@@ -20812,7 +20820,7 @@ module CBuiltin #:nodoc:
|
|
20812
20820
|
fmt_arg = expr.argument_expressions[fmt_idx]
|
20813
20821
|
if fmt_arg && fmt_arg.literal.value =~ /\AL?"(.*)"\z/i
|
20814
20822
|
loc = fmt_arg.location
|
20815
|
-
args = arg_vars
|
20823
|
+
args = arg_vars.drop(fmt_idx + 1) || []
|
20816
20824
|
return Cc1::ScanfFormat.new($1, loc, args, @environ)
|
20817
20825
|
end
|
20818
20826
|
end
|
data/lib/adlint/ld/object.rb
CHANGED
@@ -150,16 +150,17 @@ module Ld #:nodoc:
|
|
150
150
|
def execute(met_fpath)
|
151
151
|
sma_wd = Pathname.pwd
|
152
152
|
CSV.foreach(met_fpath) do |csv_row|
|
153
|
-
rec = MetricRecord.of(csv_row, sma_wd)
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
153
|
+
if rec = MetricRecord.of(csv_row, sma_wd)
|
154
|
+
case
|
155
|
+
when rec.version?
|
156
|
+
sma_wd = Pathname.new(rec.exec_working_directory)
|
157
|
+
when rec.variable_definition?
|
158
|
+
if rec.variable_linkage_type == "X"
|
159
|
+
@map.add_variable(Variable.new(rec))
|
160
|
+
end
|
161
|
+
when rec.global_variable_declaration?
|
162
|
+
@map.add_variable_declaration(VariableDeclaration.new(rec))
|
160
163
|
end
|
161
|
-
when rec.global_variable_declaration?
|
162
|
-
@map.add_variable_declaration(VariableDeclaration.new(rec))
|
163
164
|
end
|
164
165
|
end
|
165
166
|
end
|
@@ -308,14 +309,15 @@ module Ld #:nodoc:
|
|
308
309
|
def execute(met_fpath)
|
309
310
|
sma_wd = Pathname.pwd
|
310
311
|
CSV.foreach(met_fpath) do |csv_row|
|
311
|
-
rec = MetricRecord.of(csv_row, sma_wd)
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
312
|
+
if rec = MetricRecord.of(csv_row, sma_wd)
|
313
|
+
case
|
314
|
+
when rec.version?
|
315
|
+
sma_wd = Pathname.new(rec.exec_working_directory)
|
316
|
+
when rec.function_definition?
|
317
|
+
@map.add_function(Function.new(rec))
|
318
|
+
when rec.function_declaration?
|
319
|
+
@map.add_function_declaration(FunctionDeclaration.new(rec))
|
320
|
+
end
|
319
321
|
end
|
320
322
|
end
|
321
323
|
end
|
@@ -490,23 +492,27 @@ module Ld #:nodoc:
|
|
490
492
|
def execute(met_fpath)
|
491
493
|
sma_wd = Pathname.pwd
|
492
494
|
CSV.foreach(met_fpath) do |csv_row|
|
493
|
-
rec = MetricRecord.of(csv_row, sma_wd)
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
495
|
+
if rec = MetricRecord.of(csv_row, sma_wd)
|
496
|
+
case
|
497
|
+
when rec.version?
|
498
|
+
sma_wd = Pathname.new(rec.exec_working_directory)
|
499
|
+
when rec.variable_xref?
|
500
|
+
if var = @var_map.lookup_variables(rec.accessee_variable).first
|
501
|
+
fun_id = rec.accessor_function
|
502
|
+
if fun_id.named?
|
503
|
+
fun = @fun_map.lookup_functions(fun_id.name).first
|
504
|
+
ref = ObjectReferrer.of_function(fun)
|
505
|
+
else
|
506
|
+
ref = ObjectReferrer.of_ctors_section(rec.location)
|
507
|
+
end
|
508
|
+
@graph.add(ObjectReference.new(ref, var, rec.location))
|
509
|
+
end
|
510
|
+
when rec.function_xref?
|
511
|
+
ref, fun = lookup_referrer_and_function_by_xref(rec)
|
512
|
+
if ref && fun
|
513
|
+
@graph.add(ObjectReference.new(ref, fun, rec.location))
|
514
|
+
end
|
505
515
|
end
|
506
|
-
@graph.add(ObjectReference.new(ref, var, rec.location)) if var
|
507
|
-
when rec.function_xref?
|
508
|
-
ref, fun = lookup_referrer_and_function_by_xref(rec)
|
509
|
-
@graph.add(ObjectReference.new(ref, fun, rec.location)) if ref && fun
|
510
516
|
end
|
511
517
|
end
|
512
518
|
end
|
@@ -614,14 +620,15 @@ module Ld #:nodoc:
|
|
614
620
|
def execute(met_fpath)
|
615
621
|
sma_wd = Pathname.pwd
|
616
622
|
CSV.foreach(met_fpath) do |csv_row|
|
617
|
-
rec = MetricRecord.of(csv_row, sma_wd)
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
623
|
+
if rec = MetricRecord.of(csv_row, sma_wd)
|
624
|
+
case
|
625
|
+
when rec.version?
|
626
|
+
sma_wd = Pathname.new(rec.exec_working_directory)
|
627
|
+
when rec.function_call?
|
628
|
+
caller_ref, callee_fun = lookup_functions_by_call(rec)
|
629
|
+
if caller_ref && callee_fun
|
630
|
+
@graph.add(FunctionCall.new(caller_ref, callee_fun))
|
631
|
+
end
|
625
632
|
end
|
626
633
|
end
|
627
634
|
end
|
data/lib/adlint/ld/typedef.rb
CHANGED
@@ -91,12 +91,13 @@ module Ld #:nodoc:
|
|
91
91
|
def execute(met_fpath)
|
92
92
|
sma_wd = Pathname.pwd
|
93
93
|
CSV.foreach(met_fpath) do |csv_row|
|
94
|
-
rec = MetricRecord.of(csv_row, sma_wd)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
94
|
+
if rec = MetricRecord.of(csv_row, sma_wd)
|
95
|
+
case
|
96
|
+
when rec.version?
|
97
|
+
sma_wd = Pathname.new(rec.exec_working_directory)
|
98
|
+
when rec.typedef_declaration?
|
99
|
+
@map.add(Typedef.new(rec.type_name, rec.location))
|
100
|
+
end
|
100
101
|
end
|
101
102
|
end
|
102
103
|
end
|
data/lib/adlint/metric.rb
CHANGED
@@ -190,7 +190,11 @@ module AdLint #:nodoc:
|
|
190
190
|
when "MET"
|
191
191
|
create_metric_record(csv_row, sma_wd)
|
192
192
|
else
|
193
|
-
|
193
|
+
# NOTE: Silently ignore unknown records so that an optional examination
|
194
|
+
# package may output its own special ones.
|
195
|
+
#
|
196
|
+
#raise "invalid metric record."
|
197
|
+
nil
|
194
198
|
end
|
195
199
|
end
|
196
200
|
|
data/lib/adlint/version.rb
CHANGED
data/share/doc/c99gram.pdf
CHANGED
Binary file
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 3.2.
|
3
|
+
<title>AdLint 3.2.12 開発者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 3.2.
|
5
|
+
<meta name="description" content="AdLint 3.2.12 開発者ガイド">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 3.2.
|
47
|
+
<h1 class="settitle">AdLint 3.2.12 開発者ガイド</h1>
|
48
48
|
<div class="contents">
|
49
49
|
<h2>Table of Contents</h2>
|
50
50
|
<ul>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="en">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 3.2.
|
3
|
+
<title>AdLint 3.2.12 User's Guide</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 3.2.
|
5
|
+
<meta name="description" content="AdLint 3.2.12 User's Guide">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 3.2.
|
47
|
+
<h1 class="settitle">AdLint 3.2.12 User's Guide</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 3.2.
|
3
|
+
<title>AdLint 3.2.12 利用者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 3.2.
|
5
|
+
<meta name="description" content="AdLint 3.2.12 利用者ガイド">
|
6
6
|
<meta name="generator" content="makeinfo 4.13">
|
7
7
|
<link title="Top" rel="top" href="#Top">
|
8
8
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
@@ -44,7 +44,7 @@ td { border: 1px solid black; }
|
|
44
44
|
--></style>
|
45
45
|
</head>
|
46
46
|
<body>
|
47
|
-
<h1 class="settitle">AdLint 3.2.
|
47
|
+
<h1 class="settitle">AdLint 3.2.12 利用者ガイド</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adlint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yutaka Yanoh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
AdLint is a source code static analyzer.
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- features/code_check/W0024.feature
|
83
83
|
- features/code_check/W0025.feature
|
84
84
|
- features/code_check/W0026.feature
|
85
|
+
- features/code_check/W0067.feature
|
85
86
|
- features/code_check/W0070.feature
|
86
87
|
- features/code_check/W0071.feature
|
87
88
|
- features/code_check/W0088.feature
|
@@ -879,25 +880,25 @@ post_install_message: |
|
|
879
880
|
|
880
881
|
-------------------------------------------------------------------------------
|
881
882
|
rdoc_options:
|
882
|
-
- --main
|
883
|
+
- "--main"
|
883
884
|
- README
|
884
|
-
- --charset
|
885
|
+
- "--charset"
|
885
886
|
- utf-8
|
886
887
|
require_paths:
|
887
888
|
- lib
|
888
889
|
required_ruby_version: !ruby/object:Gem::Requirement
|
889
890
|
requirements:
|
890
|
-
- -
|
891
|
+
- - ">="
|
891
892
|
- !ruby/object:Gem::Version
|
892
893
|
version: 1.9.3
|
893
894
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
894
895
|
requirements:
|
895
|
-
- -
|
896
|
+
- - ">="
|
896
897
|
- !ruby/object:Gem::Version
|
897
898
|
version: '0'
|
898
899
|
requirements: []
|
899
900
|
rubyforge_project:
|
900
|
-
rubygems_version: 2.
|
901
|
+
rubygems_version: 2.2.2
|
901
902
|
signing_key:
|
902
903
|
specification_version: 4
|
903
904
|
summary: 'AdLint :: Advanced Lint - An open source and free source code static analyzer'
|