Class: Puppet::Pops::Parser::Locator::Locator19
- Inherits:
-
AbstractLocator
- Object
- Puppet::Pops::Parser::Locator
- AbstractLocator
- Puppet::Pops::Parser::Locator::Locator19
- Includes:
- Types::PuppetObject
- Defined in:
- lib/puppet/pops/parser/locator.rb
Overview
This implementation is for Ruby19 and Ruby20. It uses byteslice to get strings from byte based offsets. For Ruby20 this is faster than using the Stringscanner.charpos method (byteslice outperforms it, when strings are frozen).
Instance Attribute Summary
Attributes inherited from AbstractLocator
Class Method Summary collapse
-
._pcore_type ⇒ Object
rubocop:disable Naming/MemoizedInstanceVariableName.
Instance Method Summary collapse
-
#char_length(offset, end_offset) ⇒ Object
Returns the length measured in number of characters from the given start and end byte offset.
-
#char_offset(byte_offset) ⇒ Object
Returns the character offset for a given byte offset Ruby 19 is multibyte but has no character position methods, must use byteslice.
-
#extract_text(offset, length) ⇒ Object
Extracts the text from byte offset with given byte length.
-
#offset_on_line(offset) ⇒ Object
Returns the offset on line (first offset on a line is 0).
Methods included from Types::PuppetObject
#_pcore_all_contents, #_pcore_contents, #_pcore_init_hash, #_pcore_type, #to_s
Methods inherited from AbstractLocator
#ary_bsearch_i, #eql?, #hash, #initialize, #line_for_offset, #pos_on_line, #to_location_hash
Methods inherited from Puppet::Pops::Parser::Locator
compute_line_index, #extract_tree_text, #file, #line_for_offset, #line_index, locator, #pos_on_line, #string, #to_s, #to_uri
Constructor Details
This class inherits a constructor from Puppet::Pops::Parser::Locator::AbstractLocator
Class Method Details
._pcore_type ⇒ Object
rubocop:disable Naming/MemoizedInstanceVariableName
321 322 323 324 325 326 327 328 329 330 331 332 |
# File 'lib/puppet/pops/parser/locator.rb', line 321 def self._pcore_type @type ||= Types::PObjectType.new('Puppet::AST::Locator', { 'attributes' => { 'string' => Types::PStringType::DEFAULT, 'file' => Types::PStringType::DEFAULT, 'line_index' => { Types::KEY_TYPE => Types::POptionalType.new(Types::PArrayType.new(Types::PIntegerType::DEFAULT)), Types::KEY_VALUE => nil } } }) end |
Instance Method Details
#char_length(offset, end_offset) ⇒ Object
Returns the length measured in number of characters from the given start and end byte offset
349 350 351 |
# File 'lib/puppet/pops/parser/locator.rb', line 349 def char_length(offset, end_offset) string.byteslice(offset, end_offset - offset).length end |
#char_offset(byte_offset) ⇒ Object
Returns the character offset for a given byte offset Ruby 19 is multibyte but has no character position methods, must use byteslice
344 345 346 |
# File 'lib/puppet/pops/parser/locator.rb', line 344 def char_offset(byte_offset) string.byteslice(0, byte_offset).length end |
#extract_text(offset, length) ⇒ Object
Extracts the text from byte offset with given byte length
355 356 357 |
# File 'lib/puppet/pops/parser/locator.rb', line 355 def extract_text(offset, length) string.byteslice(offset, length) end |
#offset_on_line(offset) ⇒ Object
Returns the offset on line (first offset on a line is 0). Ruby 19 is multibyte but has no character position methods, must use byteslice
337 338 339 340 |
# File 'lib/puppet/pops/parser/locator.rb', line 337 def offset_on_line(offset) line_offset = line_index[line_for_offset(offset) - 1] @string.byteslice(line_offset, offset - line_offset).length end |