mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #35906 from yoones/notes-tags-registration
Notes tags registration
This commit is contained in:
commit
81c8f18d84
4 changed files with 72 additions and 2 deletions
|
@ -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.
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue