Class: Decode::Definition
- Inherits:
-
Object
- Object
- Decode::Definition
- Defined in:
- lib/decode/definition.rb
Overview
A symbol with attached documentation.
Direct Known Subclasses
Language::Ruby::Attribute, Language::Ruby::Block, Language::Ruby::Call, Language::Ruby::Class, Language::Ruby::Constant, Language::Ruby::Definition, Language::Ruby::Method, Language::Ruby::Module, Language::Ruby::Singleton, Scope
Instance Attribute Summary collapse
-
#comments ⇒ Object
readonly
The comment lines which directly preceeded the definition.
-
#language ⇒ Object
readonly
The language the symbol is defined within.
-
#name ⇒ Object
readonly
The symbol name.
-
#parent ⇒ Object
readonly
The parent symbol, defining lexical scope.
Instance Method Summary collapse
-
#container? ⇒ Boolean
Whether this definition can contain nested definitions.
- #convert(kind) ⇒ Object
-
#documentation ⇒ Documentation | Nil
Structured access to the definitions comments.
-
#initialize(name, parent: nil, language: parent.language, comments: nil) ⇒ Definition
constructor
Initialize the symbol.
-
#long_form ⇒ String | nil
A long form of the definition.
-
#multiline? ⇒ Boolean
Whether the definition spans multiple lines.
-
#nested? ⇒ Boolean
Whether this represents a single entity to be documented (along with it’s contents).
-
#nested_name ⇒ String
The name of this definition plus the nesting prefix.
-
#path ⇒ Array
(also: #lexical_path)
The lexical scope which is an array of lexical Key instances as generated by key.
-
#qualified_form ⇒ String | nil
A long form which uses the qualified name if possible.
-
#qualified_name ⇒ String
The qualified name is an absolute name which includes any and all namespacing.
-
#short_form ⇒ String | nil
A short form of the definition.
- #start_with?(prefix) ⇒ Boolean
-
#text ⇒ String | nil
The full text of the definition.
- #to_s ⇒ Object
Constructor Details
#initialize(name, parent: nil, language: parent.language, comments: nil) ⇒ Definition
Initialize the symbol.
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/decode/definition.rb', line 29 def initialize(name, parent: nil, language: parent.language, comments: nil) @name = name @comments = comments @language = language @parent = parent @path = nil @qualified_name = nil @documentation = nil end |
Instance Attribute Details
#comments ⇒ Object (readonly)
The comment lines which directly preceeded the definition.
57 58 59 |
# File 'lib/decode/definition.rb', line 57 def comments @comments end |
#language ⇒ Object (readonly)
The language the symbol is defined within.
53 54 55 |
# File 'lib/decode/definition.rb', line 53 def language @language end |
#name ⇒ Object (readonly)
The symbol name. e.g. ‘:Decode`.
47 48 49 |
# File 'lib/decode/definition.rb', line 47 def name @name end |
#parent ⇒ Object (readonly)
The parent symbol, defining lexical scope.
50 51 52 |
# File 'lib/decode/definition.rb', line 50 def parent @parent end |
Instance Method Details
#container? ⇒ Boolean
Whether this definition can contain nested definitions.
141 142 143 |
# File 'lib/decode/definition.rb', line 141 def container? false end |
#convert(kind) ⇒ Object
81 82 83 |
# File 'lib/decode/definition.rb', line 81 def convert(kind) raise ArgumentError, "Unable to convert #{self} into #{kind}!" end |
#documentation ⇒ Documentation | Nil
Structured access to the definitions comments.
155 156 157 158 159 |
# File 'lib/decode/definition.rb', line 155 def documentation if @comments&.any? @documentation ||= Documentation.new(@comments) end end |
#long_form ⇒ String | nil
A long form of the definition. e.g. ‘def initialize(kind, name, comments, **options)`.
113 114 115 |
# File 'lib/decode/definition.rb', line 113 def long_form self.short_form end |
#multiline? ⇒ Boolean
Whether the definition spans multiple lines.
128 129 130 |
# File 'lib/decode/definition.rb', line 128 def multiline? false end |
#nested? ⇒ Boolean
Whether this represents a single entity to be documented (along with it’s contents).
148 149 150 |
# File 'lib/decode/definition.rb', line 148 def nested? container? end |
#nested_name ⇒ String
The name of this definition plus the nesting prefix.
73 74 75 |
# File 'lib/decode/definition.rb', line 73 def nested_name "::#{@name}" end |
#path ⇒ Array Also known as: lexical_path
The lexical scope which is an array of lexical Key instances as generated by key.
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/decode/definition.rb', line 87 def path if @path # Cached version: @path elsif @parent # Merge with parent: @path = [*@parent.path, @name].freeze else # At top: @path = [@name].freeze end end |
#qualified_form ⇒ String | nil
A long form which uses the qualified name if possible. Defaults to #long_form.
121 122 123 |
# File 'lib/decode/definition.rb', line 121 def qualified_form self.long_form end |
#qualified_name ⇒ String
The qualified name is an absolute name which includes any and all namespacing.
61 62 63 64 65 66 67 68 69 |
# File 'lib/decode/definition.rb', line 61 def qualified_name @qualified_name ||= begin if @parent @parent.qualified_name + self.nested_name else @name.to_s end end end |
#short_form ⇒ String | nil
A short form of the definition. e.g. ‘def short_form`.
106 107 |
# File 'lib/decode/definition.rb', line 106 def short_form end |
#start_with?(prefix) ⇒ Boolean
77 78 79 |
# File 'lib/decode/definition.rb', line 77 def start_with?(prefix) self.nested_name.start_with?(prefix) end |
#text ⇒ String | nil
The full text of the definition.
135 136 |
# File 'lib/decode/definition.rb', line 135 def text end |
#to_s ⇒ Object
41 42 43 |
# File 'lib/decode/definition.rb', line 41 def to_s "\#<#{self.class} #{qualified_name}>" end |