Module: Foxtail::Bundle::Parser::AST

Defined in:
lib/foxtail/bundle/parser/ast.rb

Overview

Ruby port of fluent-bundle/src/ast.ts type system Data class-based implementation for immutability and type safety

Defined Under Namespace

Classes: Comment, FunctionReference, Junk, Message, MessageReference, NamedArgument, NumberLiteral, SelectExpression, StringLiteral, Term, TermReference, VariableReference, Variant

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#annotationsObject (readonly)

Array<Hash>

Parser annotations/errors



133
# File 'lib/foxtail/bundle/parser/ast.rb', line 133

Junk = Data.define(:content, :annotations)

#contentObject (readonly)

String

The comment text



133
# File 'lib/foxtail/bundle/parser/ast.rb', line 133

Junk = Data.define(:content, :annotations)

Class Method Details

.complex_pattern?(node) ⇒ Boolean

Check if node is a complex pattern (array of pattern elements)

Returns:

  • (Boolean)


159
# File 'lib/foxtail/bundle/parser/ast.rb', line 159

def self.complex_pattern?(node) = node.is_a?(Array) && node.all? {|el| pattern_element?(el) }

.expression?(node) ⇒ Boolean

Check if node is an expression

Returns:

  • (Boolean)


145
146
147
148
149
150
151
152
153
# File 'lib/foxtail/bundle/parser/ast.rb', line 145

def self.expression?(node)
  return true if literal?(node)

  node.is_a?(VariableReference) ||
    node.is_a?(TermReference) ||
    node.is_a?(MessageReference) ||
    node.is_a?(FunctionReference) ||
    node.is_a?(SelectExpression)
end

.literal?(node) ⇒ Boolean

Check if node is a literal (string or number)

Returns:

  • (Boolean)


142
# File 'lib/foxtail/bundle/parser/ast.rb', line 142

def self.literal?(node) = node.is_a?(StringLiteral) || node.is_a?(NumberLiteral)

.pattern?(node) ⇒ Boolean

Check if node is any valid pattern

Returns:

  • (Boolean)


162
# File 'lib/foxtail/bundle/parser/ast.rb', line 162

def self.pattern?(node) = node.is_a?(String) || complex_pattern?(node)

.pattern_element?(node) ⇒ Boolean

Check if node can be a pattern element

Returns:

  • (Boolean)


156
# File 'lib/foxtail/bundle/parser/ast.rb', line 156

def self.pattern_element?(node) = node.is_a?(String) || expression?(node)