Class: Yard::Lint::Executor::InProcessRegistry
- Inherits:
-
Object
- Object
- Yard::Lint::Executor::InProcessRegistry
- Defined in:
- lib/yard/lint/executor/in_process_registry.rb
Overview
Manages shared YARD::Registry for in-process execution. Ensures files are parsed once and shared across all validators.
Instance Attribute Summary collapse
-
#warnings ⇒ Array<String>
readonly
Warnings captured during parsing.
Instance Method Summary collapse
-
#all_objects ⇒ Array<YARD::CodeObjects::Base>
Get all objects from the registry.
-
#clear! ⇒ void
Clear the registry and reset state.
-
#initialize ⇒ InProcessRegistry
constructor
A new instance of InProcessRegistry.
-
#objects_for_validator(visibility:, file_excludes: [], file_selection: nil) ⇒ Array<YARD::CodeObjects::Base>
Get objects filtered for a specific validator.
-
#parse(files, source: nil) ⇒ void
Parse Ruby source files and populate the YARD registry.
-
#parsed? ⇒ Boolean
Check if registry has been parsed.
Constructor Details
#initialize ⇒ InProcessRegistry
Returns a new instance of InProcessRegistry.
15 16 17 18 19 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 15 def initialize @parsed = false @warnings = [] @mutex = Mutex.new end |
Instance Attribute Details
#warnings ⇒ Array<String> (readonly)
Returns warnings captured during parsing.
13 14 15 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 13 def warnings @warnings end |
Instance Method Details
#all_objects ⇒ Array<YARD::CodeObjects::Base>
Get all objects from the registry
82 83 84 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 82 def all_objects YARD::Registry.all end |
#clear! ⇒ void
This method returns an undefined value.
Clear the registry and reset state
125 126 127 128 129 130 131 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 125 def clear! @mutex.synchronize do YARD::Registry.clear @parsed = false @warnings = [] end end |
#objects_for_validator(visibility:, file_excludes: [], file_selection: nil) ⇒ Array<YARD::CodeObjects::Base>
Get objects filtered for a specific validator
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 91 def objects_for_validator(visibility:, file_excludes: [], file_selection: nil) objects = all_objects # Filter by visibility unless visibility == :all objects = objects.select do |obj| !obj.respond_to?(:visibility) || obj.visibility == :public end end # Filter by file selection (if provided) if file_selection && !file_selection.empty? = file_selection.to_set { |f| File.(f) } objects = objects.select do |obj| obj.file && .include?(File.(obj.file)) end end # Filter by file excludes unless file_excludes.empty? objects = objects.reject do |obj| next false unless obj.file file_excludes.any? do |pattern| File.fnmatch(pattern, obj.file, File::FNM_PATHNAME | File::FNM_EXTGLOB) end end end objects end |
#parse(files, source: nil) ⇒ void
This method returns an undefined value.
Parse Ruby source files and populate the YARD registry. Captures any warnings emitted by YARD during parsing for later dispatch.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 27 def parse(files, source: nil) @mutex.synchronize do return if @parsed YARD::Registry.clear # Register custom tags declared in .yardopts so the parser does not # warn about them (matching how the real `yard` command behaves). # Suppress YARD's default output by setting log level high # YARD uses its own logging levels, 4 is ERROR/FATAL level original_level = YARD::Logger.instance.level YARD::Logger.instance.level = 4 # Only show fatal errors begin if source virtual_path = files.first # First pass: register directive/macro definitions from the in-memory source. # We set parser.file manually so registered objects carry the virtual path. parse_source_string(source, virtual_path) # Clear checksums so the second pass is not skipped YARD::Registry.checksums.clear # Second pass: full parse with all directives available @warnings = capture_warnings { parse_source_string(source, virtual_path) } else # First pass: parse all files to process directive definitions YARD.parse(files) # Clear checksums to force reparsing without clearing the registry. # This allows macro definitions from the first pass to be available # during the second pass, enabling proper directive expansion regardless of parse order. YARD::Registry.checksums.clear # Second pass: reparse files now that all directive definitions are available @warnings = capture_warnings { YARD.parse(files) } end @parsed = true ensure # Restore the log level even if parsing raises, so a single bad # file does not leave YARD's global logger silenced for the run. YARD::Logger.instance.level = original_level end end end |
#parsed? ⇒ Boolean
Check if registry has been parsed
76 77 78 |
# File 'lib/yard/lint/executor/in_process_registry.rb', line 76 def parsed? @parsed end |