slim_lint 0.1.0 → 0.2.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 +14 -0
- data/lib/slim_lint/exceptions.rb +1 -1
- data/lib/slim_lint/lint.rb +1 -1
- data/lib/slim_lint/linter/comment_control_statement.rb +17 -0
- data/lib/slim_lint/linter/consecutive_control_statements.rb +32 -0
- data/lib/slim_lint/linter/empty_control_statement.rb +13 -0
- data/lib/slim_lint/linter/tag_case.rb +13 -0
- data/lib/slim_lint/utils.rb +49 -0
- data/lib/slim_lint/version.rb +1 -1
- data/lib/slim_lint.rb +1 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90417095e752ffc02b70c6cf2c7c578642a7aced
|
4
|
+
data.tar.gz: db37d397d726e455c2d98e565c1f0a4ba876c28f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d08877671cd10ae219e055f65f16c9dc26800b4aac6fe0be74dcd669da2da0bcdf45ec7885b24c87333c7731fe1178a7c0c45259146ff7c285da6371b7da53da
|
7
|
+
data.tar.gz: 1afec4e606480b536283d722121dc662fc0d6b2da4cd5bfeb3c93e4853b113404459a6e012546cd0fb179f99888983fa7ce0880f5f02bfcb5944acb163817c19
|
data/config/default.yml
CHANGED
@@ -8,6 +8,16 @@
|
|
8
8
|
skip_frontmatter: false
|
9
9
|
|
10
10
|
linters:
|
11
|
+
CommentControlStatement:
|
12
|
+
enabled: true
|
13
|
+
|
14
|
+
ConsecutiveControlStatements:
|
15
|
+
enabled: true
|
16
|
+
max_consecutive: 2
|
17
|
+
|
18
|
+
EmptyControlStatment:
|
19
|
+
enabled: true
|
20
|
+
|
11
21
|
ExplicitDiv:
|
12
22
|
enabled: true
|
13
23
|
|
@@ -28,11 +38,15 @@ linters:
|
|
28
38
|
- Style/BlockNesting
|
29
39
|
- Style/FileName
|
30
40
|
- Style/IfUnlessModifier
|
41
|
+
- Style/IndentationConsistency
|
31
42
|
- Style/IndentationWidth
|
32
43
|
- Style/Next
|
33
44
|
- Style/TrailingBlankLines
|
34
45
|
- Style/TrailingWhitespace
|
35
46
|
- Style/WhileUntilModifier
|
36
47
|
|
48
|
+
TagCase:
|
49
|
+
enabled: true
|
50
|
+
|
37
51
|
TrailingWhitespace:
|
38
52
|
enabled: true
|
data/lib/slim_lint/exceptions.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Collection of exceptions that can be raised by the
|
1
|
+
# Collection of exceptions that can be raised by the application.
|
2
2
|
module SlimLint::Exceptions
|
3
3
|
# Raised when a {Configuration} could not be loaded from a file.
|
4
4
|
class ConfigurationError < StandardError; end
|
data/lib/slim_lint/lint.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module SlimLint
|
2
|
+
# Searches for control statements with only comments.
|
3
|
+
class Linter::CommentControlStatement < Linter
|
4
|
+
include LinterRegistry
|
5
|
+
|
6
|
+
on [:slim, :control] do |sexp|
|
7
|
+
_, _, code = sexp
|
8
|
+
next unless code =~ /\A\s*#/
|
9
|
+
|
10
|
+
comment = code[/\A\s*#(.*\z)/, 1]
|
11
|
+
|
12
|
+
report_lint(sexp,
|
13
|
+
"Slim code comments (`/#{comment}`) are preferred over " \
|
14
|
+
"control statement comments (`-# #{comment}`)")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module SlimLint
|
2
|
+
# Searches for more than an allowed number of consecutive control code
|
3
|
+
# statements that could be condensed into a :ruby filter.
|
4
|
+
class Linter::ConsecutiveControlStatements < Linter
|
5
|
+
include LinterRegistry
|
6
|
+
|
7
|
+
on [:multi] do |sexp|
|
8
|
+
Utils.for_consecutive_items(sexp,
|
9
|
+
method(:code_sexp?),
|
10
|
+
config['max_consecutive'] + 1) do |group|
|
11
|
+
report_lint(group.first,
|
12
|
+
"#{group.count} consecutive control statements can be " \
|
13
|
+
'merged into a single `ruby:` filter')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
# Returns whether the given Sexp is a :code abstraction.
|
20
|
+
#
|
21
|
+
# @param sexp [SlimLint::Sexp]
|
22
|
+
# @return [Boolean]
|
23
|
+
def code_sexp?(sexp)
|
24
|
+
# TODO: Switch this with a built-in method on the {Sexp} object itself
|
25
|
+
sexp.is_a?(Sexp) && sexp.match?([:slim, :control])
|
26
|
+
end
|
27
|
+
|
28
|
+
def newline_sexp?(sexp)
|
29
|
+
sexp.is_a?(Sexp) && sexp.first == :newline
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SlimLint
|
2
|
+
# Searches for control statements with no code.
|
3
|
+
class Linter::EmptyControlStatement < Linter
|
4
|
+
include LinterRegistry
|
5
|
+
|
6
|
+
on [:slim, :control] do |sexp|
|
7
|
+
_, _, code = sexp
|
8
|
+
next unless code =~ /\A\s*\Z/
|
9
|
+
|
10
|
+
report_lint(sexp, 'Empty control statement can be removed')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SlimLint
|
2
|
+
# Searches for tags with uppercase characters.
|
3
|
+
class Linter::TagCase < Linter
|
4
|
+
include LinterRegistry
|
5
|
+
|
6
|
+
on [:html, :tag] do |sexp|
|
7
|
+
_, _, name = sexp
|
8
|
+
next unless name =~ /[A-Z]/
|
9
|
+
|
10
|
+
report_lint(sexp, "Tag `#{name}` should be written as `#{name.downcase}`")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module SlimLint
|
2
|
+
# Miscellaneus collection of helper functions.
|
3
|
+
module Utils
|
4
|
+
module_function
|
5
|
+
|
6
|
+
# Find all consecutive items satisfying the given block of a minimum size,
|
7
|
+
# yielding each group of consecutive items to the provided block.
|
8
|
+
#
|
9
|
+
# @param items [Array]
|
10
|
+
# @param satisfies [Proc] function that takes an item and returns true/false
|
11
|
+
# @param min_consecutive [Fixnum] minimum number of consecutive items before
|
12
|
+
# yielding the group
|
13
|
+
# @yield Passes list of consecutive items all matching the criteria defined
|
14
|
+
# by the `satisfies` {Proc} to the provided block
|
15
|
+
# @yieldparam group [Array] List of consecutive items
|
16
|
+
# @yieldreturn [Boolean] block should return whether item matches criteria
|
17
|
+
# for inclusion
|
18
|
+
def for_consecutive_items(items, satisfies, min_consecutive = 2)
|
19
|
+
current_index = -1
|
20
|
+
|
21
|
+
while (current_index += 1) < items.count
|
22
|
+
next unless satisfies[items[current_index]]
|
23
|
+
|
24
|
+
count = count_consecutive(items, current_index, &satisfies)
|
25
|
+
next unless count >= min_consecutive
|
26
|
+
|
27
|
+
# Yield the chunk of consecutive items
|
28
|
+
yield items[current_index...(current_index + count)]
|
29
|
+
|
30
|
+
current_index += count # Skip this patch of consecutive items to find more
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Count the number of consecutive items satisfying the given {Proc}.
|
35
|
+
#
|
36
|
+
# @param items [Array]
|
37
|
+
# @param offset [Fixnum] index to start searching from
|
38
|
+
# @yield [item] Passes item to the provided block.
|
39
|
+
# @yieldparam item [Object] Item to evaluate as matching criteria for
|
40
|
+
# inclusion
|
41
|
+
# @yieldreturn [Boolean] whether to include the item
|
42
|
+
# @return [Integer]
|
43
|
+
def count_consecutive(items, offset = 0, &block)
|
44
|
+
count = 1
|
45
|
+
count += 1 while (offset + count < items.count) && block.call(items[offset + count])
|
46
|
+
count
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/slim_lint/version.rb
CHANGED
data/lib/slim_lint.rb
CHANGED
@@ -5,6 +5,7 @@ require 'slim_lint/constants'
|
|
5
5
|
require 'slim_lint/exceptions'
|
6
6
|
require 'slim_lint/configuration'
|
7
7
|
require 'slim_lint/configuration_loader'
|
8
|
+
require 'slim_lint/utils'
|
8
9
|
require 'slim_lint/sexp'
|
9
10
|
require 'slim_lint/file_finder'
|
10
11
|
require 'slim_lint/linter_registry'
|
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.2.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: 2015-04-
|
11
|
+
date: 2015-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slim
|
@@ -103,9 +103,13 @@ files:
|
|
103
103
|
- lib/slim_lint/filters/sexp_converter.rb
|
104
104
|
- lib/slim_lint/lint.rb
|
105
105
|
- lib/slim_lint/linter.rb
|
106
|
+
- lib/slim_lint/linter/comment_control_statement.rb
|
107
|
+
- lib/slim_lint/linter/consecutive_control_statements.rb
|
108
|
+
- lib/slim_lint/linter/empty_control_statement.rb
|
106
109
|
- lib/slim_lint/linter/line_length.rb
|
107
110
|
- lib/slim_lint/linter/redundant_div.rb
|
108
111
|
- lib/slim_lint/linter/rubocop.rb
|
112
|
+
- lib/slim_lint/linter/tag_case.rb
|
109
113
|
- lib/slim_lint/linter/trailing_whitespace.rb
|
110
114
|
- lib/slim_lint/linter_registry.rb
|
111
115
|
- lib/slim_lint/logger.rb
|
@@ -121,6 +125,7 @@ files:
|
|
121
125
|
- lib/slim_lint/runner.rb
|
122
126
|
- lib/slim_lint/sexp.rb
|
123
127
|
- lib/slim_lint/sexp_visitor.rb
|
128
|
+
- lib/slim_lint/utils.rb
|
124
129
|
- lib/slim_lint/version.rb
|
125
130
|
homepage: https://github.com/sds/slim-lint
|
126
131
|
licenses:
|