Merge pull request #35906 from yoones/notes-tags-registration

Notes tags registration
This commit is contained in:
Rafael França 2019-04-15 17:46:07 -04:00 committed by GitHub
commit 81c8f18d84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 72 additions and 2 deletions

View File

@ -481,6 +481,22 @@ lib/school.rb:
* [ 17] [FIXME]
```
#### Tags
You can add more default tags to search for by using `config.annotations.register_tags`. It receives a list of tags.
```ruby
config.annotations.register_tags("DEPRECATEME", "TESTME")
```
```bash
$ rails notes
app/controllers/admin/users_controller.rb:
* [ 20] [TODO] do A/B testing on this
* [ 42] [TESTME] this needs more functional tests
* [132] [DEPRECATEME] ensure this method is deprecated in next release
```
#### Directories
You can add more default directories to search from by using `config.annotations.register_directories`. It receives a list of directory names.

View File

@ -5,7 +5,7 @@ require "rails/source_annotation_extractor"
module Rails
module Command
class NotesCommand < Base # :nodoc:
class_option :annotations, aliases: "-a", desc: "Filter by specific annotations, e.g. Foobar TODO", type: :array, default: %w(OPTIMIZE FIXME TODO)
class_option :annotations, aliases: "-a", desc: "Filter by specific annotations, e.g. Foobar TODO", type: :array, default: Rails::SourceAnnotationExtractor::Annotation.tags
def perform(*)
require_application_and_environment!

View File

@ -29,6 +29,16 @@ module Rails
directories.push(*dirs)
end
def self.tags
@@tags ||= %w(OPTIMIZE FIXME TODO)
end
# Registers additional tags
# Rails::SourceAnnotationExtractor::Annotation.register_tags("TESTME", "DEPRECATEME")
def self.register_tags(*additional_tags)
tags.push(*additional_tags)
end
def self.extensions
@@extensions ||= {}
end
@ -66,6 +76,8 @@ module Rails
# Prints all annotations with tag +tag+ under the root directories +app+,
# +config+, +db+, +lib+, and +test+ (recursively).
#
# If +tag+ is <tt>nil</tt>, annotations with either default or registered tags are printed.
#
# Specific directories can be explicitly set using the <tt>:dirs</tt> key in +options+.
#
# Rails::SourceAnnotationExtractor.enumerate 'TODO|FIXME', dirs: %w(app lib), tag: true
@ -75,7 +87,8 @@ module Rails
# See <tt>#find_in</tt> for a list of file extensions that will be taken into account.
#
# This class method is the single entry point for the `rails notes` command.
def self.enumerate(tag, options = {})
def self.enumerate(tag = nil, options = {})
tag ||= Annotation.tags.join("|")
extractor = new(tag)
dirs = options.delete(:dirs) || Annotation.directories
extractor.display(extractor.find(dirs), options)

View File

@ -121,6 +121,47 @@ class Rails::Command::NotesTest < ActiveSupport::TestCase
OUTPUT
end
test "displays results from additional tags added to the default tags from a config file" do
app_file "app/models/profile.rb", "# TESTME: some method to test"
app_file "app/controllers/hello_controller.rb", "# DEPRECATEME: this action is no longer needed"
app_file "db/some_seeds.rb", "# TODO: default tags such as TODO are still present"
add_to_config 'config.annotations.register_tags "TESTME", "DEPRECATEME"'
assert_equal <<~OUTPUT, run_notes_command
app/controllers/hello_controller.rb:
* [1] [DEPRECATEME] this action is no longer needed
app/models/profile.rb:
* [1] [TESTME] some method to test
db/some_seeds.rb:
* [1] [TODO] default tags such as TODO are still present
OUTPUT
end
test "does not display results from tags that are neither default nor registered" do
app_file "app/models/profile.rb", "# TESTME: some method to test"
app_file "app/controllers/hello_controller.rb", "# DEPRECATEME: this action is no longer needed"
app_file "db/some_seeds.rb", "# TODO: default tags such as TODO are still present"
app_file "db/some_other_seeds.rb", "# BAD: this note should not be listed"
add_to_config 'config.annotations.register_tags "TESTME", "DEPRECATEME"'
assert_equal <<~OUTPUT, run_notes_command
app/controllers/hello_controller.rb:
* [1] [DEPRECATEME] this action is no longer needed
app/models/profile.rb:
* [1] [TESTME] some method to test
db/some_seeds.rb:
* [1] [TODO] default tags such as TODO are still present
OUTPUT
end
private
def run_notes_command(args = [])
rails "notes", args