From b39b1bf44142cfdb95743b4e2798c9d9cb3f177b Mon Sep 17 00:00:00 2001 From: Wender Freese Date: Tue, 10 May 2022 15:58:37 -0300 Subject: [PATCH 1/3] Add Rake test to run check and format commands --- lib/syntax_tree/rake/task.rb | 50 ++++++++++++++++++++++++++++++++++++ test/task_test.rb | 27 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 lib/syntax_tree/rake/task.rb create mode 100644 test/task_test.rb diff --git a/lib/syntax_tree/rake/task.rb b/lib/syntax_tree/rake/task.rb new file mode 100644 index 00000000..12279e0f --- /dev/null +++ b/lib/syntax_tree/rake/task.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require "rake" +require "rake/tasklib" + +module SyntaxTree + module Rake + # A Rake task that runs check and format on a set of source files. + # + # Example: + # + # require 'syntax_tree/rake/task' + # + # SyntaxTree::Rake::Task.new do |t| + # t.source_files = '{app,config,lib}/**/*.rb' + # end + # + # This will create task that can be run with: + # + # rake syntax_tree:check_and_format + class Task < ::Rake::TaskLib + # Glob pattern to match source files. + # Defaults to 'lib/**/*.rb'. + attr_accessor :source_files + + def initialize + @source_files = "lib/**/*.rb" + + yield self if block_given? + define_task + end + + private + + def define_task + desc "Runs syntax_tree over source files" + task(:check_and_format) { run_task } + end + + def run_task + %w[check format].each do |command| + SyntaxTree::CLI.run([command, source_files].compact) + end + + # TODO: figure this out + # exit($?.exitstatus) if $?&.exited? + end + end + end +end diff --git a/test/task_test.rb b/test/task_test.rb new file mode 100644 index 00000000..c1e00b8b --- /dev/null +++ b/test/task_test.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +require_relative "test_helper" +require "syntax_tree/rake/task" + +module SyntaxTree + class TaskTest < Minitest::Test + Invoke = Struct.new(:args) + + def test_task + source_files = "{app,config,lib}/**/*.rb" + + SyntaxTree::Rake::Task.new do |t| + t.source_files = source_files + end + + invoke = [] + SyntaxTree::CLI.stub(:run, ->(args) { invoke << Invoke.new(args) }) do + ::Rake::Task["check_and_format"].invoke + end + + assert_equal( + [["check", source_files], ["format", source_files]], invoke.map(&:args) + ) + end + end +end From f27590c43e61cdd2977c01d56601c3ba33ff00fa Mon Sep 17 00:00:00 2001 From: Wender Freese Date: Fri, 13 May 2022 16:05:25 -0300 Subject: [PATCH 2/3] Split "check_and_format" task into two different files "check" and "write" --- .../rake/{task.rb => check_task.rb} | 27 +++++----- lib/syntax_tree/rake/write_task.rb | 53 +++++++++++++++++++ test/check_task_test.rb | 23 ++++++++ test/task_test.rb | 27 ---------- test/write_task_test.rb | 23 ++++++++ 5 files changed, 114 insertions(+), 39 deletions(-) rename lib/syntax_tree/rake/{task.rb => check_task.rb} (54%) create mode 100644 lib/syntax_tree/rake/write_task.rb create mode 100644 test/check_task_test.rb delete mode 100644 test/task_test.rb create mode 100644 test/write_task_test.rb diff --git a/lib/syntax_tree/rake/task.rb b/lib/syntax_tree/rake/check_task.rb similarity index 54% rename from lib/syntax_tree/rake/task.rb rename to lib/syntax_tree/rake/check_task.rb index 12279e0f..0c0dc860 100644 --- a/lib/syntax_tree/rake/task.rb +++ b/lib/syntax_tree/rake/check_task.rb @@ -5,25 +5,31 @@ module SyntaxTree module Rake - # A Rake task that runs check and format on a set of source files. + # A Rake task that runs check on a set of source files. # # Example: # - # require 'syntax_tree/rake/task' + # require 'syntax_tree/rake/check_task' # - # SyntaxTree::Rake::Task.new do |t| + # SyntaxTree::Rake::CheckTask.new do |t| # t.source_files = '{app,config,lib}/**/*.rb' # end # # This will create task that can be run with: # - # rake syntax_tree:check_and_format - class Task < ::Rake::TaskLib + # rake stree_check + # + class CheckTask < ::Rake::TaskLib + # Name of the task. + # Defaults to :stree_check. + attr_accessor :name + # Glob pattern to match source files. # Defaults to 'lib/**/*.rb'. attr_accessor :source_files - def initialize + def initialize(name = :stree_check) + @name = name @source_files = "lib/**/*.rb" yield self if block_given? @@ -33,16 +39,13 @@ def initialize private def define_task - desc "Runs syntax_tree over source files" - task(:check_and_format) { run_task } + desc "Runs `stree check` over source files" + task(name) { run_task } end def run_task - %w[check format].each do |command| - SyntaxTree::CLI.run([command, source_files].compact) - end + SyntaxTree::CLI.run(["check", source_files].compact) - # TODO: figure this out # exit($?.exitstatus) if $?&.exited? end end diff --git a/lib/syntax_tree/rake/write_task.rb b/lib/syntax_tree/rake/write_task.rb new file mode 100644 index 00000000..08b6018c --- /dev/null +++ b/lib/syntax_tree/rake/write_task.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require "rake" +require "rake/tasklib" + +module SyntaxTree + module Rake + # A Rake task that runs format on a set of source files. + # + # Example: + # + # require 'syntax_tree/rake/write_task' + # + # SyntaxTree::Rake::WriteTask.new do |t| + # t.source_files = '{app,config,lib}/**/*.rb' + # end + # + # This will create task that can be run with: + # + # rake stree_write + # + class WriteTask < ::Rake::TaskLib + # Name of the task. + # Defaults to :stree_write. + attr_accessor :name + + # Glob pattern to match source files. + # Defaults to 'lib/**/*.rb'. + attr_accessor :source_files + + def initialize(name = :stree_write) + @name = name + @source_files = "lib/**/*.rb" + + yield self if block_given? + define_task + end + + private + + def define_task + desc "Runs `stree write` over source files" + task(name) { run_task } + end + + def run_task + SyntaxTree::CLI.run(["write", source_files].compact) + + # exit($?.exitstatus) if $?&.exited? + end + end + end +end diff --git a/test/check_task_test.rb b/test/check_task_test.rb new file mode 100644 index 00000000..33333241 --- /dev/null +++ b/test/check_task_test.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative "test_helper" +require "syntax_tree/rake/check_task" + +module SyntaxTree + class CheckTaskTest < Minitest::Test + Invoke = Struct.new(:args) + + def test_task + source_files = "{app,config,lib}/**/*.rb" + + SyntaxTree::Rake::CheckTask.new { |t| t.source_files = source_files } + + invoke = nil + SyntaxTree::CLI.stub(:run, ->(args) { invoke = Invoke.new(args) }) do + ::Rake::Task["stree_check"].invoke + end + + assert_equal(["check", source_files], invoke.args) + end + end +end diff --git a/test/task_test.rb b/test/task_test.rb deleted file mode 100644 index c1e00b8b..00000000 --- a/test/task_test.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -require_relative "test_helper" -require "syntax_tree/rake/task" - -module SyntaxTree - class TaskTest < Minitest::Test - Invoke = Struct.new(:args) - - def test_task - source_files = "{app,config,lib}/**/*.rb" - - SyntaxTree::Rake::Task.new do |t| - t.source_files = source_files - end - - invoke = [] - SyntaxTree::CLI.stub(:run, ->(args) { invoke << Invoke.new(args) }) do - ::Rake::Task["check_and_format"].invoke - end - - assert_equal( - [["check", source_files], ["format", source_files]], invoke.map(&:args) - ) - end - end -end diff --git a/test/write_task_test.rb b/test/write_task_test.rb new file mode 100644 index 00000000..deb5acfd --- /dev/null +++ b/test/write_task_test.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative "test_helper" +require "syntax_tree/rake/write_task" + +module SyntaxTree + class WriteTaskTest < Minitest::Test + Invoke = Struct.new(:args) + + def test_task + source_files = "{app,config,lib}/**/*.rb" + + SyntaxTree::Rake::WriteTask.new { |t| t.source_files = source_files } + + invoke = nil + SyntaxTree::CLI.stub(:run, ->(args) { invoke = Invoke.new(args) }) do + ::Rake::Task["stree_write"].invoke + end + + assert_equal(["write", source_files], invoke.args) + end + end +end From 66f708bd7f196c97a5a6889ace263b731a4779cc Mon Sep 17 00:00:00 2001 From: Wender Freese Date: Mon, 16 May 2022 09:44:04 -0300 Subject: [PATCH 3/3] Remove explicit call for exit() --- lib/syntax_tree/rake/check_task.rb | 2 -- lib/syntax_tree/rake/write_task.rb | 2 -- 2 files changed, 4 deletions(-) diff --git a/lib/syntax_tree/rake/check_task.rb b/lib/syntax_tree/rake/check_task.rb index 0c0dc860..5fc4ce56 100644 --- a/lib/syntax_tree/rake/check_task.rb +++ b/lib/syntax_tree/rake/check_task.rb @@ -45,8 +45,6 @@ def define_task def run_task SyntaxTree::CLI.run(["check", source_files].compact) - - # exit($?.exitstatus) if $?&.exited? end end end diff --git a/lib/syntax_tree/rake/write_task.rb b/lib/syntax_tree/rake/write_task.rb index 08b6018c..6143d6b9 100644 --- a/lib/syntax_tree/rake/write_task.rb +++ b/lib/syntax_tree/rake/write_task.rb @@ -45,8 +45,6 @@ def define_task def run_task SyntaxTree::CLI.run(["write", source_files].compact) - - # exit($?.exitstatus) if $?&.exited? end end end