1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# -*- coding: utf-8 -*- #
# frozen_string_literal: true
module Rouge
module Lexers
module TypescriptCommon
def keywords
@keywords ||= super + Set.new(%w(
is namespace static private protected public
implements readonly
))
end
def declarations
@declarations ||= super + Set.new(%w(
type abstract
))
end
def reserved
@reserved ||= super + Set.new(%w(
string any void number namespace module
declare default interface keyof
))
end
def builtins
@builtins ||= super + %w(
Capitalize ConstructorParameters Exclude Extract InstanceType
Lowercase NonNullable Omit OmitThisParameter Parameters
Partial Pick Readonly Record Required
ReturnType ThisParameterType ThisType Uncapitalize Uppercase
)
end
def self.extended(base)
base.prepend :root do
rule %r/[?][.]/, base::Punctuation
rule %r/[?]{2}/, base::Operator
# Positive Examples:
# const cat = { name: "Garfield" } satisfies Person;
# import {something as thingy} from 'module'
# export { foo as default }
# ...spreadOperator as const;
# Negative Example:
# cy.get('kitten').as('friend')
rule %r{(?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(as)|(satisfies))\s+}, base::Keyword::Declaration
end
base.prepend :statement do
rule %r/(#{Javascript.id_regex})(\??)(\s*)(:)/ do
groups base::Name::Label, base::Punctuation, base::Text, base::Punctuation
push :expr_start
end
end
end
end
end
end
|