diff --git a/TypeScriptReact.YAML-tmLanguage b/TypeScriptReact.YAML-tmLanguage index a8ec19cc..024ecd6d 100644 --- a/TypeScriptReact.YAML-tmLanguage +++ b/TypeScriptReact.YAML-tmLanguage @@ -34,25 +34,29 @@ repository: begin: |- (?x) (?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s* - (?=(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?)) - end: (?!\s*(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?)) + (?=(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?)) + end: (?!\s*(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?)) patterns: - include: '#jsx-tag-without-attributes' jsx-tag-without-attributes: name: meta.tag.without-attributes.tsx - begin: (<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?) - end: () + begin: (<)\s*(?:([_$a-zA-Z][-$\w.]*)(?) + end: () beginCaptures: '1': {name: punctuation.definition.tag.begin.tsx} - '2': {name: entity.name.tag.tsx} - '3': {name: support.class.component.tsx} - '4': {name: punctuation.definition.tag.end.tsx} + '2': {name: entity.name.tag.namespace.tsx} + '3': {name: punctuation.separator.namespace.tsx} + '4': {name: entity.name.tag.tsx} + '5': {name: support.class.component.tsx} + '6': {name: punctuation.definition.tag.end.tsx} endCaptures: '1': {name: punctuation.definition.tag.begin.tsx} - '2': {name: entity.name.tag.tsx} - '3': {name: support.class.component.tsx} - '4': {name: punctuation.definition.tag.end.tsx} + '2': {name: entity.name.tag.namespace.tsx} + '3': {name: punctuation.separator.namespace.tsx} + '4': {name: entity.name.tag.tsx} + '5': {name: support.class.component.tsx} + '6': {name: punctuation.definition.tag.end.tsx} contentName: meta.jsx.children.tsx patterns: - include: '#jsx-children' @@ -64,16 +68,19 @@ repository: (?<=[({\[,?=>:*]|&&|\|\||\?|{{lookBehindReturn}}|{{lookBehindDefault}}|^)\s* (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow (?=(<)\s* + ([_$a-zA-Z][-$\w.]*(?)) - end: (/>)|(?:()) + end: (/>)|(?:()) endCaptures: '0': { name: meta.tag.tsx } '1': { name: punctuation.definition.tag.end.tsx } '2': { name: punctuation.definition.tag.begin.tsx } - '3': { name: entity.name.tag.tsx } - '4': { name: support.class.component.tsx } - '5': { name: punctuation.definition.tag.end.tsx } + '3': { name: entity.name.tag.namespace.tsx } + '4': { name: punctuation.separator.namespace.tsx } + '5': { name: entity.name.tag.tsx } + '6': { name: support.class.component.tsx } + '7': { name: punctuation.definition.tag.end.tsx } patterns: - include: '#jsx-tag' @@ -82,16 +89,19 @@ repository: begin: |- (?x) (?=(<)\s* + ([_$a-zA-Z][-$\w.]*(?)) - end: (/>)|(?:()) + end: (/>)|(?:()) endCaptures: - '0': { name: meta.tag.tsx } - '1': { name: punctuation.definition.tag.end.tsx } - '2': { name: punctuation.definition.tag.begin.tsx } - '3': { name: entity.name.tag.tsx } - '4': { name: support.class.component.tsx } - '5': { name: punctuation.definition.tag.end.tsx } + '0': { name: meta.tag.tsx } + '1': { name: punctuation.definition.tag.end.tsx } + '2': { name: punctuation.definition.tag.begin.tsx } + '3': { name: entity.name.tag.namespace.tsx } + '4': { name: punctuation.separator.namespace.tsx } + '5': { name: entity.name.tag.tsx } + '6': { name: support.class.component.tsx } + '7': { name: punctuation.definition.tag.end.tsx } patterns: - include: '#jsx-tag' @@ -100,19 +110,23 @@ repository: begin: |- (?x) (?=(<)\s* + (?:([_$a-zA-Z][-$\w.]*)(?)) - end: (?=(/>)|(?:())) + end: (?=(/>)|(?:())) patterns: - begin: |- (?x) (<)\s* + (?:([_$a-zA-Z][-$\w.]*)(?) beginCaptures: '1': { name: punctuation.definition.tag.begin.tsx } - '2': { name: entity.name.tag.tsx } - '3': { name: support.class.component.tsx } + '2': { name: entity.name.tag.namespace.tsx } + '3': { name: punctuation.separator.namespace.tsx } + '4': { name: entity.name.tag.tsx } + '5': { name: support.class.component.tsx } end: (?=[/]?>) contentName: meta.tag.attributes.tsx patterns: @@ -170,10 +184,13 @@ repository: match: |- (?x) \s* + (?:([_$a-zA-Z][-$\w.]*)(:))? ([_$a-zA-Z][-$\w]*) (?=\s|=|/?>|/\*|//) captures: - '1': {name: entity.other.attribute-name.tsx} + '1': {name: entity.other.attribute-name.namespace.tsx} + '2': {name: punctuation.separator.namespace.tsx} + '3': {name: entity.other.attribute-name.tsx} jsx-tag-attribute-assignment: name: keyword.operator.assignment.tsx diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage index 6339e476..2d6ca777 100644 --- a/TypeScriptReact.tmLanguage +++ b/TypeScriptReact.tmLanguage @@ -6897,9 +6897,9 @@ begin (?x) (?<=[({\[,?=>:*]|&&|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s* - (?=(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)) + (?=(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)) end - (?!\s*(<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)) + (?!\s*(<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>)) patterns @@ -6913,9 +6913,9 @@ name meta.tag.without-attributes.tsx begin - (<)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>) + (<)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>) end - (</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>) + (</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))?\s*(>) beginCaptures 1 @@ -6926,14 +6926,24 @@ 2 name - entity.name.tag.tsx + entity.name.tag.namespace.tsx 3 name - support.class.component.tsx + punctuation.separator.namespace.tsx 4 + + name + entity.name.tag.tsx + + 5 + + name + support.class.component.tsx + + 6 name punctuation.definition.tag.end.tsx @@ -6949,14 +6959,24 @@ 2 name - entity.name.tag.tsx + entity.name.tag.namespace.tsx 3 name - support.class.component.tsx + punctuation.separator.namespace.tsx 4 + + name + entity.name.tag.tsx + + 5 + + name + support.class.component.tsx + + 6 name punctuation.definition.tag.end.tsx @@ -6979,10 +6999,11 @@ (?<=[({\[,?=>:*]|&&|\|\||\?|^return|[^\._$[:alnum:]]return|^default|[^\._$[:alnum:]]default|^)\s* (?!<\s*[_$[:alpha:]][_$[:alnum:]]*((\s+extends\s+[^=>])|,)) # look ahead is not type parameter of arrow (?=(<)\s* + ([_$a-zA-Z][-$\w.]*(?<!\.|-):)? ([_$a-zA-Z][-$\w.]*(?<!\.|-)) (?=\s+(?!\?)|/?>)) end - (/>)|(?:(</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)) + (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)) endCaptures 0 @@ -7003,14 +7024,24 @@ 3 name - entity.name.tag.tsx + entity.name.tag.namespace.tsx 4 name - support.class.component.tsx + punctuation.separator.namespace.tsx 5 + + name + entity.name.tag.tsx + + 6 + + name + support.class.component.tsx + + 7 name punctuation.definition.tag.end.tsx @@ -7029,10 +7060,11 @@ begin (?x) (?=(<)\s* + ([_$a-zA-Z][-$\w.]*(?<!\.|-):)? ([_$a-zA-Z][-$\w.]*(?<!\.|-)) (?=\s+(?!\?)|/?>)) end - (/>)|(?:(</)\s*((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)) + (/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-))\s*(>)) endCaptures 0 @@ -7053,14 +7085,24 @@ 3 name - entity.name.tag.tsx + entity.name.tag.namespace.tsx 4 name - support.class.component.tsx + punctuation.separator.namespace.tsx 5 + + name + entity.name.tag.tsx + + 6 + + name + support.class.component.tsx + + 7 name punctuation.definition.tag.end.tsx @@ -7081,16 +7123,18 @@ begin (?x) (?=(<)\s* + (?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))? ([_$a-zA-Z][-$\w.]*(?<!\.|-)) (?=\s+(?!\?)|/?>)) end - (?=(/>)|(?:(</)\s*([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>))) + (?=(/>)|(?:(</)\s*(?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))?([_$a-zA-Z][-$\w.]*(?<!\.|-))\s*(>))) patterns begin (?x) (<)\s* + (?:([_$a-zA-Z][-$\w.]*)(?<!\.|-)(:))? ((?:[a-z][a-z0-9]*|([_$a-zA-Z][-$\w.]*))(?<!\.|-)) (?=\s+(?!\?)|/?>) beginCaptures @@ -7103,9 +7147,19 @@ 2 name - entity.name.tag.tsx + entity.name.tag.namespace.tsx 3 + + name + punctuation.separator.namespace.tsx + + 4 + + name + entity.name.tag.tsx + + 5 name support.class.component.tsx @@ -7272,11 +7326,22 @@ match (?x) \s* + (?:([_$a-zA-Z][-$\w.]*)(:))? ([_$a-zA-Z][-$\w]*) (?=\s|=|/?>|/\*|//) captures 1 + + name + entity.other.attribute-name.namespace.tsx + + 2 + + name + punctuation.separator.namespace.tsx + + 3 name entity.other.attribute-name.tsx diff --git a/tests/baselines/pr557_namespacedJsx.baseline.txt b/tests/baselines/pr557_namespacedJsx.baseline.txt new file mode 100644 index 00000000..7d6ca57d --- /dev/null +++ b/tests/baselines/pr557_namespacedJsx.baseline.txt @@ -0,0 +1,256 @@ +original file +----------------------------------- +// @onlyOwnGrammar - As this has jsx +const valid1 = ; + +const valid2 = foo; + +const valid3 = ; + +const invalid1 = ; + +const invalid2 = foo; +----------------------------------- + +Grammar: TypeScriptReact.tmLanguage +----------------------------------- +>// @onlyOwnGrammar - As this has jsx + ^^ + source.tsx comment.line.double-slash.tsx punctuation.definition.comment.tsx + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + source.tsx comment.line.double-slash.tsx +>const valid1 = ; + ^^^^^ + source.tsx meta.var.expr.tsx storage.type.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^^^^^^^^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx punctuation.definition.string.begin.tsx + ^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx punctuation.definition.string.end.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx + ^ + source.tsx punctuation.terminator.statement.tsx +> + ^ + source.tsx +>const valid2 = foo; + ^^^^^ + source.tsx meta.var.expr.tsx storage.type.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.namespace.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.separator.namespace.tsx + ^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.namespace.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx punctuation.separator.namespace.tsx + ^^^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx + ^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.jsx.children.tsx + ^^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.namespace.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.separator.namespace.tsx + ^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx + ^ + source.tsx punctuation.terminator.statement.tsx +> + ^ + source.tsx +>const valid3 = ; + ^^^^^ + source.tsx meta.var.expr.tsx storage.type.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.begin.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.namespace.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.separator.namespace.tsx + ^^^^^^^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx entity.name.tag.tsx support.class.component.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.namespace.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx punctuation.separator.namespace.tsx + ^^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx entity.other.attribute-name.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx punctuation.definition.string.begin.tsx + ^^^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx string.quoted.double.tsx punctuation.definition.string.end.tsx + ^ + source.tsx meta.var.expr.tsx meta.tag.tsx meta.tag.attributes.tsx + ^^ + source.tsx meta.var.expr.tsx meta.tag.tsx punctuation.definition.tag.end.tsx + ^ + source.tsx punctuation.terminator.statement.tsx +> + ^ + source.tsx +>const invalid1 = ; + ^^^^^ + source.tsx meta.var.expr.tsx storage.type.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^^^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.arithmetic.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^ + source.tsx punctuation.terminator.statement.tsx +> + ^ + source.tsx +>const invalid2 = foo; + ^^^^^ + source.tsx meta.var.expr.tsx storage.type.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^^^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx meta.definition.variable.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx meta.var-single-variable.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.assignment.tsx + ^ + source.tsx meta.var.expr.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.arithmetic.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^ + source.tsx meta.var.expr.tsx variable.other.object.tsx + ^ + source.tsx meta.var.expr.tsx punctuation.accessor.tsx + ^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.property.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.arithmetic.tsx + ^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.arithmetic.tsx + ^^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.readwrite.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.arithmetic.tsx + ^ + source.tsx meta.var.expr.tsx + ^^^^^ + source.tsx meta.var.expr.tsx variable.other.object.tsx + ^ + source.tsx meta.var.expr.tsx punctuation.accessor.tsx + ^^^^^^^^^ + source.tsx meta.var.expr.tsx variable.other.property.tsx + ^ + source.tsx meta.var.expr.tsx keyword.operator.relational.tsx + ^ + source.tsx punctuation.terminator.statement.tsx \ No newline at end of file diff --git a/tests/cases/pr557_namespacedJsx.tsx b/tests/cases/pr557_namespacedJsx.tsx new file mode 100644 index 00000000..69d1dacd --- /dev/null +++ b/tests/cases/pr557_namespacedJsx.tsx @@ -0,0 +1,10 @@ +// @onlyOwnGrammar - As this has jsx +const valid1 = ; + +const valid2 = foo; + +const valid3 = ; + +const invalid1 = ; + +const invalid2 = foo; \ No newline at end of file