Class: YARD::Handlers::C::Base
- Includes:
- HandlerMethods, Parser::C
- Defined in:
- lib/yard/handlers/c/base.rb
Overview
Direct Known Subclasses
AliasHandler, AttributeHandler, ClassHandler, ConstantHandler, InitHandler, MethodHandler, MixinHandler, ModuleHandler, OverrideCommentHandler, PathHandler, StructHandler, SymbolHandler
Constant Summary
Constant Summary
Constants included from CodeObjects
CodeObjects::BUILTIN_ALL, CodeObjects::BUILTIN_CLASSES, CodeObjects::BUILTIN_EXCEPTIONS, CodeObjects::BUILTIN_EXCEPTIONS_HASH, CodeObjects::BUILTIN_MODULES, CodeObjects::CONSTANTMATCH, CodeObjects::CONSTANTSTART, CodeObjects::CSEP, CodeObjects::CSEPQ, CodeObjects::ISEP, CodeObjects::ISEPQ, CodeObjects::METHODMATCH, CodeObjects::METHODNAMEMATCH, CodeObjects::NAMESPACEMATCH, CodeObjects::NSEP, CodeObjects::NSEPQ
Instance Attribute Summary collapse
-
#extra_state ⇒ Object
inherited
from Base
readonly
Returns the value of attribute extra_state.
-
#globals ⇒ Object
inherited
from Base
readonly
Returns the value of attribute globals.
-
#namespace ⇒ Object
inherited
from Base
Returns the value of attribute namespace.
-
#owner ⇒ Object
inherited
from Base
Returns the value of attribute owner.
-
#parser ⇒ Processor
inherited
from Base
readonly
The processor object that manages all global state during handling.
-
#scope ⇒ Object
inherited
from Base
Returns the value of attribute scope.
-
#statement ⇒ Object
inherited
from Base
readonly
The statement object currently being processed.
-
#visibility ⇒ Object
inherited
from Base
Returns the value of attribute visibility.
Registering objects collapse
- #register_docstring(object, docstring = nil, stmt = nil) ⇒ Object
- #register_file_info(object, file = nil, line = nil, comments = nil) ⇒ Object
- #register_source(object, source = nil, type = nil) ⇒ Object
- #register_visibility(object, visibility = nil) ⇒ Object
Looking up Symbol and Var Values collapse
- #ensure_variable_defined!(var, max_retries = 1) ⇒ Object
- #namespace_for_variable(var) ⇒ Object
- #namespaces ⇒ Object
- #override_comments ⇒ Object
- #processed_files ⇒ Object
- #symbols ⇒ Object
Parsing an Inner Block collapse
Processing other files collapse
Class Method Summary collapse
-
.handles?(statement, processor) ⇒ Boolean
Whether the handler handles this statement.
- .statement_class(type = nil) ⇒ Object
Methods included from HandlerMethods
#handle_alias, #handle_attribute, #handle_class, #handle_constants, #handle_method, #handle_module
Constructor Details
This class inherits a constructor from YARD::Handlers::Base
Instance Attribute Details
#extra_state ⇒ Object (readonly) Originally defined in class Base
Returns the value of attribute extra_state
#globals ⇒ Object (readonly) Originally defined in class Base
Returns the value of attribute globals
#namespace ⇒ Object Originally defined in class Base
Returns the value of attribute namespace
#owner ⇒ Object Originally defined in class Base
Returns the value of attribute owner
#parser ⇒ Processor (readonly) Originally defined in class Base
Returns the processor object that manages all global state during handling.
#scope ⇒ Object Originally defined in class Base
Returns the value of attribute scope
#statement ⇒ Object (readonly) Originally defined in class Base
Returns the statement object currently being processed. Usually refers to one semantic language statement, though the strict definition depends on the parser used.
#visibility ⇒ Object Originally defined in class Base
Returns the value of attribute visibility
Class Method Details
.handles?(statement, processor) ⇒ Boolean
Returns whether the handler handles this statement
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/yard/handlers/c/base.rb', line 9 def self.handles?(statement, processor) processor.globals.cruby_processed_files ||= {} processor.globals.cruby_processed_files[processor.file] = true if statement.respond_to? :declaration src = statement.declaration else src = statement.source end handlers.any? do |a_handler| statement_class >= statement.class && case a_handler when String src == a_handler when Regexp src =~ a_handler end end end |
.statement_class(type = nil) ⇒ Object
30 31 32 |
# File 'lib/yard/handlers/c/base.rb', line 30 def self.statement_class(type = nil) type ? @statement_class = type : (@statement_class || Statement) end |
Instance Method Details
#ensure_variable_defined!(var, max_retries = 1) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/yard/handlers/c/base.rb', line 68 def ensure_variable_defined!(var, max_retries = 1) retries, object = 0, nil loop do object = namespace_for_variable(var) break unless object.is_a?(Proxy) if retries <= max_retries log.debug "Missing namespace variable #{var} in file `#{parser.file}', moving it to the back of the line." parser.parse_remaining_files else raise NamespaceMissingError, object end retries += 1 end object end |
#namespace_for_variable(var) ⇒ Object
62 63 64 65 66 |
# File 'lib/yard/handlers/c/base.rb', line 62 def namespace_for_variable(var) return namespaces[var] if namespaces[var] var = remove_var_prefix(var) var.empty? ? nil : P(var) end |
#namespaces ⇒ Object
87 88 89 |
# File 'lib/yard/handlers/c/base.rb', line 87 def namespaces globals.cruby_namespaces ||= {} end |
#override_comments ⇒ Object
58 59 60 |
# File 'lib/yard/handlers/c/base.rb', line 58 def override_comments globals.cruby_override_comments ||= [] end |
#parse_block(opts = {}) ⇒ Object
97 98 99 100 101 102 |
# File 'lib/yard/handlers/c/base.rb', line 97 def parse_block(opts = {}) return if !statement.block || statement.block.empty? push_state(opts) do parser.process(statement.block) end end |
#process_file(file, object) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/yard/handlers/c/base.rb', line 106 def process_file(file, object) file = File.cleanpath(file) return if processed_files[file] processed_files[file] = file begin log.debug "Processing embedded call to C source #{file}..." globals.ordered_parser.files.delete(file) if globals.ordered_parser parser.process(Parser::C::CParser.new(File.read(file), file).parse) rescue Errno::ENOENT log.warn "Missing source file `#{file}' when parsing #{object}" end end |
#processed_files ⇒ Object
91 92 93 |
# File 'lib/yard/handlers/c/base.rb', line 91 def processed_files globals.cruby_processed_files ||= {} end |
#register_docstring(object, docstring = nil, stmt = nil) ⇒ Object
36 37 38 |
# File 'lib/yard/handlers/c/base.rb', line 36 def register_docstring(object, docstring = nil, stmt = nil) super(object, docstring, stmt) if docstring end |
#register_file_info(object, file = nil, line = nil, comments = nil) ⇒ Object
40 41 42 |
# File 'lib/yard/handlers/c/base.rb', line 40 def register_file_info(object, file = nil, line = nil, comments = nil) super(object, file, line, comments) if file end |
#register_source(object, source = nil, type = nil) ⇒ Object
44 45 46 |
# File 'lib/yard/handlers/c/base.rb', line 44 def register_source(object, source = nil, type = nil) super(object, source, type) if source end |
#register_visibility(object, visibility = nil) ⇒ Object
48 49 50 |
# File 'lib/yard/handlers/c/base.rb', line 48 def register_visibility(object, visibility = nil) super(object, visibility) if visibility end |
#symbols ⇒ Object
54 55 56 |
# File 'lib/yard/handlers/c/base.rb', line 54 def symbols globals.cruby_symbols ||= {} end |