slim_lint 0.18.0 → 0.21.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/config/default.yml +15 -9
- data/lib/slim_lint.rb +4 -4
- data/lib/slim_lint/cli.rb +19 -12
- data/lib/slim_lint/file_finder.rb +1 -1
- data/lib/slim_lint/linter/control_statement_spacing.rb +0 -1
- data/lib/slim_lint/linter/embedded_engines.rb +22 -0
- data/lib/slim_lint/options.rb +5 -0
- data/lib/slim_lint/reporter/emacs_reporter.rb +44 -0
- data/lib/slim_lint/reporter/json_reporter.rb +1 -0
- data/lib/slim_lint/runner.rb +12 -8
- data/lib/slim_lint/version.rb +1 -1
- metadata +10 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecb7c8e4610ab75806023562750e2ef68bfd0b9457403297a22773af85951935
|
4
|
+
data.tar.gz: ad04da9dd32582ab42c290c85628f391e88a4f8a1eae83ef4d6ad3695d88f1bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecda5be7f9b2adf7fd5e06d78449df876037953b34a07c658bf999b13af8d4d322afbc4779ac62654e9887c8d9b6621ce224b215871c842cb9fe25c92eb2e769
|
7
|
+
data.tar.gz: bfd2cfa1794ff5406ac546f66013985cc809ec4c5136d04d6a99e12994e7c4e0ea2876f69067239b6e9aa3f6c2ea96031d1ce4e882bd099b2efdb6531b2786ba
|
data/config/default.yml
CHANGED
@@ -18,6 +18,10 @@ linters:
|
|
18
18
|
ControlStatementSpacing:
|
19
19
|
enabled: true
|
20
20
|
|
21
|
+
EmbeddedEngines:
|
22
|
+
enabled: false
|
23
|
+
forbidden_engines: []
|
24
|
+
|
21
25
|
EmptyControlStatement:
|
22
26
|
enabled: true
|
23
27
|
|
@@ -42,16 +46,18 @@ linters:
|
|
42
46
|
# WARNING: If you define this list in your own .slim-lint.yml file, you'll
|
43
47
|
# be overriding the list defined here.
|
44
48
|
ignored_cops:
|
45
|
-
- Layout/
|
46
|
-
- Layout/
|
47
|
-
- Layout/
|
48
|
-
- Layout/AlignParameters
|
49
|
+
- Layout/ArgumentAlignment
|
50
|
+
- Layout/ArrayAlignment
|
51
|
+
- Layout/BlockAlignment
|
49
52
|
- Layout/EmptyLineAfterGuardClause
|
53
|
+
- Layout/EndAlignment
|
54
|
+
- Layout/FirstArrayElementIndentation
|
50
55
|
- Layout/FirstParameterIndentation
|
51
|
-
- Layout/
|
56
|
+
- Layout/HashAlignment
|
52
57
|
- Layout/IndentationConsistency
|
53
58
|
- Layout/IndentationWidth
|
54
59
|
- Layout/InitialIndentation
|
60
|
+
- Layout/LineLength
|
55
61
|
- Layout/MultilineArrayBraceLayout
|
56
62
|
- Layout/MultilineAssignmentLayout
|
57
63
|
- Layout/MultilineHashBraceLayout
|
@@ -59,18 +65,18 @@ linters:
|
|
59
65
|
- Layout/MultilineMethodCallIndentation
|
60
66
|
- Layout/MultilineMethodDefinitionBraceLayout
|
61
67
|
- Layout/MultilineOperationIndentation
|
62
|
-
- Layout/
|
68
|
+
- Layout/ParameterAlignment
|
69
|
+
- Layout/TrailingEmptyLines
|
63
70
|
- Layout/TrailingWhitespace
|
64
|
-
- Lint/BlockAlignment
|
65
|
-
- Lint/EndAlignment
|
66
71
|
- Lint/Void
|
67
72
|
- Metrics/BlockLength
|
68
73
|
- Metrics/BlockNesting
|
69
|
-
- Metrics/LineLength
|
70
74
|
- Naming/FileName
|
71
75
|
- Style/FrozenStringLiteralComment
|
76
|
+
- Style/IdenticalConditionalBranches
|
72
77
|
- Style/IfUnlessModifier
|
73
78
|
- Style/Next
|
79
|
+
- Style/WhileUntilDo
|
74
80
|
- Style/WhileUntilModifier
|
75
81
|
|
76
82
|
Tab:
|
data/lib/slim_lint.rb
CHANGED
@@ -19,7 +19,7 @@ require 'slim_lint/logger'
|
|
19
19
|
require 'slim_lint/version'
|
20
20
|
|
21
21
|
# Load all filters (required by SlimLint::Engine)
|
22
|
-
Dir[File.expand_path('slim_lint/filters/*.rb', File.dirname(__FILE__))].each do |file|
|
22
|
+
Dir[File.expand_path('slim_lint/filters/*.rb', File.dirname(__FILE__))].sort.each do |file|
|
23
23
|
require file
|
24
24
|
end
|
25
25
|
|
@@ -37,16 +37,16 @@ require 'slim_lint/runner'
|
|
37
37
|
|
38
38
|
# Load all matchers
|
39
39
|
require 'slim_lint/matcher/base'
|
40
|
-
Dir[File.expand_path('slim_lint/matcher/*.rb', File.dirname(__FILE__))].each do |file|
|
40
|
+
Dir[File.expand_path('slim_lint/matcher/*.rb', File.dirname(__FILE__))].sort.each do |file|
|
41
41
|
require file
|
42
42
|
end
|
43
43
|
|
44
44
|
# Load all linters
|
45
|
-
Dir[File.expand_path('slim_lint/linter/*.rb', File.dirname(__FILE__))].each do |file|
|
45
|
+
Dir[File.expand_path('slim_lint/linter/*.rb', File.dirname(__FILE__))].sort.each do |file|
|
46
46
|
require file
|
47
47
|
end
|
48
48
|
|
49
49
|
# Load all reporters
|
50
|
-
Dir[File.expand_path('slim_lint/reporter/*.rb', File.dirname(__FILE__))].each do |file|
|
50
|
+
Dir[File.expand_path('slim_lint/reporter/*.rb', File.dirname(__FILE__))].sort.each do |file|
|
51
51
|
require file
|
52
52
|
end
|
data/lib/slim_lint/cli.rb
CHANGED
@@ -3,11 +3,18 @@
|
|
3
3
|
require 'slim_lint'
|
4
4
|
require 'slim_lint/options'
|
5
5
|
|
6
|
-
require 'sysexits'
|
7
|
-
|
8
6
|
module SlimLint
|
9
7
|
# Command line application interface.
|
10
8
|
class CLI # rubocop:disable Metrics/ClassLength
|
9
|
+
# Exit codes
|
10
|
+
# @see https://man.openbsd.org/sysexits.3
|
11
|
+
EX_OK = 0
|
12
|
+
EX_USAGE = 64
|
13
|
+
EX_DATAERR = 65
|
14
|
+
EX_NOINPUT = 67
|
15
|
+
EX_SOFTWARE = 70
|
16
|
+
EX_CONFIG = 78
|
17
|
+
|
11
18
|
# Create a CLI that outputs to the specified logger.
|
12
19
|
#
|
13
20
|
# @param logger [SlimLint::Logger]
|
@@ -39,16 +46,16 @@ module SlimLint
|
|
39
46
|
|
40
47
|
if options[:help]
|
41
48
|
print_help(options)
|
42
|
-
|
49
|
+
EX_OK
|
43
50
|
elsif options[:version] || options[:verbose_version]
|
44
51
|
print_version(options)
|
45
|
-
|
52
|
+
EX_OK
|
46
53
|
elsif options[:show_linters]
|
47
54
|
print_available_linters
|
48
|
-
|
55
|
+
EX_OK
|
49
56
|
elsif options[:show_reporters]
|
50
57
|
print_available_reporters
|
51
|
-
|
58
|
+
EX_OK
|
52
59
|
else
|
53
60
|
scan_for_lints(options)
|
54
61
|
end
|
@@ -60,20 +67,20 @@ module SlimLint
|
|
60
67
|
case exception
|
61
68
|
when SlimLint::Exceptions::ConfigurationError
|
62
69
|
log.error exception.message
|
63
|
-
|
70
|
+
EX_CONFIG
|
64
71
|
when SlimLint::Exceptions::InvalidCLIOption
|
65
72
|
log.error exception.message
|
66
73
|
log.log "Run `#{APP_NAME}` --help for usage documentation"
|
67
|
-
|
74
|
+
EX_USAGE
|
68
75
|
when SlimLint::Exceptions::InvalidFilePath
|
69
76
|
log.error exception.message
|
70
|
-
|
77
|
+
EX_NOINPUT
|
71
78
|
when SlimLint::Exceptions::NoLintersError
|
72
79
|
log.error exception.message
|
73
|
-
|
80
|
+
EX_NOINPUT
|
74
81
|
else
|
75
82
|
print_unexpected_exception(exception)
|
76
|
-
|
83
|
+
EX_SOFTWARE
|
77
84
|
end
|
78
85
|
end
|
79
86
|
|
@@ -83,7 +90,7 @@ module SlimLint
|
|
83
90
|
def scan_for_lints(options)
|
84
91
|
report = Runner.new.run(options)
|
85
92
|
print_report(report, options)
|
86
|
-
report.failed? ?
|
93
|
+
report.failed? ? EX_DATAERR : EX_OK
|
87
94
|
end
|
88
95
|
|
89
96
|
# Outputs a report of the linter run using the specified reporter.
|
@@ -38,7 +38,7 @@ module SlimLint
|
|
38
38
|
#
|
39
39
|
# @param patterns [Array<String>]
|
40
40
|
# @return [Array<String>]
|
41
|
-
def extract_files_from(patterns) # rubocop:disable MethodLength
|
41
|
+
def extract_files_from(patterns) # rubocop:disable Metrics/MethodLength
|
42
42
|
files = []
|
43
43
|
|
44
44
|
patterns.each do |pattern|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SlimLint
|
4
|
+
# Checks for forbidden embedded engines.
|
5
|
+
class Linter::EmbeddedEngines < Linter
|
6
|
+
include LinterRegistry
|
7
|
+
|
8
|
+
MESSAGE = 'Forbidden embedded engine `%s` found'
|
9
|
+
|
10
|
+
on_start do |_sexp|
|
11
|
+
forbidden_engines = config['forbidden_engines']
|
12
|
+
dummy_node = Struct.new(:line)
|
13
|
+
document.source_lines.each_with_index do |line, index|
|
14
|
+
forbidden_engines.each do |forbidden_engine|
|
15
|
+
next unless line =~ /^#{forbidden_engine}.*:\s*$/
|
16
|
+
|
17
|
+
report_lint(dummy_node.new(index + 1), MESSAGE % forbidden_engine)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/slim_lint/options.rb
CHANGED
@@ -73,6 +73,11 @@ module SlimLint
|
|
73
73
|
'List of file names to exclude') do |files|
|
74
74
|
@options[:excluded_files] = files
|
75
75
|
end
|
76
|
+
|
77
|
+
parser.on('--stdin-file-path file', String,
|
78
|
+
'Pipe source from STDIN, using file in offense reports.') do |file|
|
79
|
+
@options[:stdin_file_path] = file
|
80
|
+
end
|
76
81
|
end
|
77
82
|
|
78
83
|
# Register informational flags.
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SlimLint
|
4
|
+
# Outputs lints in format: {filename}:{line}:{column}: {kind}: {message}.
|
5
|
+
class Reporter::EmacsReporter < Reporter
|
6
|
+
def display_report(report)
|
7
|
+
sorted_lints = report.lints.sort_by { |l| [l.filename, l.line] }
|
8
|
+
|
9
|
+
sorted_lints.each do |lint|
|
10
|
+
print_location(lint)
|
11
|
+
print_type(lint)
|
12
|
+
print_message(lint)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def print_location(lint)
|
19
|
+
log.info lint.filename, false
|
20
|
+
log.log ':', false
|
21
|
+
log.bold lint.line, false
|
22
|
+
log.log ':', false
|
23
|
+
# TODO: change 1 to column number when linter will have this info.
|
24
|
+
log.bold 1, false
|
25
|
+
log.log ':', false
|
26
|
+
end
|
27
|
+
|
28
|
+
def print_type(lint)
|
29
|
+
if lint.error?
|
30
|
+
log.error ' E: ', false
|
31
|
+
else
|
32
|
+
log.warning ' W: ', false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def print_message(lint)
|
37
|
+
if lint.linter
|
38
|
+
log.success("#{lint.linter.name}: ", false)
|
39
|
+
end
|
40
|
+
|
41
|
+
log.log lint.message
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/slim_lint/runner.rb
CHANGED
@@ -15,13 +15,17 @@ module SlimLint
|
|
15
15
|
# @return [SlimLint::Report] a summary of all lints found
|
16
16
|
def run(options = {})
|
17
17
|
config = load_applicable_config(options)
|
18
|
-
files = extract_applicable_files(config, options)
|
19
|
-
|
20
18
|
linter_selector = SlimLint::LinterSelector.new(config, options)
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
if options[:stdin_file_path].nil?
|
21
|
+
files = extract_applicable_files(config, options)
|
22
|
+
lints = files.map do |file|
|
23
|
+
collect_lints(File.read(file), file, linter_selector, config)
|
24
|
+
end.flatten
|
25
|
+
else
|
26
|
+
files = [options[:stdin_file_path]]
|
27
|
+
lints = collect_lints($stdin.read, options[:stdin_file_path], linter_selector, config)
|
28
|
+
end
|
25
29
|
|
26
30
|
SlimLint::Report.new(lints, files)
|
27
31
|
end
|
@@ -49,14 +53,14 @@ module SlimLint
|
|
49
53
|
# @param file [String] path to file to lint
|
50
54
|
# @param linter_selector [SlimLint::LinterSelector]
|
51
55
|
# @param config [SlimLint::Configuration]
|
52
|
-
def collect_lints(
|
56
|
+
def collect_lints(file_content, file_name, linter_selector, config)
|
53
57
|
begin
|
54
|
-
document = SlimLint::Document.new(
|
58
|
+
document = SlimLint::Document.new(file_content, file: file_name, config: config)
|
55
59
|
rescue SlimLint::Exceptions::ParseError => e
|
56
60
|
return [SlimLint::Lint.new(nil, file, e.lineno, e.error, :error)]
|
57
61
|
end
|
58
62
|
|
59
|
-
linter_selector.linters_for_file(
|
63
|
+
linter_selector.linters_for_file(file_name).map do |linter|
|
60
64
|
linter.run(document)
|
61
65
|
end.flatten
|
62
66
|
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.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane da Silva
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.78.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.78.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: slim
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,20 +44,6 @@ dependencies:
|
|
44
44
|
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '5.0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: sysexits
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '1.1'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '1.1'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: rspec
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +104,7 @@ files:
|
|
118
104
|
- lib/slim_lint/linter/comment_control_statement.rb
|
119
105
|
- lib/slim_lint/linter/consecutive_control_statements.rb
|
120
106
|
- lib/slim_lint/linter/control_statement_spacing.rb
|
107
|
+
- lib/slim_lint/linter/embedded_engines.rb
|
121
108
|
- lib/slim_lint/linter/empty_control_statement.rb
|
122
109
|
- lib/slim_lint/linter/empty_lines.rb
|
123
110
|
- lib/slim_lint/linter/file_length.rb
|
@@ -141,6 +128,7 @@ files:
|
|
141
128
|
- lib/slim_lint/reporter.rb
|
142
129
|
- lib/slim_lint/reporter/checkstyle_reporter.rb
|
143
130
|
- lib/slim_lint/reporter/default_reporter.rb
|
131
|
+
- lib/slim_lint/reporter/emacs_reporter.rb
|
144
132
|
- lib/slim_lint/reporter/json_reporter.rb
|
145
133
|
- lib/slim_lint/ruby_extract_engine.rb
|
146
134
|
- lib/slim_lint/ruby_extractor.rb
|
@@ -154,7 +142,7 @@ homepage: https://github.com/sds/slim-lint
|
|
154
142
|
licenses:
|
155
143
|
- MIT
|
156
144
|
metadata: {}
|
157
|
-
post_install_message:
|
145
|
+
post_install_message:
|
158
146
|
rdoc_options: []
|
159
147
|
require_paths:
|
160
148
|
- lib
|
@@ -169,8 +157,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
157
|
- !ruby/object:Gem::Version
|
170
158
|
version: '0'
|
171
159
|
requirements: []
|
172
|
-
rubygems_version: 3.
|
173
|
-
signing_key:
|
160
|
+
rubygems_version: 3.1.4
|
161
|
+
signing_key:
|
174
162
|
specification_version: 4
|
175
163
|
summary: Slim template linting tool
|
176
164
|
test_files: []
|