Sha256: 2af3b1479aba4e8c9a19f9e100266e17e3b6f1a585d6cc812e7c0118b33b65b3

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

module Puppet
  module Pops
    module Parser
      # This Lexer adds code to create comment tokens.
      # The default lexer just throws them out
      # Ref - https://github.com/puppetlabs/puppet-specifications/blob/master/language/lexical_structure.md#comments
      class Lexer2WithComments < Puppet::Pops::Parser::Lexer2
        # The PATTERN_COMMENT in lexer2 also consumes the trailing \r in the token and
        # we don't want that.
        PATTERN_COMMENT_NO_WS = /#[^\r\n]*/.freeze

        TOKEN_COMMENT = [:COMMENT, '#', 1].freeze
        TOKEN_MLCOMMENT = [:MLCOMMENT, nil, 0].freeze

        def initialize
          super

          # Remove the selector for line comments so we can add our own
          @new_selector = @selector.reject { |k, _v| k == '#' }

          # Add code to scan line comments
          @new_selector['#'] = lambda {
            scn = @scanner
            before = scn.pos
            value = scn.scan(PATTERN_COMMENT_NO_WS)

            if value
              emit_completed([:TOKEN_COMMENT, value[1..-1].freeze, scn.pos - before], before)
            else
              # It's probably not possible to EVER get here ... but just incase
              emit(TOKEN_COMMENT, before)
            end
          }.freeze

          # Add code to scan multi-line comments
          old_lambda = @new_selector['/']
          @new_selector['/'] = lambda {
            scn = @scanner
            la = scn.peek(2)
            if la[1] == '*'
              before = scn.pos
              value = scn.scan(PATTERN_MLCOMMENT)
              return emit_completed([:TOKEN_MLCOMMENT, value[2..-3].freeze, scn.pos - before], before) if value
            end
            old_lambda.call
          }.freeze
          @new_selector.freeze
          @selector = @new_selector
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
puppet-editor-services-2.0.4 lib/puppet-languageserver/puppet_lexer_helper.rb