slim_lint 0.23.0 → 0.25.0
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 +4 -4
- data/bin/slim-lint +1 -1
- data/config/default.yml +3 -0
- data/lib/slim_lint/document.rb +1 -1
- data/lib/slim_lint/file_finder.rb +1 -1
- data/lib/slim_lint/filters/control_processor.rb +1 -1
- data/lib/slim_lint/linter/control_statement_spacing.rb +32 -2
- data/lib/slim_lint/linter/zwsp.rb +1 -1
- data/lib/slim_lint/linter.rb +1 -2
- data/lib/slim_lint/linter_registry.rb +3 -5
- data/lib/slim_lint/rake_task.rb +2 -2
- data/lib/slim_lint/ruby_parser.rb +9 -1
- data/lib/slim_lint/version.rb +1 -1
- metadata +12 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58c99ab50012a0f3475e6518e69bade743b55e6ed5eb4f5dd25a98ea1b7a617e
|
4
|
+
data.tar.gz: 4593348af814f4bce1bd240d4982eec2acd9d4c7bbda5f5ccc231a3a51b8c148
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53ea008e7e03d7261af22c33e098be489096299117b9ec103406382568af8b8b3c10e0a77a3e97e9848c88a57d04d2f5a6b7998b48555d7ea205ceb136f95cdb
|
7
|
+
data.tar.gz: 1e5e98f7d7e6eacc805a85451b8428f2f746b91b5b3433ce5262779d6bd9285b6db00e463c3d1b79912e9b93b677b5f12f0bf0e50613f284b8b482732fc7e552
|
data/bin/slim-lint
CHANGED
data/config/default.yml
CHANGED
data/lib/slim_lint/document.rb
CHANGED
@@ -67,7 +67,7 @@ module SlimLint
|
|
67
67
|
# Second capture match --- or ... followed by optional whitespace
|
68
68
|
# and newline. This matches the closing --- for the frontmatter.
|
69
69
|
(---|\.\.\.)\s*$\n?/mx
|
70
|
-
source =
|
70
|
+
source = ::Regexp.last_match.post_match
|
71
71
|
end
|
72
72
|
|
73
73
|
source
|
@@ -72,7 +72,7 @@ module SlimLint
|
|
72
72
|
# @param path [String]
|
73
73
|
# @return [String]
|
74
74
|
def normalize_path(path)
|
75
|
-
path.start_with?(".#{File::SEPARATOR}") ? path[2
|
75
|
+
path.start_with?(".#{File::SEPARATOR}") ? path[2..] : path
|
76
76
|
end
|
77
77
|
|
78
78
|
# Whether the given file should be treated as a Slim file.
|
@@ -5,7 +5,7 @@ module SlimLint::Filters
|
|
5
5
|
# variables and other cruft (which in the context of extracting Ruby code,
|
6
6
|
# results in a lot of weird cops reported by RuboCop).
|
7
7
|
class ControlProcessor < Slim::Filter
|
8
|
-
BLOCK_RE = /\A(if|unless)\b|\bdo\s*(\|[
|
8
|
+
BLOCK_RE = /\A(if|unless)\b|\bdo\s*(\|[^|]*\|)?\s*$/
|
9
9
|
|
10
10
|
# Handle control expression `[:slim, :control, code, content]`
|
11
11
|
#
|
@@ -9,8 +9,14 @@ module SlimLint
|
|
9
9
|
|
10
10
|
on [:html, :tag, anything, [],
|
11
11
|
[:slim, :output, anything, capture(:ruby, anything)]] do |sexp|
|
12
|
-
#
|
13
|
-
|
12
|
+
# Process original slim code so that multi-line attributes become single line.
|
13
|
+
# And store the correction line count
|
14
|
+
source = merge_multiline_attributes(document.source_lines)
|
15
|
+
|
16
|
+
# Fetch processed Slim code that contains an element with a control statement.
|
17
|
+
line = source[sexp.line - 1][:line]
|
18
|
+
# Apply correction to the line count.
|
19
|
+
sexp.line += source[sexp.line - 1][:line_count]
|
14
20
|
|
15
21
|
# Remove any Ruby code, because our regexp below must not match inside Ruby.
|
16
22
|
ruby = captures[:ruby]
|
@@ -20,5 +26,29 @@ module SlimLint
|
|
20
26
|
|
21
27
|
report_lint(sexp, MESSAGE)
|
22
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def merge_multiline_attributes(source_lines)
|
33
|
+
result = []
|
34
|
+
memo = ''
|
35
|
+
correction_line_count = 0
|
36
|
+
|
37
|
+
source_lines.each do |line|
|
38
|
+
memo += line.chomp('\\')
|
39
|
+
|
40
|
+
# Lines ending in a backslash are concatenated with the next line
|
41
|
+
# And count the number of lines to correct the sexp line count.
|
42
|
+
if line.match?(/\\$/)
|
43
|
+
correction_line_count += 1
|
44
|
+
next
|
45
|
+
end
|
46
|
+
|
47
|
+
# Add merged rows and correction line count to the result and reset the memo
|
48
|
+
result << { line: memo, line_count: correction_line_count }
|
49
|
+
memo = ''
|
50
|
+
end
|
51
|
+
result
|
52
|
+
end
|
23
53
|
end
|
24
54
|
end
|
data/lib/slim_lint/linter.rb
CHANGED
@@ -71,7 +71,7 @@ module SlimLint
|
|
71
71
|
def disabled_lines
|
72
72
|
@disabled_lines ||= begin
|
73
73
|
currently_disabled = false
|
74
|
-
@document.source_lines.each_with_index.
|
74
|
+
@document.source_lines.each_with_index.each_with_object([]) do |pair, lines|
|
75
75
|
line = pair[0]
|
76
76
|
line_number = pair[1] + 1
|
77
77
|
|
@@ -82,7 +82,6 @@ module SlimLint
|
|
82
82
|
elsif currently_disabled
|
83
83
|
lines << line_number
|
84
84
|
end
|
85
|
-
lines
|
86
85
|
end
|
87
86
|
end
|
88
87
|
end
|
@@ -27,11 +27,9 @@ module SlimLint
|
|
27
27
|
# @return [Array<Class>]
|
28
28
|
def extract_linters_from(linter_names)
|
29
29
|
linter_names.map do |linter_name|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
raise NoSuchLinter, "Linter #{linter_name} does not exist"
|
34
|
-
end
|
30
|
+
SlimLint::Linter.const_get(linter_name)
|
31
|
+
rescue NameError
|
32
|
+
raise NoSuchLinter, "Linter #{linter_name} does not exist"
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
data/lib/slim_lint/rake_task.rb
CHANGED
@@ -87,7 +87,7 @@ module SlimLint
|
|
87
87
|
def run_cli(task_args)
|
88
88
|
cli_args = ['--config', config] if config
|
89
89
|
|
90
|
-
logger = quiet ? SlimLint::Logger.silent : SlimLint::Logger.new(
|
90
|
+
logger = quiet ? SlimLint::Logger.silent : SlimLint::Logger.new($stdout)
|
91
91
|
result = SlimLint::CLI.new(logger).run(Array(cli_args) + files_to_lint(task_args))
|
92
92
|
|
93
93
|
fail "#{SlimLint::APP_NAME} failed with exit code #{result}" unless result == 0
|
@@ -98,7 +98,7 @@ module SlimLint
|
|
98
98
|
#
|
99
99
|
# @param task_args [Rake::TaskArguments]
|
100
100
|
def files_to_lint(task_args)
|
101
|
-
#
|
101
|
+
# NOTE: we're abusing Rake's argument handling a bit here. We call the
|
102
102
|
# first argument `files` but it's actually only the first file--we pull
|
103
103
|
# the rest out of the `extras` from the task arguments. This is so we
|
104
104
|
# can specify an arbitrary list of files separated by commas on the
|
@@ -2,7 +2,14 @@
|
|
2
2
|
|
3
3
|
require 'rubocop'
|
4
4
|
require 'rubocop/ast/builder'
|
5
|
-
|
5
|
+
|
6
|
+
def require_parser(path)
|
7
|
+
prev = $VERBOSE
|
8
|
+
$VERBOSE = nil
|
9
|
+
require "parser/#{path}"
|
10
|
+
ensure
|
11
|
+
$VERBOSE = prev
|
12
|
+
end
|
6
13
|
|
7
14
|
module SlimLint
|
8
15
|
# Parser for the Ruby language.
|
@@ -13,6 +20,7 @@ module SlimLint
|
|
13
20
|
class RubyParser
|
14
21
|
# Creates a reusable parser.
|
15
22
|
def initialize
|
23
|
+
require_parser('current')
|
16
24
|
@builder = ::RuboCop::AST::Builder.new
|
17
25
|
@parser = ::Parser::CurrentRuby.new(@builder)
|
18
26
|
end
|
data/lib/slim_lint/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slim_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane da Silva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -16,14 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.0'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
29
|
+
version: '1.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.0'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: slim
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,20 +50,6 @@ dependencies:
|
|
44
50
|
- - "<"
|
45
51
|
- !ruby/object:Gem::Version
|
46
52
|
version: '6.0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: pry
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0.13'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0.13'
|
61
53
|
- !ruby/object:Gem::Dependency
|
62
54
|
name: rspec
|
63
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,14 +157,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
165
157
|
requirements:
|
166
158
|
- - ">="
|
167
159
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
160
|
+
version: '3.0'
|
169
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
162
|
requirements:
|
171
163
|
- - ">="
|
172
164
|
- !ruby/object:Gem::Version
|
173
165
|
version: '0'
|
174
166
|
requirements: []
|
175
|
-
rubygems_version: 3.1
|
167
|
+
rubygems_version: 3.0.3.1
|
176
168
|
signing_key:
|
177
169
|
specification_version: 4
|
178
170
|
summary: Slim template linting tool
|