Class: Decode::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/decode/definition.rb

Overview

A symbol with attached documentation.

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#commentsObject (readonly)

The comment lines which directly preceeded the definition.



60
61
62
# File 'lib/decode/definition.rb', line 60

def comments
  @comments
end

#languageObject (readonly)

The language the symbol is defined within.



56
57
58
# File 'lib/decode/definition.rb', line 56

def language
  @language
end

#nameObject

The symbol name. e.g. ‘:Decode`.



48
49
50
# File 'lib/decode/definition.rb', line 48

def name
  @name
end

#parentObject

The parent definition, defining lexical scope.



52
53
54
# File 'lib/decode/definition.rb', line 52

def parent
  @parent
end

Instance Method Details

#container?Boolean

Whether this definition can contain nested definitions.

Returns:

  • (Boolean)


146
147
148
# File 'lib/decode/definition.rb', line 146

def container?
	false
end

#convert(kind) ⇒ Object

Convert this definition into another kind of definition.

Raises:

  • (ArgumentError)


85
86
87
# File 'lib/decode/definition.rb', line 85

def convert(kind)
	raise ArgumentError, "Unable to convert #{self} into #{kind}!"
end

#documentationObject

Structured access to the definitions comments.



160
161
162
163
164
# File 'lib/decode/definition.rb', line 160

def documentation
	if @comments&.any?
		@documentation ||= Documentation.new(@comments, @language)
	end
end

#long_formObject

A long form of the definition. e.g. ‘def initialize(kind, name, comments, **options)`.



118
119
120
# File 'lib/decode/definition.rb', line 118

def long_form
	self.short_form
end

#multiline?Boolean

Whether the definition spans multiple lines.

Returns:

  • (Boolean)


133
134
135
# File 'lib/decode/definition.rb', line 133

def multiline?
	false
end

#nested?Boolean

Whether this represents a single entity to be documented (along with it’s contents).

Returns:

  • (Boolean)


153
154
155
# File 'lib/decode/definition.rb', line 153

def nested?
	container?
end

#nested_nameObject

The name of this definition plus the nesting prefix.



76
77
78
# File 'lib/decode/definition.rb', line 76

def nested_name
	"::#{@name}"
end

#pathObject Also known as: lexical_path

The lexical scope as an array of names. e.g. ‘[:Decode, :Definition]`



92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/decode/definition.rb', line 92

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_formObject

A long form which uses the qualified name if possible. Defaults to #long_form.



126
127
128
# File 'lib/decode/definition.rb', line 126

def qualified_form
	self.long_form
end

#qualified_nameObject

The qualified name is an absolute name which includes any and all namespacing.



64
65
66
67
68
69
70
71
72
# File 'lib/decode/definition.rb', line 64

def qualified_name
	@qualified_name ||= begin
		if @parent
			@parent.qualified_name + self.nested_name
		else
			@name.to_s
		end
	end
end

#short_formObject

A short form of the definition. e.g. ‘def short_form`.



111
112
# File 'lib/decode/definition.rb', line 111

def short_form
end

#start_with?(prefix) ⇒ Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/decode/definition.rb', line 80

def start_with?(prefix)
	self.nested_name.start_with?(prefix)
end

#textObject

The full text of the definition.



140
141
# File 'lib/decode/definition.rb', line 140

def text
end

#to_sObject



41
42
43
# File 'lib/decode/definition.rb', line 41

def to_s
	"\#<#{self.class} #{qualified_name}>"
end