Skip to content

Commit

Permalink
Merge pull request #495 from crystal-ameba/nil-return-type
Browse files Browse the repository at this point in the history
Add `Nil` return types to methods with side-effects only
  • Loading branch information
Sija authored Nov 17, 2024
2 parents eb3cae0 + 8112ea2 commit 6b91d89
Showing 12 changed files with 36 additions and 34 deletions.
15 changes: 9 additions & 6 deletions spec/ameba/formatter/todo_formatter_spec.cr
Original file line number Diff line number Diff line change
@@ -13,10 +13,12 @@ module Ameba

private def create_todo
with_formatter do |formatter|
s = Source.new "a = 1", "source.cr"
s.add_issue DummyRule.new, {1, 2}, "message"
file = formatter.finished([s])
file ? File.read(file.path) : ""
source = Source.new "a = 1", "source.cr"
source.add_issue DummyRule.new, {1, 2}, "message"

formatter.finished([source])

File.exists?(CONFIG_PATH) ? File.read(CONFIG_PATH) : ""
end
end

@@ -97,8 +99,9 @@ module Ameba
s1.add_issue DummyRule.new, {2, 2}, "message1"
s2.add_issue DummyRule.new, {2, 2}, "message2"

file = formatter.finished([s1, s2]).should_not be_nil
content = File.read(file.path)
formatter.finished([s1, s2])

content = File.read(CONFIG_PATH)
content.should contain <<-CONTENT
# Problems found: 3
# Run `ameba --only Ameba/DummyRule` for details
10 changes: 5 additions & 5 deletions src/ameba/cli/cmd.cr
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ require "option_parser"
module Ameba::Cli
extend self

def run(args = ARGV)
def run(args = ARGV) : Nil
opts = parse_args args
location_to_explain = opts.location_to_explain
autocorrect = opts.autocorrect?
@@ -151,7 +151,7 @@ module Ameba::Cli
opts
end

private def configure_rules(config, opts)
private def configure_rules(config, opts) : Nil
case
when only = opts.only
config.rules.each(&.enabled = false)
@@ -162,7 +162,7 @@ module Ameba::Cli
config.update_rules(opts.except, enabled: false)
end

private def configure_formatter(config, opts)
private def configure_formatter(config, opts) : Nil
if name = opts.formatter
config.formatter = name
end
@@ -171,12 +171,12 @@ module Ameba::Cli
opts.without_affected_code?
end

private def configure_describe_opts(rule_name, opts)
private def configure_describe_opts(rule_name, opts) : Nil
opts.describe_rule = rule_name.presence
opts.formatter = :silent
end

private def configure_explain_opts(loc, opts)
private def configure_explain_opts(loc, opts) : Nil
location_to_explain = parse_explain_location(loc)
opts.location_to_explain = location_to_explain
opts.globs = [location_to_explain[:file]]
8 changes: 4 additions & 4 deletions src/ameba/formatter/base_formatter.cr
Original file line number Diff line number Diff line change
@@ -15,22 +15,22 @@ module Ameba::Formatter

# Callback that indicates when inspecting is started.
# A list of sources to inspect is passed as an argument.
def started(sources); end
def started(sources) : Nil; end

# Callback that indicates when source inspection is started.
# A corresponding source is passed as an argument.
#
# WARNING: This method needs to be MT safe
def source_started(source : Source); end
def source_started(source : Source) : Nil; end

# Callback that indicates when source inspection is finished.
# A corresponding source is passed as an argument.
#
# WARNING: This method needs to be MT safe
def source_finished(source : Source); end
def source_finished(source : Source) : Nil; end

# Callback that indicates when inspection is finished.
# A list of inspected sources is passed as an argument.
def finished(sources); end
def finished(sources) : Nil; end
end
end
2 changes: 1 addition & 1 deletion src/ameba/formatter/disabled_formatter.cr
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module Ameba::Formatter
# A formatter that shows all disabled lines by inline directives.
class DisabledFormatter < BaseFormatter
def finished(sources)
def finished(sources) : Nil
output << "Disabled rules using inline directives:\n\n"

sources.each do |source|
6 changes: 3 additions & 3 deletions src/ameba/formatter/dot_formatter.cr
Original file line number Diff line number Diff line change
@@ -10,21 +10,21 @@ module Ameba::Formatter
@mutex = Mutex.new

# Reports a message when inspection is started.
def started(sources)
def started(sources) : Nil
@started_at = Time.monotonic

output.puts started_message(sources.size)
output.puts
end

# Reports a result of the inspection of a corresponding source.
def source_finished(source : Source)
def source_finished(source : Source) : Nil
sym = source.valid? ? ".".colorize(:green) : "F".colorize(:red)
@mutex.synchronize { output << sym }
end

# Reports a message when inspection is finished.
def finished(sources)
def finished(sources) : Nil
output.flush
output << "\n\n"

4 changes: 2 additions & 2 deletions src/ameba/formatter/explain_formatter.cr
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@ module Ameba::Formatter
end

# Reports the explanations at the *@location*.
def finished(sources)
def finished(sources) : Nil
source = sources.find(&.path.==(@location.filename))
return unless source

@@ -40,7 +40,7 @@ module Ameba::Formatter
explain(source, issue)
end

private def explain(source, issue)
private def explain(source, issue) : Nil
return unless location = issue.location

output << '\n'
2 changes: 1 addition & 1 deletion src/ameba/formatter/flycheck_formatter.cr
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ module Ameba::Formatter
class FlycheckFormatter < BaseFormatter
@mutex = Mutex.new

def source_finished(source : Source)
def source_finished(source : Source) : Nil
source.issues.each do |issue|
next if issue.disabled?
next if issue.correctable? && config[:autocorrect]?
6 changes: 3 additions & 3 deletions src/ameba/formatter/json_formatter.cr
Original file line number Diff line number Diff line change
@@ -66,11 +66,11 @@ module Ameba::Formatter
@result = AsJSON::Result.new
@mutex = Mutex.new

def started(sources)
def started(sources) : Nil
@result.summary.target_sources_count = sources.size
end

def source_finished(source : Source)
def source_finished(source : Source) : Nil
json_source = AsJSON::Source.new source.path

source.issues.each do |issue|
@@ -92,7 +92,7 @@ module Ameba::Formatter
end
end

def finished(sources)
def finished(sources) : Nil
@result.to_json @output
end
end
11 changes: 5 additions & 6 deletions src/ameba/formatter/todo_formatter.cr
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ module Ameba::Formatter
def initialize(@output = STDOUT, @config_path = Config::DEFAULT_PATH)
end

def finished(sources)
def finished(sources) : Nil
super

issues = sources.flat_map(&.issues)
@@ -22,12 +22,12 @@ module Ameba::Formatter
return
end

generate_todo_config(issues).tap do |file|
@output.puts "Created #{file.path}"
end
generate_todo_config(issues)

@output.puts "Created #{@config_path}"
end

private def generate_todo_config(issues)
private def generate_todo_config(issues) : Nil
File.open(@config_path, mode: "w") do |file|
file << header

@@ -41,7 +41,6 @@ module Ameba::Formatter
file << "\n# Run `ameba --only #{rule.name}` for details"
file << rule_todo
end
file
end
end

2 changes: 1 addition & 1 deletion src/ameba/presenter/rule_collection_presenter.cr
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Ameba::Presenter
class RuleCollectionPresenter < BasePresenter
def run(rules)
def run(rules) : Nil
rules = rules.to_h do |rule|
name = rule.name.split('/')
name = "%s/%s" % {
2 changes: 1 addition & 1 deletion src/ameba/presenter/rule_presenter.cr
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module Ameba::Presenter
class RulePresenter < BasePresenter
def run(rule)
def run(rule) : Nil
output.puts
output_title "Rule info"
output_paragraph "%s of a %s severity [enabled: %s]" % {
2 changes: 1 addition & 1 deletion src/ameba/runner.cr
Original file line number Diff line number Diff line change
@@ -107,7 +107,7 @@ module Ameba
@formatter.finished @sources
end

private def run_source(source)
private def run_source(source) : Nil
@formatter.source_started source

# This variable is a 2D array used to track corrected issues after each

0 comments on commit 6b91d89

Please sign in to comment.