erb_lint 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a049e3c1eca3e9c562498feb09d4f6c5ddff17c
4
- data.tar.gz: 006061a153ef9e833e59f0ed62214755d5b38ae5
3
+ metadata.gz: 0ae1dbd574b00046985466aacce7a126e9a61b34
4
+ data.tar.gz: 1649ae3b899e23ee9c02f5f40dfd6a9db02e2008
5
5
  SHA512:
6
- metadata.gz: 3881b31aac9d98e16e47f63196a8bfedfec5469effd8bb0ce7c203185af82d8c73207469cf7e152a1437abeb2f76af1c453b569e88dd9059cf451e9b82b78331
7
- data.tar.gz: 77682b7159225e7d9b2022ea8ee740d0c9cca7c12a3036ee1aa95e8bc403bb1a80462836a3ef67b79f2d71afbc2fb95ab6ebe5832cccaf6f8224f4576e85b3a7
6
+ metadata.gz: d6571d993f2acc94689f7711adb041dbca684b696f22548d85ed5af44a530143adf0acca04de2f19b46313223fbdeb8a3d539ac75827fd07d010c9280ef809d1
7
+ data.tar.gz: 1bd62fde864706db8442b6f03290ab71dcf4e94571aee526c425781469f5010f4d78ce8091cae3264f3a4d8927d5f4584f3d75c5770e056458f3f55decc4a69a
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'better_html/tree/tag'
4
+
5
+ module ERBLint
6
+ module Linters
7
+ # Checks for hardcoded strings. Useful if you want to ensure a string can be translated using i18n.
8
+ class HardCodedString < Linter
9
+ include LinterRegistry
10
+
11
+ def offenses(processed_source)
12
+ hardcoded_strings = processed_source.ast.descendants(:text).each_with_object([]) do |text_node, to_check|
13
+ next if javascript?(processed_source, text_node)
14
+
15
+ offended_str = text_node.to_a.find { |node| relevant_node(node) }
16
+ to_check << [text_node, offended_str] if offended_str
17
+ end
18
+
19
+ hardcoded_strings.compact.map do |text_node, offended_str|
20
+ Offense.new(
21
+ self,
22
+ processed_source.to_source_range(text_node.loc.start, text_node.loc.stop),
23
+ message(offended_str)
24
+ )
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def javascript?(processed_source, text_node)
31
+ ast = processed_source.parser.ast.to_a
32
+ index = ast.find_index(text_node)
33
+
34
+ previous_node = ast[index - 1]
35
+
36
+ if previous_node.type == :tag
37
+ tag = BetterHtml::Tree::Tag.from_node(previous_node)
38
+
39
+ tag.name == "script" && !tag.closing?
40
+ end
41
+ end
42
+
43
+ def relevant_node(inner_node)
44
+ if inner_node.is_a?(String)
45
+ inner_node.strip.empty? ? false : inner_node
46
+ else
47
+ false
48
+ end
49
+ end
50
+
51
+ def message(string)
52
+ stripped_string = string.strip
53
+
54
+ if stripped_string.length > 1
55
+ "String not translated: #{stripped_string}"
56
+ else
57
+ "Consider using Rails helpers to move out the single character `#{stripped_string}` from the html."
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ERBLint
4
- VERSION = '0.0.17'
4
+ VERSION = '0.0.18'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erb_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Chan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-19 00:00:00.000000000 Z
11
+ date: 2018-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: better_html
@@ -141,6 +141,7 @@ files:
141
141
  - lib/erb_lint/linters/deprecated_classes.rb
142
142
  - lib/erb_lint/linters/erb_safety.rb
143
143
  - lib/erb_lint/linters/final_newline.rb
144
+ - lib/erb_lint/linters/hard_coded_string.rb
144
145
  - lib/erb_lint/linters/rubocop.rb
145
146
  - lib/erb_lint/linters/rubocop_text.rb
146
147
  - lib/erb_lint/offense.rb