/
cops_documentation.rake
50 lines (43 loc) · 1.42 KB
/
cops_documentation.rake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# frozen_string_literal: true
require 'yard'
require 'rubocop'
require 'rubocop-rspec'
require 'rubocop/cops_documentation_generator'
YARD::Rake::YardocTask.new(:yard_for_generate_documentation) do |task|
task.files = ['lib/rubocop/cop/**/*.rb']
task.options = ['--no-output']
end
desc 'Generate docs of all cops departments'
task generate_cops_documentation: :yard_for_generate_documentation do
generator = CopsDocumentationGenerator.new(
departments: %w[RSpec/Capybara RSpec/FactoryBot RSpec/Rails RSpec]
)
generator.call
end
desc 'Syntax check for the documentation comments'
task documentation_syntax_check: :yard_for_generate_documentation do
require 'parser/ruby25'
ok = true
YARD::Registry.load!
cops = RuboCop::Cop::Registry.global
cops.each do |cop|
examples = YARD::Registry.all(:class).find do |code_object|
next unless RuboCop::Cop::Badge.for(code_object.to_s) == cop.badge
break code_object.tags('example')
end
examples.to_a.each do |example|
begin
buffer = Parser::Source::Buffer.new('<code>', 1)
buffer.source = example.text
parser = Parser::Ruby25.new(RuboCop::AST::Builder.new)
parser.diagnostics.all_errors_are_fatal = true
parser.parse(buffer)
rescue Parser::SyntaxError => e
path = example.object.file
puts "#{path}: Syntax Error in an example. #{e}"
ok = false
end
end
end
abort unless ok
end