# Copyright (c) 2021-2026 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

extensions:
  - name: 'js'
    description: JavaScript keyword
  - name: 'ts'
    description: TypeScript keyword
  - name: 'as'
    description: AssemblyScript keyword
  - name: 'ets'
    description: ETS keyword

keywords:
  - name: 'abstract'
    token: KEYW_ABSTRACT
    keyword: [ets]
    keyword_like: [ts]

  - name: 'any'
    token: KEYW_ANY
    keyword_like: [ts, ets]
    flags: [reserved_type_name, definable_type_name]

  - name: 'Any'
    token: KEYW_BUILTIN_ANY
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'anyref'
    token: KEYW_ANYREF
    keyword_like: [as]

  - name: 'arguments'
    token: KEYW_ARGUMENTS
    keyword_like: [js, ts]

  - name: 'as'
    token: KEYW_AS
    keyword: [ets]
    custom_handler: [js, ts, as]

  - name: 'asserts'
    token: KEYW_ASSERTS
    keyword_like: [ts]

  - name: 'async'
    token: KEYW_ASYNC
    keyword: [as, ets]
    keyword_like: [js, ts]

  - name: 'await'
    token: KEYW_AWAIT
    keyword: [ets]
    custom_handler: [js, ts]
    flags: [unary]

  - name: 'bigint'
    token: KEYW_BIGINT
    keyword_like: [ets, ts]
    flags: [predefined_type]

  - name: 'BigInt'
    token: KEYW_BUILTIN_BIGINT
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'boolean'
    token: KEYW_BOOLEAN
    keyword: [ets]
    keyword_like: [js, ts]
    flags: [reserved_type_name, predefined_type]

  - name: 'Boolean'
    token: KEYW_BUILTIN_BOOLEAN
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'break'
    token: KEYW_BREAK
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'byte'
    token: KEYW_BYTE
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Byte'
    token: KEYW_BUILTIN_BYTE
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'case'
    token: KEYW_CASE
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'catch'
    token: KEYW_CATCH
    keyword: [js, ts, as]
    keyword_like: [ets]

  - name: 'char'
    token: KEYW_CHAR
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Char'
    token: KEYW_BUILTIN_CHAR
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'class'
    token: KEYW_CLASS
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'const'
    token: KEYW_CONST
    keyword: [js, ts, as, ets]

  - name: 'constructor'
    token: KEYW_CONSTRUCTOR
    keyword: [ets]

  - name: 'continue'
    token: KEYW_CONTINUE
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'dataref'
    token: KEYW_DATAREF
    keyword_like: [as]

  - name: 'debugger'
    token: KEYW_DEBUGGER
    keyword: [js, ets, ts]

  - name: 'declare'
    token: KEYW_DECLARE
    keyword_like: [js, ts, as, ets]

  - name: 'default'
    token: KEYW_DEFAULT
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'delete'
    token: KEYW_DELETE
    keyword: [js, as, ts]
    flags: [unary]

  - name: 'do'
    token: KEYW_DO
    keyword: [js, ts, as, ets]

  - name: 'double'
    token: KEYW_DOUBLE
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Double'
    token: KEYW_BUILTIN_DOUBLE
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'else'
    token: KEYW_ELSE
    keyword: [js, ts, as, ets]
    flags: [reserved_type_name]

  - name: 'enum'
    token: KEYW_ENUM
    keyword: [js, as, ets, ts]
    flags: [reserved_type_name]

  - name: 'eqref'
    token: KEYW_EQREF
    keyword_like: [as]

  - name: 'eval'
    token: KEYW_EVAL
    keyword_like: [js, ts]

  - name: 'export'
    token: KEYW_EXPORT
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'extends'
    token: KEYW_EXTENDS
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'externref'
    token: KEYW_EXTERNREF
    keyword_like: [as]

  - name: 'f32'
    token: KEYW_F32
    keyword_like: [as]

  - name: 'f64'
    token: KEYW_F64
    keyword_like: [as]

  - name: 'false'
    token: LITERAL_FALSE
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'finally'
    token: KEYW_FINALLY
    keyword: [js, ts]
    keyword_like: [ets]
    flags: [reserved_type_name]

  - name: 'float'
    token: KEYW_FLOAT
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Float'
    token: KEYW_BUILTIN_FLOAT
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'for'
    token: KEYW_FOR
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'from'
    token: KEYW_FROM
    keyword_like: [as, js, ts, ets]

  - name: 'funcref'
    token: KEYW_FUNCREF
    keyword_like: [as]

  - name: 'function'
    token: KEYW_FUNCTION
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'get'
    token: KEYW_GET
    keyword_like: [as, js, ts, ets]

  - name: 'global'
    token: KEYW_GLOBAL
    keyword_like: [as, ts]

  - name: 'i8'
    token: KEYW_I8
    keyword_like: [as]

  - name: 'i16'
    token: KEYW_I16
    keyword_like: [as]

  - name: 'i31ref'
    token: KEYW_I31REF
    keyword_like: [as]

  - name: 'i32'
    token: KEYW_I32
    keyword_like: [as]

  - name: 'i64'
    token: KEYW_I64
    keyword_like: [as]

  - name: 'if'
    token: KEYW_IF
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'implements'
    token: KEYW_IMPLEMENTS
    keyword: [as, js, ets, ts]

  - name: 'import'
    token: KEYW_IMPORT
    keyword: [as, js, ets, ts]

  - name: 'in'
    token: KEYW_IN
    keyword: [as, js, ets, ts]
    flags: [binary]

  - name: 'infer'
    token: KEYW_INFER
    keyword_like: [ts]

  - name: 'initModule'
    token: KEYW_INIT_MODULE
    keyword_like: [ets]
    flags: [reserved_type_name]

  - name: 'instanceof'
    token: KEYW_INSTANCEOF
    keyword: [as, js, ets, ts]
    flags: [binary]

  - name: 'int'
    token: KEYW_INT
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Int'
    token: KEYW_BUILTIN_INT
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'interface'
    token: KEYW_INTERFACE
    keyword: [js, as, ets, ts]

  - name: 'is'
    token: KEYW_IS
    keyword_like: [ets, ts]
    flags: [definable_type_name]

  - name: 'isize'
    token: KEYW_ISIZE
    keyword_like: [as]

  - name: 'keyof'
    token: KEYW_KEYOF
    keyword_like: [ts, ets]

  - name: 'let'
    token: KEYW_LET
    keyword: [as, js, ets, ts]

  - name: 'long'
    token: KEYW_LONG
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Long'
    token: KEYW_BUILTIN_LONG
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'meta'
    token: KEYW_META
    keyword_like: [js, ts]

  - name: 'module'
    token: KEYW_MODULE
    keyword_like: [as, js, ts]

  - name: 'namespace'
    token: KEYW_NAMESPACE
    keyword_like: [as, ets, ts]
    flags: [definable_type_name]

  - name: 'native'
    token: KEYW_NATIVE
    keyword: [ets]

  - name: 'never'
    token: KEYW_NEVER
    keyword_like: [ts]
    flags: [reserved_type_name]

  - name: 'new'
    token: KEYW_NEW
    keyword: [as, js, ets, ts]

  - name: "NonNullable"
    token: KEYW_NON_NULLABLE
    keyword_like: [ets]
    flags: [reserved_type_name, definable_type_name]

  - name: 'null'
    token: LITERAL_NULL
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'number'
    token: KEYW_NUMBER
    keyword_like: [ets, ts]
    flags: [definable_type_name, predefined_type]

  - name: 'Number'
    token: KEYW_BUILTIN_NUMBER
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'object'
    token: KEYW_OBJECT
    keyword_like: [ets, ts]
    flags: [reserved_type_name, predefined_type]

  - name: 'Object'
    token: KEYW_BUILTIN_OBJECT
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'of'
    token: KEYW_OF
    keyword_like: [ets, js, ts, as]

  - name: 'final'
    token: KEYW_FINAL
    keyword: [ets]

  - name: 'out'
    token: KEYW_OUT
    keyword_like: [ets]

  - name: 'overload'
    token: KEYW_OVERLOAD
    keyword: [ets]

  - name: 'override'
    token: KEYW_OVERRIDE
    keyword: [ets]
    keyword_like: [ts]

  - name: 'package'
    token: KEYW_PACKAGE
    keyword: [js, ts, as, ets]

  - name: 'private'
    token: KEYW_PRIVATE
    keyword: [js, as, ets, ts]

  - name: 'protected'
    token: KEYW_PROTECTED
    keyword: [js, as, ets, ts]

  - name: 'public'
    token: KEYW_PUBLIC
    keyword: [js, as, ets, ts]

  - name: 'readonly'
    token: KEYW_READONLY
    keyword_like: [as, ts, ets]

  - name: 'return'
    token: KEYW_RETURN
    keyword: [as, js, ets, ts]

  - name: 'require'
    token: KEYW_REQUIRE
    keyword_like: [ts]

  - name: 'set'
    token: KEYW_SET
    keyword_like: [as, js, ts, ets]

  - name: 'short'
    token: KEYW_SHORT
    keyword: [ets]
    flags: [reserved_type_name, predefined_type]

  - name: 'Short'
    token: KEYW_BUILTIN_SHORT
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'static'
    token: KEYW_STATIC
    keyword: [js, as, ets, ts]

  - name: 'string'
    token: KEYW_STRING
    keyword_like: [ets, ts]
    flags: [predefined_type]

  - name: 'String'
    token: KEYW_BUILTIN_STRING
    keyword_like: [ets]
    flags:  [predefined_type]

  - name: 'struct'
    token: KEYW_STRUCT
    keyword_like: [ets]
    flags: [reserved_type_name]

  - name: 'super'
    token: KEYW_SUPER
    keyword: [js, ts, ets]

  - name: 'switch'
    token: KEYW_SWITCH
    keyword: [js, as, ets, ts]

  - name: 'target'
    token: KEYW_TARGET
    keyword_like: [js, ts]

  - name: 'this'
    token: KEYW_THIS
    keyword: [as, js, ets, ts]

  - name: 'throw'
    token: KEYW_THROW
    keyword: [js, ets, ts, as]

  - name: 'true'
    token: LITERAL_TRUE
    keyword: [as, js, ets, ts]
    flags: [reserved_type_name]

  - name: 'try'
    token: KEYW_TRY
    keyword: [as, js, ets, ts]

  - name: 'type'
    token: KEYW_TYPE
    keyword_like: [ets, js, ts]

  - name: 'typeof'
    token: KEYW_TYPEOF
    keyword: [js, ts, ets]
    keyword_like: []
    flags: [unary]

  - name: 'u8'
    token: KEYW_U8
    keyword_like: [as]

  - name: 'u16'
    token: KEYW_U16
    keyword_like: [as]

  - name: 'u32'
    token: KEYW_U32
    keyword_like: [as]

  - name: 'u64'
    token: KEYW_U64
    keyword_like: [as]

  - name: 'undefined'
    token: KEYW_UNDEFINED
    keyword: [ets]
    keyword_like: [js, ts]
    flags: [reserved_type_name, definable_type_name]

  - name: 'unknown'
    token: KEYW_UNKNOWN
    keyword_like: [ts]
    flags: [reserved_type_name]

  - name: 'usize'
    token: KEYW_USIZE
    keyword_like: [as]

  - name: 'v128'
    token: KEYW_V128
    keyword_like: [as]

  - name: 'var'
    token: KEYW_VAR
    keyword: [as, js, ts]
    keyword_like: [ets]
    flags: [reserved_type_name, definable_type_name]

  - name: 'void'
    token: KEYW_VOID
    keyword: [as, ets, js, ts]
    flags: [unary, reserved_type_name, predefined_type]

  - name: 'while'
    token: KEYW_WHILE
    keyword: [as, js, ets, ts]

  - name: 'with'
    token: KEYW_WITH
    keyword: [js, ts]
    keyword_like: [ets]

  - name: 'yield'
    token: KEYW_YIELD
    keyword_like: [ets]
    custom_handler: [js, ts]
    flags: [definable_type_name]