Module: Docscribe::Plugin
- Defined in:
- lib/docscribe/plugin.rb,
lib/docscribe/plugin/tag.rb,
lib/docscribe/plugin/context.rb,
lib/docscribe/plugin/registry.rb,
lib/docscribe/plugin/base/tag_plugin.rb,
lib/docscribe/plugin/base/collector_plugin.rb
Overview
Plugin system entry point.
Provides two extension points:
-
TagPlugin — hooks into already-collected method insertions and appends additional YARD tags. Subclass Base::TagPlugin and override #call.
-
CollectorPlugin — receives the raw AST and walks it independently. Used for non-standard structures that Docscribe’s Collector does not recognize. Subclass Base::CollectorPlugin and override #collect.
Defined Under Namespace
Modules: Base, Registry Classes: Context, Tag
Class Method Summary collapse
- .debug? ⇒ Boolean
-
.process_plugin_insertions(results, entry, plugin) ⇒ Array<Hash>
Merge plugin metadata into collector results and filter invalid ones.
-
.process_single_plugin_result(entry, ast, buffer) ⇒ Array<Hash>
Process a single collector plugin’s result.
-
.run_collector_plugins(ast, buffer) ⇒ Array<Hash>
Run all registered CollectorPlugins for one file’s AST.
-
.run_tag_plugins(context) ⇒ Array<Docscribe::Plugin::Tag>
Run all registered TagPlugins for one method context.
-
.valid_plugin_result?(insertion, plugin) ⇒ Boolean
Validate a CollectorPlugin result is a Hash.
Class Method Details
.debug? ⇒ Boolean
104 105 106 |
# File 'lib/docscribe/plugin.rb', line 104 def self.debug? ENV['DOCSCRIBE_DEBUG'] == '1' end |
.process_plugin_insertions(results, entry, plugin) ⇒ Array<Hash>
Merge plugin metadata into collector results and filter invalid ones.
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/docscribe/plugin.rb', line 78 def self.process_plugin_insertions(results, entry, plugin) results.map do |insertion| next nil unless valid_plugin_result?(insertion, plugin) insertion.merge( __docscribe_priority: entry.priority, __docscribe_plugin_class: plugin.class.name, __docscribe_plugin_order: entry.order ) end.compact end |
.process_single_plugin_result(entry, ast, buffer) ⇒ Array<Hash>
Process a single collector plugin’s result.
Merges plugin metadata into each hash insertion and handles errors.
63 64 65 66 67 68 69 70 |
# File 'lib/docscribe/plugin.rb', line 63 def self.process_single_plugin_result(entry, ast, buffer) plugin = entry.plugin results = Array(plugin.collect(ast, buffer)) process_plugin_insertions(results, entry, plugin) rescue StandardError => e warn "Docscribe: CollectorPlugin #{plugin.class} raised #{e.class}: #{e.}" if debug? [] end |
.run_collector_plugins(ast, buffer) ⇒ Array<Hash>
Run all registered CollectorPlugins for one file’s AST.
50 51 52 |
# File 'lib/docscribe/plugin.rb', line 50 def self.run_collector_plugins(ast, buffer) Registry.collector_entries.flat_map { |entry| process_single_plugin_result(entry, ast, buffer) } end |
.run_tag_plugins(context) ⇒ Array<Docscribe::Plugin::Tag>
Run all registered TagPlugins for one method context.
Errors in individual plugins are caught so one broken plugin does not abort the entire run.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/docscribe/plugin.rb', line 29 def self.run_tag_plugins(context) Registry.tag_entries # Higher number => higher priority (run earlier). # This matters when multiple TagPlugins emit the same tag name # and Docscribe deduplicates tags by name. .sort_by { |entry| [-entry.priority, entry.order] } .flat_map do |entry| plugin = entry.plugin plugin.call(context) rescue StandardError => e warn "Docscribe: TagPlugin #{plugin.class} raised #{e.class}: #{e.}" if debug? [] end end |
.valid_plugin_result?(insertion, plugin) ⇒ Boolean
Validate a CollectorPlugin result is a Hash.
96 97 98 99 100 101 |
# File 'lib/docscribe/plugin.rb', line 96 def self.valid_plugin_result?(insertion, plugin) return true if insertion.is_a?(Hash) warn "Docscribe: CollectorPlugin #{plugin.class} returned #{insertion.class}, expected Hash" if debug? false end |