haml_i18n_lint 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -30
- data/examples/output_yaml.rb +18 -0
- data/examples/react.rb +7 -0
- data/examples/sample.rb +28 -0
- data/examples/total_num.rb +9 -0
- data/haml_i18n_lint.gemspec +0 -2
- data/lib/haml_i18n_lint/config.rb +7 -5
- data/lib/haml_i18n_lint/linter/compiler_extension.rb +19 -14
- data/lib/haml_i18n_lint/linter.rb +36 -12
- data/lib/haml_i18n_lint/version.rb +1 -1
- metadata +7 -25
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39727a8149db51ef830a77e981f889ffafe595e4
|
4
|
+
data.tar.gz: ca228553e73a66d68b0e73ac2dee226f754fa7e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4ed255dac1812a7dfaca0e92f15f688ae389028b4470462e173efc4609732dc774d3d36022df107a604117f5a2be67d1ae6ea9caa235149f25eef392403409d
|
7
|
+
data.tar.gz: 8b18fd3d44b73d9499625179d6dd29a7dc87bf7e538f82e361b377374579c7e7a2bac5a36f2e3d684bca4e326178caba9a002a80c07e7a1b408ab4985ce4560e
|
data/README.md
CHANGED
@@ -33,36 +33,7 @@ Or install it yourself as:
|
|
33
33
|
-c, --config=FILE configuration file
|
34
34
|
-f, --files=PATTERN pattern to find Haml template files, default: -f '**/*.haml'
|
35
35
|
|
36
|
-
The configuration file
|
37
|
-
|
38
|
-
# You can override Config#need_i18n? that returns the content in Haml template need i18n or not.
|
39
|
-
def need_i18n?(content)
|
40
|
-
# the default behaviours is ignore white spaces and digits
|
41
|
-
/^[\s]+$/ !~ content && /\p{Alpha}/ =~ content
|
42
|
-
end
|
43
|
-
|
44
|
-
# You can override Config#report in configuration file
|
45
|
-
# to customize output format or send result to other location.
|
46
|
-
#
|
47
|
-
# The default output format is like following:
|
48
|
-
#
|
49
|
-
# $ haml_i18n_lint
|
50
|
-
# test/fixtures/hi.html.haml:4
|
51
|
-
# 3: %head
|
52
|
-
# 4: %title Hi
|
53
|
-
# 5: %body
|
54
|
-
#
|
55
|
-
# For example, to use short format:
|
56
|
-
def report(result)
|
57
|
-
result.matched_nodes.each do |node|
|
58
|
-
puts "#{result.filename}:#{node.line}"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# You can override Config#files for complex file pattern.
|
63
|
-
def files
|
64
|
-
Dir['**/*.haml'].reject { |path| path.start_with?('app/assets/') || path.start_with?('node_modules') }
|
65
|
-
end
|
36
|
+
The configuration file examples are in the `examples` directory.
|
66
37
|
|
67
38
|
## Development
|
68
39
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
def report(result_set)
|
4
|
+
t = {}
|
5
|
+
result_set.each_with_object(t['en'] = {}) do |result, t|
|
6
|
+
keys = result.filename.gsub(%r{^app/views/}, '').gsub(/(\.html)?\.haml$/, '').split('/')
|
7
|
+
t = keys.inject(t) { |t, key| t[key] ||= {} }
|
8
|
+
key = "L#{result.node.line}"
|
9
|
+
unless t.key?(key)
|
10
|
+
t[key] = result.text
|
11
|
+
next
|
12
|
+
end
|
13
|
+
key << "-1"
|
14
|
+
key.next! while t.key?(key)
|
15
|
+
t[key] = result.text
|
16
|
+
end
|
17
|
+
puts t.to_yaml
|
18
|
+
end
|
data/examples/react.rb
ADDED
data/examples/sample.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# You can override Config#need_i18n? that returns the content in Haml template need i18n or not.
|
2
|
+
def need_i18n?(content)
|
3
|
+
# the default behaviours is ignore white spaces and digits
|
4
|
+
/^[\s]+$/ !~ content && /\p{Alpha}/ =~ content
|
5
|
+
end
|
6
|
+
|
7
|
+
# You can override Config#report in configuration file
|
8
|
+
# to customize output format or send result to other location.
|
9
|
+
#
|
10
|
+
# The default output format is like following:
|
11
|
+
#
|
12
|
+
# $ haml_i18n_lint
|
13
|
+
# test/fixtures/hi.html.haml:4
|
14
|
+
# 3: %head
|
15
|
+
# 4: %title Hi
|
16
|
+
# 5: %body
|
17
|
+
#
|
18
|
+
# For example, to use short format:
|
19
|
+
def report(result)
|
20
|
+
result.each do |r|
|
21
|
+
puts "%30s\t%s" % ["#{r.filename}:#{r.node.line}", r.text]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# You can override Config#files for complex file pattern.
|
26
|
+
def files
|
27
|
+
Dir['**/*.haml'].reject { |path| path.start_with?('app/assets/') || path.start_with?('node_modules') }
|
28
|
+
end
|
data/haml_i18n_lint.gemspec
CHANGED
@@ -8,8 +8,6 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = HamlI18nLint::VERSION
|
9
9
|
spec.authors = ["Seiei Miyagi"]
|
10
10
|
spec.email = ["hanachin@gmail.com"]
|
11
|
-
spec.cert_chain = ["certs/hanachin.pem"]
|
12
|
-
spec.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
|
13
11
|
|
14
12
|
spec.summary = "find out not translated yet plain text from your Haml template"
|
15
13
|
spec.homepage = "https://github.com/okinawarb/haml_i18n_lint"
|
@@ -19,13 +19,15 @@ module HamlI18nLint
|
|
19
19
|
|
20
20
|
# Output the formatted result
|
21
21
|
#
|
22
|
-
# @param result [Linter::
|
23
|
-
def report(
|
24
|
-
print '.' and return if
|
22
|
+
# @param result [Linter::ResultSet] the lint result
|
23
|
+
def report(result_set)
|
24
|
+
print '.' and return if result_set.success?
|
25
25
|
|
26
26
|
puts
|
27
|
-
|
28
|
-
|
27
|
+
files = Hash.new { |h, k| h[k] = File.readlines(k) }
|
28
|
+
result_set.each do |result|
|
29
|
+
file = files[result.filename]
|
30
|
+
node = result.node
|
29
31
|
puts "#{result.filename}:#{node.line}"
|
30
32
|
puts "#{node.line-1}: #{file[node.line - 2]}" if file[node.line - 2] && !(node.line - 2).negative?
|
31
33
|
puts "#{node.line}: #{file[node.line - 1]}"
|
@@ -4,36 +4,41 @@ module HamlI18nLint
|
|
4
4
|
|
5
5
|
def compile_script
|
6
6
|
super
|
7
|
-
|
7
|
+
lint_script(@node.value[:text])
|
8
8
|
end
|
9
9
|
|
10
10
|
def compile_plain
|
11
11
|
super
|
12
|
-
|
12
|
+
text = @node.value[:text]
|
13
|
+
lint_add(text) if lint_config.need_i18n?(text)
|
13
14
|
end
|
14
15
|
|
15
16
|
def lint_attributes_hashes
|
16
17
|
@node.value[:attributes_hashes]
|
17
18
|
end
|
18
19
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
script_need_i18n?("{#{attributes_hash}}")
|
20
|
+
def lint_attributes
|
21
|
+
lint_attributes_hashes.any? do |attributes_hash|
|
22
|
+
lint_script("{#{attributes_hash}}")
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
def compile_tag
|
27
27
|
super
|
28
28
|
if @node.value[:parse]
|
29
|
-
|
30
|
-
|
29
|
+
lint_script(@node.value[:value])
|
31
30
|
else
|
32
|
-
|
31
|
+
value = @node.value[:value]
|
32
|
+
lint_add(value) if lint_config.need_i18n?(value)
|
33
33
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
|
35
|
+
placeholder = @node.value.dig(:attributes, 'placeholder') || ""
|
36
|
+
lint_add(placeholder) if lint_config.need_i18n?(placeholder)
|
37
|
+
|
38
|
+
value = @node.value.dig(:attributes, 'value') || ""
|
39
|
+
lint_add(value) if lint_config.need_i18n?(value)
|
40
|
+
|
41
|
+
lint_attributes
|
37
42
|
end
|
38
43
|
|
39
44
|
private
|
@@ -101,7 +106,7 @@ module HamlI18nLint
|
|
101
106
|
lint_command?(sexp, m) || lint_fcall?(sexp, m) || lint_call?(sexp, m)
|
102
107
|
end
|
103
108
|
|
104
|
-
def
|
109
|
+
def lint_script(script)
|
105
110
|
script = script.dup
|
106
111
|
if Ripper.lex(script.rstrip).any? { |(_, on_kw, kw_do)| on_kw == :on_kw && kw_do == "do" }
|
107
112
|
script << "\nend\n"
|
@@ -127,7 +132,7 @@ module HamlI18nLint
|
|
127
132
|
|
128
133
|
walk.(sexp)
|
129
134
|
|
130
|
-
string_literal_found
|
135
|
+
lint_add(script) if string_literal_found
|
131
136
|
end
|
132
137
|
|
133
138
|
end
|
@@ -6,17 +6,42 @@ module HamlI18nLint
|
|
6
6
|
# Raised if failed to parse the attributes hash
|
7
7
|
class AttributesParseError < StandardError; end
|
8
8
|
|
9
|
-
# The lint result
|
10
|
-
class Result < Struct.new(:filename, :
|
11
|
-
# @!attribute [r] matched_nodes
|
12
|
-
# @return [Array<Haml::Parser::ParseNode>] the nodes that needs i18n.
|
13
|
-
|
9
|
+
# The lint result
|
10
|
+
class Result < Struct.new(:filename, :node, :text)
|
14
11
|
# @!attribute [r] filename
|
15
12
|
# @return [String] name of the linted file
|
16
13
|
|
14
|
+
# @!attribute [r] node
|
15
|
+
# @return [Haml::Parser::ParseNode] the node that needs i18n.
|
16
|
+
|
17
|
+
# @!attribute [r] text
|
18
|
+
# @return [String] the text that needs i18n.
|
19
|
+
end
|
20
|
+
|
21
|
+
# The lint results
|
22
|
+
class ResultSet
|
23
|
+
include Enumerable
|
24
|
+
|
25
|
+
# @param filename [String]
|
26
|
+
def initialize
|
27
|
+
@results = []
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param result [Result] the result
|
31
|
+
def add_result(result)
|
32
|
+
@results << result
|
33
|
+
end
|
34
|
+
|
35
|
+
# @yield [result] Gives each result to a block.
|
36
|
+
def each
|
37
|
+
@results.each do |r|
|
38
|
+
yield r
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
17
42
|
# @return [true, false] passed lint or not.
|
18
43
|
def success?
|
19
|
-
|
44
|
+
count.zero?
|
20
45
|
end
|
21
46
|
end
|
22
47
|
|
@@ -30,7 +55,7 @@ module HamlI18nLint
|
|
30
55
|
#
|
31
56
|
# @param filename [String] the filename
|
32
57
|
# @param template [String] the Haml template
|
33
|
-
# @return [Linter::
|
58
|
+
# @return [Linter::ResultSet] the result of lint
|
34
59
|
# @raise [Linter::AttributesParseError] if failed to parse attributes hash in the template.
|
35
60
|
def lint(filename:, template:)
|
36
61
|
haml_options = ::Haml::Options.new
|
@@ -39,7 +64,6 @@ module HamlI18nLint
|
|
39
64
|
compiler(haml_options).compile(node)
|
40
65
|
end
|
41
66
|
|
42
|
-
|
43
67
|
private
|
44
68
|
|
45
69
|
def parse(haml_options, template)
|
@@ -52,7 +76,7 @@ module HamlI18nLint
|
|
52
76
|
|
53
77
|
def compiler(haml_options)
|
54
78
|
config = @config
|
55
|
-
|
79
|
+
result_set = ResultSet.new
|
56
80
|
|
57
81
|
ext = compiler_extension
|
58
82
|
compiler_result_extension = Module.new do
|
@@ -60,7 +84,7 @@ module HamlI18nLint
|
|
60
84
|
|
61
85
|
define_method(:compile) do |node|
|
62
86
|
super(node)
|
63
|
-
|
87
|
+
result_set
|
64
88
|
end
|
65
89
|
|
66
90
|
private
|
@@ -69,8 +93,8 @@ module HamlI18nLint
|
|
69
93
|
config
|
70
94
|
end
|
71
95
|
|
72
|
-
define_method(:
|
73
|
-
|
96
|
+
define_method(:lint_add) do |text|
|
97
|
+
result_set.add_result(Result.new(haml_options[:filename], @node, text))
|
74
98
|
end
|
75
99
|
end
|
76
100
|
|
metadata
CHANGED
@@ -1,36 +1,14 @@
|
|
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.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Seiei Miyagi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhoYW5h
|
14
|
-
Y2hpbjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
|
15
|
-
MB4XDTE3MDUwNDE0NDYxOVoXDTE4MDUwNDE0NDYxOVowPzERMA8GA1UEAwwIaGFu
|
16
|
-
YWNoaW4xFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
17
|
-
bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN03A8Jvk7k0aVLmIHrj
|
18
|
-
soZLOppADifbdH+FoXUfWXFeu9x/hq8UsuMyTuSF6oNZRihzk7yakKBcv8B44wc2
|
19
|
-
Kfui97h+UOqBib5oPZOrJjW34dSfnHgdsPskZRK1yvMW0X88q7K+9iBT78Xpkf40
|
20
|
-
XkDh7mEyA0sC25n8BBTg3HpPMNXtQazR0UrtSH/Uyu2t7Sy4QQVKFYfVdfITfMoG
|
21
|
-
i7X/2cXs0ao6dLOK8H1lodxZ+2Dc5UQCrerVXKvVjAgZhJIN7qgbpAfuc+KFpGhq
|
22
|
-
pvkFaoOJ/NCg54DDiJYhZMm2X3NtjRRE3Ujt4bwO6vVlr5aPU2/vPCvsiyF1PmO+
|
23
|
-
a+UCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFMug
|
24
|
-
kMbzYl73rLFxRlmgKeNAiSZjMB0GA1UdEQQWMBSBEmhhbmFjaGluQGdtYWlsLmNv
|
25
|
-
bTAdBgNVHRIEFjAUgRJoYW5hY2hpbkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
|
26
|
-
ggEBAFBV/OUPBF6DhEe/Q1bojFYwRdLI+JbDAoH97GRuBzKokbW7a4k5EGMw4aLx
|
27
|
-
RXH75W+vmsG1z/RE7lpD+T7Uf+ZuGwCIhFsGiZBcbBbinz4MEsqjGwu2/OPOgbYK
|
28
|
-
alk+o48ier71CaSsfz83hSAzklJ7g6BocJCWROXuVzX9eCw7YB3F4xNzdw8HxHkA
|
29
|
-
WbyMQMURxOX5Em9t+EgSU9Odx0tJgnhygUSdTJknavnpaZUa2odWS4+wagh8nXxS
|
30
|
-
+zDzgwp9Z4A8i47ioz1YEGIkQhDKZeGQznwkht0zsrtswEAiOisL5uJDtWvQiwt6
|
31
|
-
a9nBgrpUm8NHrucdUDtMYjixgmU=
|
32
|
-
-----END CERTIFICATE-----
|
33
|
-
date: 2017-05-06 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-13 00:00:00.000000000 Z
|
34
12
|
dependencies:
|
35
13
|
- !ruby/object:Gem::Dependency
|
36
14
|
name: haml
|
@@ -135,6 +113,10 @@ files:
|
|
135
113
|
- bin/console
|
136
114
|
- bin/setup
|
137
115
|
- certs/hanachin.pem
|
116
|
+
- examples/output_yaml.rb
|
117
|
+
- examples/react.rb
|
118
|
+
- examples/sample.rb
|
119
|
+
- examples/total_num.rb
|
138
120
|
- exe/haml_i18n_lint
|
139
121
|
- gemfiles/haml_4.gemfile
|
140
122
|
- gemfiles/haml_5.gemfile
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
Binary file
|
metadata.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
eL�'XU�*�e��ˠ�0������m-x�4��kQ�yw[���N3Տ>F����h�LO�vX*����$���L�Kz` ��{@�(�eH ���_�Y���j����r�?���z�P>�����l�>��õ�ߧ���C_Q��ƫ�\�Y�p(�9V�#�y?z3���k������ ����sJ1=����W�8Y����>|Qc�0�`�ΖRr�����j���1�^%�R66Ə��q�Y��s,t����
|