from Node import error from kinds import lowercase_first_word # noqa: I201 class SyntaxClassification(object): ''' Represents a classification a token can receive for syntax highlighting. ''' def __init__(self, name, description): self.name = name self.swift_name = lowercase_first_word(name) self.description = description SYNTAX_CLASSIFICATIONS = [ SyntaxClassification('None', description=''' The token should not receive syntax coloring. '''), SyntaxClassification('Keyword', description=''' A Swift keyword, including contextual keywords. '''), SyntaxClassification('Identifier', description=''' A generic identifier. '''), SyntaxClassification('TypeIdentifier', description=''' An identifier referring to a type. '''), SyntaxClassification('DollarIdentifier', description=''' An identifier starting with `$` like `$0`. '''), SyntaxClassification('IntegerLiteral', description=''' An integer literal. '''), SyntaxClassification('FloatingLiteral', description=''' A floating point literal. '''), SyntaxClassification('StringLiteral', description=''' A string literal including multiline string literals. '''), SyntaxClassification('StringInterpolationAnchor', description=''' The opening and closing paranthesis of string interpolation. '''), SyntaxClassification('PoundDirectiveKeyword', description=''' A `#` keyword like `#warning`. '''), SyntaxClassification('BuildConfigId', description=''' A build configuration directive like `#if`, `#elseif`, `#else`. '''), SyntaxClassification('Attribute', description=''' An attribute starting with an `@`. '''), SyntaxClassification('ObjectLiteral', description=''' An image, color, etc. literal. '''), SyntaxClassification('EditorPlaceholder', description=''' An editor placeholder of the form `<#content#>` '''), SyntaxClassification('LineComment', description=''' A line comment starting with `//`. '''), SyntaxClassification('DocLineComment', description=''' A doc line comment starting with `///`. '''), SyntaxClassification('BlockComment', description=''' A block comment starting with `/**` and ending with `*/. '''), SyntaxClassification('DocBlockComment', description=''' A doc block comment starting with `/**` and ending with `*/. '''), ] def classification_by_name(classification_name): if classification_name is None: return None for classification in SYNTAX_CLASSIFICATIONS: if classification.name == classification_name: return classification error("Unknown syntax classification '%s'" % classification_name)