diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage
index 6038af80..923085fe 100644
--- a/TypeScript.YAML-tmLanguage
+++ b/TypeScript.YAML-tmLanguage
@@ -2156,6 +2156,8 @@ repository:
- include: '#type-fn-type-parameters'
- include: '#type-paren-or-function-parameters'
- include: '#type-function-return-type'
+ - name: storage.modifier.ts
+ match: '{{startOfIdentifier}}(readonly){{endOfIdentifier}}'
- include: '#type-name'
type-primitive:
diff --git a/TypeScript.tmLanguage b/TypeScript.tmLanguage
index e328d902..df63b58e 100644
--- a/TypeScript.tmLanguage
+++ b/TypeScript.tmLanguage
@@ -6519,6 +6519,12 @@
include
#type-function-return-type
+
+ name
+ storage.modifier.ts
+ match
+ (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))
+
include
#type-name
diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage
index 48073b1a..207b2f76 100644
--- a/TypeScriptReact.tmLanguage
+++ b/TypeScriptReact.tmLanguage
@@ -6465,6 +6465,12 @@
include
#type-function-return-type
+
+ name
+ storage.modifier.tsx
+ match
+ (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(readonly)(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.))
+
include
#type-name
diff --git a/tests/baselines/readonlyModifier.baseline.txt b/tests/baselines/readonlyModifier.baseline.txt
new file mode 100644
index 00000000..0f69e0b0
--- /dev/null
+++ b/tests/baselines/readonlyModifier.baseline.txt
@@ -0,0 +1,246 @@
+original file
+-----------------------------------
+function f1(mt: [number, number], rt: readonly [number, number]) {
+}
+
+function f2(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) {
+}
+
+type ReadWrite = { -readonly [P in keyof T] : T[P] };
+-----------------------------------
+
+Grammar: TypeScript.tmLanguage
+-----------------------------------
+>function f1(mt: [number, number], rt: readonly [number, number]) {
+ ^^^^^^^^
+ source.ts meta.function.ts storage.type.function.ts
+ ^
+ source.ts meta.function.ts
+ ^^
+ source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^^^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts storage.modifier.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
+ ^
+ source.ts meta.function.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+>}
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+>
+ ^
+ source.ts
+>function f2(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) {
+ ^^^^^^^^
+ source.ts meta.function.ts storage.type.function.ts
+ ^
+ source.ts meta.function.ts
+ ^^
+ source.ts meta.function.ts meta.definition.function.ts entity.name.function.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.begin.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^^^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts storage.modifier.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.separator.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts
+ ^^
+ source.ts meta.function.ts meta.parameters.ts variable.parameter.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^^^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts storage.modifier.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts punctuation.separator.comma.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts
+ ^^^^^^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts support.type.primitive.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.function.ts meta.parameters.ts punctuation.definition.parameters.end.ts
+ ^
+ source.ts meta.function.ts
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+>}
+ ^
+ source.ts meta.function.ts meta.block.ts punctuation.definition.block.ts
+>
+ ^
+ source.ts
+>type ReadWrite = { -readonly [P in keyof T] : T[P] };
+ ^^^^
+ source.ts meta.type.declaration.ts storage.type.type.ts
+ ^
+ source.ts meta.type.declaration.ts
+ ^^^^^^^^^
+ source.ts meta.type.declaration.ts entity.name.type.alias.ts
+ ^
+ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
+ ^
+ source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
+ ^
+ source.ts meta.type.declaration.ts
+ ^
+ source.ts meta.type.declaration.ts keyword.operator.assignment.ts
+ ^
+ source.ts meta.type.declaration.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.type.modifier.ts
+ ^^^^^^^^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts storage.modifier.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
+ ^^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.in.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
+ ^^^^^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.keyof.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
+ ^
+ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
\ No newline at end of file
diff --git a/tests/cases/readonlyModifier.ts b/tests/cases/readonlyModifier.ts
new file mode 100644
index 00000000..7e0d327c
--- /dev/null
+++ b/tests/cases/readonlyModifier.ts
@@ -0,0 +1,7 @@
+function f1(mt: [number, number], rt: readonly [number, number]) {
+}
+
+function f2(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) {
+}
+
+type ReadWrite = { -readonly [P in keyof T] : T[P] };
\ No newline at end of file