erb_lint 0.0.17 → 0.0.18

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 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