adlint 2.0.6 → 2.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +35 -0
- data/NEWS +12 -4
- 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/lib/adlint/c/branch.rb +17 -6
- data/lib/adlint/c/ctrlexpr.rb +20 -7
- data/lib/adlint/c/syntax.rb +24 -0
- data/lib/adlint/exam.rb +1 -1
- data/lib/adlint/prelude.rb +31 -0
- data/lib/adlint/util.rb +1 -3
- data/lib/adlint/version.rb +2 -2
- 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 +17 -3
- data/share/doc/users_guide_en.texi +17 -1
- data/share/doc/users_guide_ja.html +20 -6
- data/share/doc/users_guide_ja.texi +20 -4
- metadata +2 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,38 @@
|
|
1
|
+
Thu Sep 6 15:54:41 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
|
+
|
3
|
+
* release.ga : 2.0.10
|
4
|
+
- Revise value domain management in order not to over-thin value
|
5
|
+
domains of the controlling variables in complexly compounded
|
6
|
+
controlling expression.
|
7
|
+
- Support environment variable substitution in the traits file.
|
8
|
+
|
9
|
+
Thu Sep 6 11:52:08 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
10
|
+
|
11
|
+
* release.rc : 2.0.9
|
12
|
+
- Support environment variable substitution in the traits file.
|
13
|
+
|
14
|
+
Thu Sep 6 11:36:26 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
15
|
+
|
16
|
+
* lib/adlint/prelude.rb : Support environment variable substitution in
|
17
|
+
the traits file.
|
18
|
+
|
19
|
+
Wed Sep 5 16:40:17 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
20
|
+
|
21
|
+
* release.rc : 2.0.7
|
22
|
+
- Revise value domain management in order not to over-thin value
|
23
|
+
domains of the controlling variables in complexly compounded
|
24
|
+
controlling expression.
|
25
|
+
|
26
|
+
Wed Sep 5 16:11:42 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
27
|
+
|
28
|
+
* lib/adlint/c/branch.rb : Revise value domain management in order not
|
29
|
+
to over-thin value domains of the controlling variables in complexly
|
30
|
+
compounded controlling expression.
|
31
|
+
|
32
|
+
* lib/adlint/c/ctrlexpr.rb : Add #complexly_compounded? predicate
|
33
|
+
method.
|
34
|
+
* lib/adlint/c/syntax.rb : Ditto.
|
35
|
+
|
1
36
|
Thu Aug 30 09:56:15 2012 Yutaka Yanoh <yanoh@users.sourceforge.net>
|
2
37
|
|
3
38
|
* release.ga : 2.0.6
|
data/NEWS
CHANGED
@@ -21,6 +21,18 @@
|
|
21
21
|
|
22
22
|
++
|
23
23
|
|
24
|
+
=== \AdLint 2.0.10 is released (2012-09-06)
|
25
|
+
|
26
|
+
==== Changes since the 2.0.6 release
|
27
|
+
|
28
|
+
* Revise value domain management in order not to over-thin value domains of the
|
29
|
+
controlling variables in complexly compounded controlling expression
|
30
|
+
* Support environment variable substitution in the traits file
|
31
|
+
|
32
|
+
See the file
|
33
|
+
{ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
|
34
|
+
for more details.
|
35
|
+
|
24
36
|
=== \AdLint 2.0.6 is released (2012-08-30)
|
25
37
|
|
26
38
|
==== Changes since the 2.0.2 release
|
@@ -30,10 +42,6 @@
|
|
30
42
|
* Revise variable cross-reference extraction in order to output only about the
|
31
43
|
outmost-variable when its element or member is accessed
|
32
44
|
|
33
|
-
See the file
|
34
|
-
{ChangeLog}[http://adlint.sourceforge.net/pmwiki/upload.d/Main/ChangeLog]
|
35
|
-
for more details.
|
36
|
-
|
37
45
|
=== \AdLint 2.0.2 is released (2012-08-28)
|
38
46
|
|
39
47
|
==== Changes since the 2.0.0 release
|
data/lib/adlint/c/branch.rb
CHANGED
@@ -82,13 +82,24 @@ module C #:nodoc:
|
|
82
82
|
environment.enter_versioning_group if first?
|
83
83
|
environment.begin_versioning
|
84
84
|
|
85
|
-
@controlling_expression =
|
86
|
-
|
85
|
+
@controlling_expression =
|
86
|
+
ControllingExpression.new(interpreter, self, expression)
|
87
|
+
if ensure_condition(@controlling_expression)
|
87
88
|
@break_event = BreakEvent.catch { yield(self) }
|
88
89
|
end
|
89
90
|
|
90
91
|
ensure
|
91
|
-
|
92
|
+
if @controlling_expression.complexly_compounded?
|
93
|
+
# NOTE: Give up value domain thinning of the controlling variables,
|
94
|
+
# because the controlling expression is too complex to manage
|
95
|
+
# value domains correctly.
|
96
|
+
# TODO: Study about introducing inter-value-constraints to correctly
|
97
|
+
# manage value domains of controlling variables related with each
|
98
|
+
# other.
|
99
|
+
environment.end_versioning(false)
|
100
|
+
else
|
101
|
+
environment.end_versioning(break_with_return?)
|
102
|
+
end
|
92
103
|
environment.leave_versioning_group(!@group.complete?) if final?
|
93
104
|
|
94
105
|
if final? && @group.complete?
|
@@ -119,12 +130,12 @@ module C #:nodoc:
|
|
119
130
|
end
|
120
131
|
|
121
132
|
private
|
122
|
-
def ensure_condition(controlling_expression
|
133
|
+
def ensure_condition(controlling_expression)
|
123
134
|
case
|
124
135
|
when narrowing?
|
125
|
-
controlling_expression.ensure_true_by_narrowing
|
136
|
+
controlling_expression.ensure_true_by_narrowing.commit!
|
126
137
|
when widening?
|
127
|
-
controlling_expression.ensure_true_by_widening
|
138
|
+
controlling_expression.ensure_true_by_widening.commit!
|
128
139
|
end
|
129
140
|
@group.all_controlling_variables_value_exist?
|
130
141
|
end
|
data/lib/adlint/c/ctrlexpr.rb
CHANGED
@@ -55,15 +55,20 @@ module C #:nodoc:
|
|
55
55
|
# <-- StrictObjectDerivation
|
56
56
|
# <-- DelayedObjectDerivation
|
57
57
|
class ControllingExpression
|
58
|
-
|
58
|
+
include SyntaxNodeCollector
|
59
|
+
|
60
|
+
def initialize(interpreter, branch, expression = nil)
|
59
61
|
@interpreter = interpreter
|
60
62
|
@branch = branch
|
63
|
+
@expression = expression
|
61
64
|
@manipulators = []
|
62
65
|
end
|
63
66
|
|
64
|
-
def ensure_true_by_narrowing(
|
65
|
-
|
66
|
-
|
67
|
+
def ensure_true_by_narrowing(other_expr = nil)
|
68
|
+
target_expr = other_expr ? other_expr : @expression
|
69
|
+
|
70
|
+
if target_expr
|
71
|
+
new_manip = ValueDomainNarrower.new(@interpreter, target_expr)
|
67
72
|
begin
|
68
73
|
if @branch.implicit_condition?
|
69
74
|
@interpreter._quiet = true
|
@@ -83,9 +88,11 @@ module C #:nodoc:
|
|
83
88
|
new_manip
|
84
89
|
end
|
85
90
|
|
86
|
-
def ensure_true_by_widening(
|
87
|
-
|
88
|
-
|
91
|
+
def ensure_true_by_widening(other_expr = nil)
|
92
|
+
target_expr = other_expr ? other_expr : @expression
|
93
|
+
|
94
|
+
if target_expr
|
95
|
+
new_manip = ValueDomainWidener.new(@interpreter, target_expr)
|
89
96
|
begin
|
90
97
|
if @branch.implicit_condition?
|
91
98
|
@interpreter._quiet = true
|
@@ -120,6 +127,12 @@ module C #:nodoc:
|
|
120
127
|
def restore_affected_variables
|
121
128
|
@manipulators.each { |manip| manip.restore! }
|
122
129
|
end
|
130
|
+
|
131
|
+
def complexly_compounded?
|
132
|
+
# NOTE: This method determines whether the controlling expression is too
|
133
|
+
# complex to thinning value domains of controlling variables.
|
134
|
+
@expression && !collect_logical_and_expressions(@expression).empty?
|
135
|
+
end
|
123
136
|
end
|
124
137
|
|
125
138
|
class ValueDomainManipulator < SyntaxTreeVisitor
|
data/lib/adlint/c/syntax.rb
CHANGED
@@ -324,6 +324,17 @@ module C #:nodoc:
|
|
324
324
|
end
|
325
325
|
module_function :collect_additive_expressions
|
326
326
|
|
327
|
+
def collect_logical_and_expressions(node)
|
328
|
+
if node
|
329
|
+
LogicalAndExpressionCollector.new.tap { |collector|
|
330
|
+
node.accept(collector)
|
331
|
+
}.logical_and_expressions
|
332
|
+
else
|
333
|
+
[]
|
334
|
+
end
|
335
|
+
end
|
336
|
+
module_function :collect_logical_and_expressions
|
337
|
+
|
327
338
|
def collect_generic_labeled_statements(node)
|
328
339
|
if node
|
329
340
|
GenericLabeledStatementCollector.new.tap { |collector|
|
@@ -5065,6 +5076,19 @@ module C #:nodoc:
|
|
5065
5076
|
end
|
5066
5077
|
end
|
5067
5078
|
|
5079
|
+
class LogicalAndExpressionCollector < SyntaxTreeVisitor
|
5080
|
+
def initialize
|
5081
|
+
@logical_and_expressions = []
|
5082
|
+
end
|
5083
|
+
|
5084
|
+
attr_reader :logical_and_expressions
|
5085
|
+
|
5086
|
+
def visit_logical_and_expression(node)
|
5087
|
+
super
|
5088
|
+
@logical_and_expressions.push(node)
|
5089
|
+
end
|
5090
|
+
end
|
5091
|
+
|
5068
5092
|
class GenericLabeledStatementCollector < SyntaxTreeVisitor
|
5069
5093
|
def initialize
|
5070
5094
|
@generic_labeled_statements = []
|
data/lib/adlint/exam.rb
CHANGED
data/lib/adlint/prelude.rb
CHANGED
@@ -299,6 +299,37 @@ class SuffixArray < Array
|
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
302
|
+
# NOTE: To support environment variable substitution in YAML file.
|
303
|
+
#
|
304
|
+
# Syntax of embedding environment variable is below;
|
305
|
+
# env_var_specifier : '$' env_var_name
|
306
|
+
# | '$' '{' env_var_name '}'
|
307
|
+
# env_var_name : [A-Za-z_][0-9A-Za-z_]*
|
308
|
+
#
|
309
|
+
# Examples of environment variable as any scalar value;
|
310
|
+
# string_item_1: $VAR
|
311
|
+
# boolean_item: $VAR
|
312
|
+
# decimal_item: $VAR
|
313
|
+
#
|
314
|
+
# Examples of embedding environment variable in string;
|
315
|
+
# string_item_1: "foo${VAR}baz"
|
316
|
+
#
|
317
|
+
class Psych::TreeBuilder < Psych::Handler
|
318
|
+
alias :_orig_scalar :scalar
|
319
|
+
def scalar(value, anchor, tag, plain, quoted, style)
|
320
|
+
_orig_scalar(substitute_environment_variables(value),
|
321
|
+
anchor, tag, plain, quoted, style)
|
322
|
+
end
|
323
|
+
|
324
|
+
private
|
325
|
+
def substitute_environment_variables(string)
|
326
|
+
string.gsub(/(?<!\\)\${?([a-z_][0-9a-z_]*)}?/i) do
|
327
|
+
(value = ENV[$1]) ? value : ""
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
|
302
333
|
if $0 == __FILE__
|
303
334
|
h1 = Hash.lazy_new(1)
|
304
335
|
p h1[0]
|
data/lib/adlint/util.rb
CHANGED
@@ -568,9 +568,7 @@ module AdLint #:nodoc:
|
|
568
568
|
module PackageResolver
|
569
569
|
def package_name_of(class_or_module)
|
570
570
|
if class_or_module.name =~ /\AAdLint::Exam::(.*?)::/
|
571
|
-
$1.sub(/\A./) { |
|
572
|
-
"_#{str.downcase}"
|
573
|
-
}
|
571
|
+
$1.sub(/\A./) { |s| s.downcase }.gsub(/[A-Z]/) { |s| "_#{s.downcase}" }
|
574
572
|
else
|
575
573
|
"core"
|
576
574
|
end
|
data/lib/adlint/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 2.0.
|
3
|
+
<title>AdLint 2.0.10 開発者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 2.0.
|
5
|
+
<meta name="description" content="AdLint 2.0.10 開発者ガイド">
|
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 2.0.
|
47
|
+
<h1 class="settitle">AdLint 2.0.10 開発者ガイド</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 2.0.
|
3
|
+
<title>AdLint 2.0.10 User's Guide</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 2.0.
|
5
|
+
<meta name="description" content="AdLint 2.0.10 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 2.0.
|
47
|
+
<h1 class="settitle">AdLint 2.0.10 User's Guide</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
@@ -999,6 +999,20 @@ generate the template of traits file for the project, <samp><span class="file">G
|
|
999
999
|
% ls adlint
|
1000
1000
|
GNUmakefile adlint_all.sh adlint_files.txt adlint_traits.yml
|
1001
1001
|
adlint_all.bat adlint_cinit.h adlint_pinit.h
|
1002
|
+
</pre>
|
1003
|
+
|
1004
|
+
<p>You can specify environment variable as items in the traits file to be
|
1005
|
+
described.
|
1006
|
+
|
1007
|
+
<p>For example, specify the environment variable <code>ENV_VAR</code> as the item
|
1008
|
+
<code>item</code> like below;
|
1009
|
+
|
1010
|
+
<pre class="verbatim"> item: $ENV_VAR
|
1011
|
+
</pre>
|
1012
|
+
|
1013
|
+
<p>And embed environment variables in a string value like below;
|
1014
|
+
|
1015
|
+
<pre class="verbatim"> item: "prefix${ENV_VAR}suffix"
|
1002
1016
|
</pre>
|
1003
1017
|
|
1004
1018
|
<div class="node">
|
@@ -2,7 +2,7 @@
|
|
2
2
|
@setfilename users_guide_en.info
|
3
3
|
@documentlanguage en
|
4
4
|
@documentencoding utf-8
|
5
|
-
@settitle AdLint 2.0.
|
5
|
+
@settitle AdLint 2.0.10 User's Guide
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -867,6 +867,22 @@ GNUmakefile adlint_all.sh adlint_files.txt adlint_traits.yml
|
|
867
867
|
adlint_all.bat adlint_cinit.h adlint_pinit.h
|
868
868
|
@end verbatim
|
869
869
|
|
870
|
+
You can specify environment variable as items in the traits file to be
|
871
|
+
described.
|
872
|
+
|
873
|
+
For example, specify the environment variable @code{ENV_VAR} as the item
|
874
|
+
@code{item} like below;
|
875
|
+
|
876
|
+
@verbatim
|
877
|
+
item: $ENV_VAR
|
878
|
+
@end verbatim
|
879
|
+
|
880
|
+
And embed environment variables in a string value like below;
|
881
|
+
|
882
|
+
@verbatim
|
883
|
+
item: "prefix${ENV_VAR}suffix"
|
884
|
+
@end verbatim
|
885
|
+
|
870
886
|
|
871
887
|
@node Global Traits
|
872
888
|
@subsection Global Traits
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<html lang="ja">
|
2
2
|
<head>
|
3
|
-
<title>AdLint 2.0.
|
3
|
+
<title>AdLint 2.0.10 利用者ガイド</title>
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
5
|
-
<meta name="description" content="AdLint 2.0.
|
5
|
+
<meta name="description" content="AdLint 2.0.10 利用者ガイド">
|
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 2.0.
|
47
|
+
<h1 class="settitle">AdLint 2.0.10 利用者ガイド</h1>
|
48
48
|
<div class="node">
|
49
49
|
<a name="Top"></a>
|
50
50
|
<p><hr>
|
@@ -1044,15 +1044,29 @@ Up: <a rel="up" accesskey="u" href="#Input">Input</a>
|
|
1044
1044
|
<a href="http://yaml.org/">YAML 形式</a>の設定ファイル(<a href="#Traits-Sample">サンプル</a>)
|
1045
1045
|
に記述します。
|
1046
1046
|
|
1047
|
-
<p>下記のように解析対象プロジェクトのルートディレクトリで <a href="#AdLintize-Command"><samp><span class="command">adlintize</span></samp></a>
|
1048
|
-
|
1049
|
-
|
1047
|
+
<p>下記のように解析対象プロジェクトのルートディレクトリで <a href="#AdLintize-Command"><samp><span class="command">adlintize</span></samp></a> コマンドを実行すると、そのプロジェクト用の特性ファイル
|
1048
|
+
<samp><span class="file">adlint_traits.yml</span></samp> の雛形、および、解析手順を自動化する
|
1049
|
+
<samp><span class="file">GNUmakefile</span></samp> やシェルスクリプトなどを生成することができます。
|
1050
1050
|
|
1051
1051
|
<pre class="verbatim">% cd project
|
1052
1052
|
% adlintize -o adlint
|
1053
1053
|
% ls adlint
|
1054
1054
|
GNUmakefile adlint_all.sh adlint_files.txt adlint_traits.yml
|
1055
1055
|
adlint_all.bat adlint_cinit.h adlint_pinit.h
|
1056
|
+
</pre>
|
1057
|
+
|
1058
|
+
<p>後述の特性ファイルの各設定項目には、環境変数を指定することもできます。
|
1059
|
+
|
1060
|
+
<p>例えば、設定項目 <code>item</code> に、環境変数 <code>ENV_VAR</code> の値を指定する場合は下
|
1061
|
+
記のように記述します。
|
1062
|
+
|
1063
|
+
<pre class="verbatim"> item: $ENV_VAR
|
1064
|
+
</pre>
|
1065
|
+
|
1066
|
+
<p>また、文字列形式の設定項目に、環境変数の値を埋め込んだ文字列を指定する場合は下
|
1067
|
+
記のように記述します。
|
1068
|
+
|
1069
|
+
<pre class="verbatim"> item: "prefix${ENV_VAR}suffix"
|
1056
1070
|
</pre>
|
1057
1071
|
|
1058
1072
|
<div class="node">
|
@@ -2,7 +2,7 @@
|
|
2
2
|
@setfilename users_guide_ja.info
|
3
3
|
@documentlanguage ja
|
4
4
|
@documentencoding utf-8
|
5
|
-
@settitle AdLint 2.0.
|
5
|
+
@settitle AdLint 2.0.10 利用者ガイド
|
6
6
|
|
7
7
|
@copying
|
8
8
|
Copyright (C) 2010-2012, OGIS-RI Co.,Ltd.
|
@@ -904,9 +904,9 @@ Command, @command{adlint_sma}}、@ref{AdLint CMA Command, @command{adlint_cma}}
|
|
904
904
|
に記述します。
|
905
905
|
|
906
906
|
下記のように解析対象プロジェクトのルートディレクトリで @ref{AdLintize Command,
|
907
|
-
@command{adlintize}}
|
908
|
-
|
909
|
-
|
907
|
+
@command{adlintize}} コマンドを実行すると、そのプロジェクト用の特性ファイル
|
908
|
+
@file{adlint_traits.yml} の雛形、および、解析手順を自動化する
|
909
|
+
@file{GNUmakefile} やシェルスクリプトなどを生成することができます。
|
910
910
|
|
911
911
|
@verbatim
|
912
912
|
% cd project
|
@@ -916,6 +916,22 @@ GNUmakefile adlint_all.sh adlint_files.txt adlint_traits.yml
|
|
916
916
|
adlint_all.bat adlint_cinit.h adlint_pinit.h
|
917
917
|
@end verbatim
|
918
918
|
|
919
|
+
後述の特性ファイルの各設定項目には、環境変数を指定することもできます。
|
920
|
+
|
921
|
+
例えば、設定項目 @code{item} に、環境変数 @code{ENV_VAR} の値を指定する場合は下
|
922
|
+
記のように記述します。
|
923
|
+
|
924
|
+
@verbatim
|
925
|
+
item: $ENV_VAR
|
926
|
+
@end verbatim
|
927
|
+
|
928
|
+
また、文字列形式の設定項目に、環境変数の値を埋め込んだ文字列を指定する場合は下
|
929
|
+
記のように記述します。
|
930
|
+
|
931
|
+
@verbatim
|
932
|
+
item: "prefix${ENV_VAR}suffix"
|
933
|
+
@end verbatim
|
934
|
+
|
919
935
|
|
920
936
|
@node Global Traits
|
921
937
|
@subsection グローバル特性
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adlint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'AdLint is a source code static analyzer.
|
15
15
|
|