mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Merge pull request #299 from crystal-ameba/Sija/refactor-style-predicate-name-rule
This commit is contained in:
commit
db5eee76cb
2 changed files with 9 additions and 16 deletions
|
@ -30,7 +30,7 @@ module Ameba::Rule::Style
|
|||
it "reports rule, pos and message" do
|
||||
s = Source.new %q(
|
||||
class Image
|
||||
def has_picture?(x)
|
||||
def is_valid?(x)
|
||||
true
|
||||
end
|
||||
end
|
||||
|
@ -42,7 +42,7 @@ module Ameba::Rule::Style
|
|||
issue.location.to_s.should eq "source.cr:2:3"
|
||||
issue.end_location.to_s.should eq "source.cr:4:5"
|
||||
issue.message.should eq(
|
||||
"Favour method name 'picture?' over 'has_picture?'")
|
||||
"Favour method name 'valid?' over 'is_valid?'")
|
||||
end
|
||||
|
||||
it "ignores if alternative name isn't valid syntax" do
|
||||
|
|
|
@ -1,25 +1,20 @@
|
|||
module Ameba::Rule::Style
|
||||
# A rule that disallows tautological predicate names, meaning those that
|
||||
# start with the prefix `has_` or the prefix `is_`. Ignores if the alternative isn't valid Crystal code (e.g. `is_404?`).
|
||||
# A rule that disallows tautological predicate names -
|
||||
# meaning those that start with the prefix `is_`, except for
|
||||
# the ones that are not valid Crystal code (e.g. `is_404?`).
|
||||
#
|
||||
# Favour these:
|
||||
# Favour this:
|
||||
#
|
||||
# ```
|
||||
# def valid?(x)
|
||||
# end
|
||||
#
|
||||
# def picture?(x)
|
||||
# end
|
||||
# ```
|
||||
#
|
||||
# Over these:
|
||||
# Over this:
|
||||
#
|
||||
# ```
|
||||
# def is_valid?(x)
|
||||
# end
|
||||
#
|
||||
# def has_picture?(x)
|
||||
# end
|
||||
# ```
|
||||
#
|
||||
# YAML configuration example:
|
||||
|
@ -30,16 +25,14 @@ module Ameba::Rule::Style
|
|||
# ```
|
||||
class PredicateName < Base
|
||||
properties do
|
||||
enabled false
|
||||
description "Disallows tautological predicate names"
|
||||
end
|
||||
|
||||
MSG = "Favour method name '%s?' over '%s'"
|
||||
|
||||
def test(source, node : Crystal::Def)
|
||||
return unless node.name =~ /^(is|has)_(\w+)\?/
|
||||
alternative = $2
|
||||
return unless alternative =~ /^[a-z][a-zA-Z_0-9]*$/
|
||||
return unless node.name =~ /^is_([a-z]\w*)\?$/
|
||||
alternative = $1
|
||||
|
||||
issue_for node, MSG % {alternative, node.name}
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue