haml_i18n_lint 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +3 -3
- data/lib/haml_i18n_lint/config.rb +12 -2
- data/lib/haml_i18n_lint/linter/compiler_extension.rb +82 -37
- data/lib/haml_i18n_lint/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fba6d5c77e333974e53abb7dcdd20f2d7422d686
|
4
|
+
data.tar.gz: 4eb6802848c56cf739814e16c008661124c6a064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d43e795c867d365cb13d305838e6e073a58ca355c0d19b6c44666a99900c47e7842d4a128a9e8d708e9766095c0813fb31babc1cf1bd33ba2216d929fc303a4c
|
7
|
+
data.tar.gz: 3de43811603c2d3c223a0b7a7884d1b6eba9e7b1ebb4f7e629a9932095f951587f9b8cef6b477b8cb43e0e7f0fa037f2c8f4fce4972527b2510f7e5b6031d119
|
checksums.yaml.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
~ ��UX�bV��F}?�o��ovc� �kƶ6m�;�]�_�p�
|
2
|
+
.�Pu��F���m��:���CX"��[�������m?�(NM�#U�,0�1�16�7�!]zy&�I4m�Ke��n ����|d�۫�歐qT����k�l¹B���쌣�/�y����a�O�f��e��.��ƀ�t��k�]�?�D�U���
|
3
|
+
�
|
@@ -42,12 +42,22 @@ module HamlI18nLint
|
|
42
42
|
|
43
43
|
# @return [String] the list of methods, which takes string. The string is no translation required.
|
44
44
|
def ignore_methods
|
45
|
-
%w(
|
45
|
+
%w(
|
46
|
+
asset_path
|
47
|
+
image_path
|
48
|
+
image_tag
|
49
|
+
javascript_include_tag
|
50
|
+
pluralize
|
51
|
+
render
|
52
|
+
singularize
|
53
|
+
stylesheet_link_tag
|
54
|
+
t
|
55
|
+
)
|
46
56
|
end
|
47
57
|
|
48
58
|
# @return [String] the list of key of attributes hash. The key is no translation required.
|
49
59
|
def ignore_keys
|
50
|
-
%w(id class
|
60
|
+
%w(id class style type lang selected checked href src language rel media method controller action)
|
51
61
|
end
|
52
62
|
|
53
63
|
private
|
@@ -19,32 +19,7 @@ module HamlI18nLint
|
|
19
19
|
def lint_attribute_need_i18n?
|
20
20
|
attributes_hashes = lint_attributes_hashes
|
21
21
|
attributes_hashes.any? do |attributes_hash|
|
22
|
-
|
23
|
-
program, ((hash,(assoclist_from_args,assocs)),) = sexp
|
24
|
-
|
25
|
-
unless program == :program &&
|
26
|
-
hash == :hash &&
|
27
|
-
assoclist_from_args == :assoclist_from_args &&
|
28
|
-
assocs.respond_to?(:all?) &&
|
29
|
-
assocs.all? { |assoc| assoc.first == :assoc_new }
|
30
|
-
raise AttributesParseError
|
31
|
-
end
|
32
|
-
|
33
|
-
assocs.any? do |assoc|
|
34
|
-
assoc_new, (_label, key, _pos), value = assoc
|
35
|
-
|
36
|
-
next if lint_config.ignore_keys.any? { |k| "#{k}:" == key }
|
37
|
-
|
38
|
-
raise AttributesParseError unless assoc_new == :assoc_new
|
39
|
-
|
40
|
-
string_literal, *strings = value
|
41
|
-
next unless string_literal == :string_literal
|
42
|
-
strings.any? do |(string_content, (tstring_content,val,pos))|
|
43
|
-
string_content == :string_content &&
|
44
|
-
tstring_content == :@tstring_content &&
|
45
|
-
lint_config.need_i18n?(val)
|
46
|
-
end
|
47
|
-
end
|
22
|
+
script_need_i18n?("{#{attributes_hash}}")
|
48
23
|
end
|
49
24
|
end
|
50
25
|
|
@@ -52,6 +27,7 @@ module HamlI18nLint
|
|
52
27
|
super
|
53
28
|
if @node.value[:parse]
|
54
29
|
lint_add_matched_node(@node) if script_need_i18n?(@node.value[:value])
|
30
|
+
|
55
31
|
else
|
56
32
|
lint_add_matched_node(@node) if lint_config.need_i18n?(@node.value[:value])
|
57
33
|
end
|
@@ -62,27 +38,96 @@ module HamlI18nLint
|
|
62
38
|
|
63
39
|
private
|
64
40
|
|
41
|
+
def lint_aref?(sexp)
|
42
|
+
sexp.first == :aref
|
43
|
+
end
|
44
|
+
|
45
|
+
def lint_assoc_new?(sexp, key)
|
46
|
+
return false unless sexp.first == :assoc_new
|
47
|
+
|
48
|
+
_assoc_new, assoc_key, _value = sexp
|
49
|
+
|
50
|
+
type, k, _lineno = assoc_key
|
51
|
+
|
52
|
+
case type
|
53
|
+
when :@label
|
54
|
+
return k == "#{key}:"
|
55
|
+
when :dyna_symbol
|
56
|
+
return k.size == 2 &&
|
57
|
+
k.first == :string_content &&
|
58
|
+
k.last[0] == :@tstring_content &&
|
59
|
+
k.last[1] == key
|
60
|
+
end
|
61
|
+
|
62
|
+
false
|
63
|
+
end
|
64
|
+
|
65
|
+
def lint_command?(sexp, method_name)
|
66
|
+
return unless sexp.first == :command
|
67
|
+
|
68
|
+
_command, (ident, m, _lineno), * = sexp
|
69
|
+
|
70
|
+
ident == :@ident && m == method_name
|
71
|
+
end
|
72
|
+
|
73
|
+
def lint_fcall?(sexp, method_name)
|
74
|
+
return unless sexp.first == :method_add_arg
|
75
|
+
|
76
|
+
_method_add_arg, (fcall, (ident, m, _lineno)), * = sexp
|
77
|
+
|
78
|
+
fcall == :fcall && ident == :@ident && m == method_name
|
79
|
+
end
|
80
|
+
|
81
|
+
def lint_call?(sexp, method_name)
|
82
|
+
return unless sexp.first == :method_add_arg
|
83
|
+
|
84
|
+
_method_add_arg, (call, _receiver, _dot, (ident, m, _lineno)), * = sexp
|
85
|
+
|
86
|
+
call == :call && ident == :@ident && m == method_name
|
87
|
+
end
|
88
|
+
|
89
|
+
def lint_string_literal?(sexp)
|
90
|
+
sexp.first == :string_literal
|
91
|
+
end
|
92
|
+
|
93
|
+
def lint_string_literal_need_i18n?(sexp)
|
94
|
+
exps = sexp.flatten
|
95
|
+
exps.each_with_index.any? do |exp, i|
|
96
|
+
exp == :@tstring_content && exps[i + 1].is_a?(String) && lint_config.need_i18n?(exps[i + 1])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def lint_ignore_method?(sexp, m)
|
101
|
+
lint_command?(sexp, m) || lint_fcall?(sexp, m) || lint_call?(sexp, m)
|
102
|
+
end
|
103
|
+
|
65
104
|
def script_need_i18n?(script)
|
66
105
|
script = script.dup
|
67
106
|
if Ripper.lex(script.rstrip).any? { |(_, on_kw, kw_do)| on_kw == :on_kw && kw_do == "do" }
|
68
107
|
script << "\nend\n"
|
69
108
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
109
|
+
sexp = Ripper.sexp(script)
|
110
|
+
|
111
|
+
string_literal_found = false
|
112
|
+
walk = -> (sexp) do
|
113
|
+
return if !sexp.is_a?(Array)
|
114
|
+
return if lint_aref?(sexp)
|
115
|
+
return if lint_config.ignore_methods.any? { |m| lint_ignore_method?(sexp, m) }
|
116
|
+
return if lint_config.ignore_keys.any? { |k| lint_assoc_new?(sexp, k) }
|
117
|
+
|
118
|
+
if lint_string_literal?(sexp) && lint_string_literal_need_i18n?(sexp)
|
119
|
+
string_literal_found = true
|
120
|
+
return
|
76
121
|
end
|
77
|
-
end
|
78
122
|
|
79
|
-
|
80
|
-
|
81
|
-
program[i, 3] == [:assoc_new, :@label, "#{k}:"] && program[i + 5] == :string_literal
|
123
|
+
sexp.each do |sexp|
|
124
|
+
walk.(sexp)
|
82
125
|
end
|
83
126
|
end
|
84
127
|
|
85
|
-
|
128
|
+
walk.(sexp)
|
129
|
+
|
130
|
+
string_literal_found
|
86
131
|
end
|
87
132
|
|
88
133
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: haml_i18n_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seiei Miyagi
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
+zDzgwp9Z4A8i47ioz1YEGIkQhDKZeGQznwkht0zsrtswEAiOisL5uJDtWvQiwt6
|
31
31
|
a9nBgrpUm8NHrucdUDtMYjixgmU=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2017-05-
|
33
|
+
date: 2017-05-06 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: haml
|
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
170
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.6.
|
171
|
+
rubygems_version: 2.6.11
|
172
172
|
signing_key:
|
173
173
|
specification_version: 4
|
174
174
|
summary: find out not translated yet plain text from your Haml template
|
metadata.gz.sig
CHANGED
Binary file
|