Class: YARD::Handlers::C::Base

Inherits:
Base
  • Object
show all
Includes:
HandlerMethods, Parser::C
Defined in:
lib/yard/handlers/c/base.rb

Overview

Since:

  • 0.8.0

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

Registering objects collapse

Looking up Symbol and Var Values collapse

Parsing an Inner Block collapse

Processing other files collapse

Class Method Summary collapse

Methods included from HandlerMethods

#handle_alias, #handle_attribute, #handle_class, #handle_constants, #handle_method, #handle_module

Methods included from CodeObjects::NamespaceMapper

#clear_separators, #default_separator, #register_separator, #separators, #separators_for_type, #separators_match, #types_for_separator

Constructor Details

This class inherits a constructor from YARD::Handlers::Base

Class Method Details

.handles?(statement, processor) ⇒ Boolean

Returns whether the handler handles this statement

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

#namespacesObject

Since:

  • 0.8.0



87
88
89
# File 'lib/yard/handlers/c/base.rb', line 87

def namespaces
  globals.cruby_namespaces ||= {}
end

#override_commentsObject

Since:

  • 0.8.0



58
59
60
# File 'lib/yard/handlers/c/base.rb', line 58

def override_comments
  globals.cruby_override_comments ||= []
end

#parse_block(opts = {}) ⇒ Object

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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_filesObject

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

Since:

  • 0.8.0



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

Since:

  • 0.8.0



48
49
50
# File 'lib/yard/handlers/c/base.rb', line 48

def register_visibility(object, visibility = nil)
  super(object, visibility) if visibility
end

#symbolsObject

Since:

  • 0.8.0



54
55
56
# File 'lib/yard/handlers/c/base.rb', line 54

def symbols
  globals.cruby_symbols ||= {}
end