From 37949a2066c5ba4e2a2b445a30c59ff6d4093f93 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 15 Sep 2026 20:29:22 +0000 Subject: [PATCH] Generate the TextMate sample renderings (#7762) The images beside the samples were screenshots taken by hand, so they drifted: they still showed `package Carbon api;`, syntax the language dropped in 2024. `render_sample.py` renders a sample the way the grammar in this repository actually highlights it, using `tmlanguage.py`, a small TextMate tokenizer. VS Code runs grammars under Oniguruma, which we cannot depend on here, but this grammar uses no Oniguruma-only syntax, so `re` runs its regexes unchanged and the two agree on every character of every Carbon file in the repository. The output is SVG, so regenerating needs nothing but Python, and a later grammar change gets a same-path image diff showing what it did to real code. The samples change where a construct left the language (`api`, `Carbon` as the package name, `StringView`, `destructor`), refresh the `keywords.carbon` inventory against `token_kind.def`, and add sections for octal, raw and block literals, character literals, lambdas, and raw identifiers. `interop.carbon` is new, covering inline C++. These are highlighting fixtures rather than programs, so the deliberately invalid lines stay. Assisted-by: Claude Code --------- Co-authored-by: Dana Jansens --- utils/textmate/README.md | 14 + utils/textmate/Samples/choices.jpg | Bin 18375 -> 0 bytes utils/textmate/Samples/choices.svg | 13 + utils/textmate/Samples/comments.carbon | 2 + utils/textmate/Samples/comments.jpg | Bin 31341 -> 0 bytes utils/textmate/Samples/comments.svg | 20 + utils/textmate/Samples/customs.carbon | 2 +- utils/textmate/Samples/customs.jpg | Bin 20539 -> 0 bytes utils/textmate/Samples/customs.svg | 15 + .../Samples/functions_variables.carbon | 13 + .../textmate/Samples/functions_variables.jpg | Bin 47221 -> 0 bytes .../textmate/Samples/functions_variables.svg | 56 +++ utils/textmate/Samples/interop.carbon | 29 ++ utils/textmate/Samples/interop.svg | 33 ++ utils/textmate/Samples/keywords.carbon | 17 +- utils/textmate/Samples/keywords.jpg | Bin 56376 -> 0 bytes utils/textmate/Samples/keywords.svg | 57 +++ utils/textmate/Samples/literals.carbon | 24 +- utils/textmate/Samples/literals.jpg | Bin 46116 -> 0 bytes utils/textmate/Samples/literals.svg | 72 ++++ utils/textmate/Samples/main.carbon | 8 +- utils/textmate/Samples/main.jpg | Bin 57342 -> 0 bytes utils/textmate/Samples/main.svg | 50 +++ utils/textmate/Samples/types.jpg | Bin 50645 -> 0 bytes utils/textmate/Samples/types.svg | 45 ++ utils/textmate/render_sample.py | 187 ++++++++ utils/textmate/tmlanguage.py | 405 ++++++++++++++++++ 27 files changed, 1051 insertions(+), 11 deletions(-) delete mode 100644 utils/textmate/Samples/choices.jpg create mode 100644 utils/textmate/Samples/choices.svg delete mode 100644 utils/textmate/Samples/comments.jpg create mode 100644 utils/textmate/Samples/comments.svg delete mode 100644 utils/textmate/Samples/customs.jpg create mode 100644 utils/textmate/Samples/customs.svg delete mode 100644 utils/textmate/Samples/functions_variables.jpg create mode 100644 utils/textmate/Samples/functions_variables.svg create mode 100644 utils/textmate/Samples/interop.carbon create mode 100644 utils/textmate/Samples/interop.svg delete mode 100644 utils/textmate/Samples/keywords.jpg create mode 100644 utils/textmate/Samples/keywords.svg delete mode 100644 utils/textmate/Samples/literals.jpg create mode 100644 utils/textmate/Samples/literals.svg delete mode 100644 utils/textmate/Samples/main.jpg create mode 100644 utils/textmate/Samples/main.svg delete mode 100644 utils/textmate/Samples/types.jpg create mode 100644 utils/textmate/Samples/types.svg create mode 100755 utils/textmate/render_sample.py create mode 100644 utils/textmate/tmlanguage.py diff --git a/utils/textmate/README.md b/utils/textmate/README.md index af979d7ce855..a06528693526 100644 --- a/utils/textmate/README.md +++ b/utils/textmate/README.md @@ -33,3 +33,17 @@ If you are using Atom, you can convert the bundle to an Atom-compatible one. See For other editors that support TextMate bundles you can consult your editors documentation to see how to use the bundle. + +## Samples + +`Samples/` holds Carbon sources that exercise the grammar, each with an SVG +rendering of how this bundle highlights it. Some deliberately contain invalid +code, to show that highlighting stays sensible while something is being typed. + +The renderings are generated, not screenshotted, so they always reflect the +grammar in this repository. Regenerate them in the same commit as any change to +the grammar, so a reviewer can see what the change does to real code: + +```shell +utils/textmate/render_sample.py utils/textmate/Samples/*.carbon +``` diff --git a/utils/textmate/Samples/choices.jpg b/utils/textmate/Samples/choices.jpg deleted file mode 100644 index 5244a6734e4514fc08f6e9314e6310826dd0e7f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18375 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%0ACU-sD)e(C2KMrnSBFdBR!o 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 + + +1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM +2 // Exceptions. See /LICENSE for license information. +3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +4 +5 choice SomeChoice(T: type) { +6 Val1, +7 Val2(a: i32, b: array(T, 5), t: T), +8 Val3 +9 } + diff --git a/utils/textmate/Samples/comments.carbon b/utils/textmate/Samples/comments.carbon index 2598264bee85..e089e9cc197b 100644 --- a/utils/textmate/Samples/comments.carbon +++ b/utils/textmate/Samples/comments.carbon @@ -7,8 +7,10 @@ // class C; fn F[T: A](a: T) -> i32 { return 86; } //@dump-sem-ir-begin //@dump-sem-ir-end +//@include-in-dumps //@dump-sem-ir- //no whitespace after double slash /* invalid comment pattern. */ /// invalid comment pattern. class C; // Comment after a statement/expression/declaration. +var x: i32 = 1;// Trailing, with no space before the introducer. diff --git a/utils/textmate/Samples/comments.jpg b/utils/textmate/Samples/comments.jpg deleted file mode 100644 index c55e11b61c4ebcdcaae39f325f1fcaf7f6200bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31341 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 diff --git a/utils/textmate/Samples/comments.svg b/utils/textmate/Samples/comments.svg new file mode 100644 index 000000000000..d389aba94246 --- /dev/null +++ b/utils/textmate/Samples/comments.svg @@ -0,0 +1,20 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 // This is a comment. + 6 // Comment with whitespace. + 7 // class C; fn F[T: A](a: T) -> i32 { return 86; } + 8 //@dump-sem-ir-begin + 9 //@dump-sem-ir-end +10 //@include-in-dumps +11 //@dump-sem-ir- +12 //no whitespace after double slash +13 /* invalid comment pattern. */ +14 /// invalid comment pattern. +15 class C; // Comment after a statement/expression/declaration. +16 var x: i32 = 1;// Trailing, with no space before the introducer. + diff --git a/utils/textmate/Samples/customs.carbon b/utils/textmate/Samples/customs.carbon index 546c79c7d868..0b62fb3abe52 100644 --- a/utils/textmate/Samples/customs.carbon +++ b/utils/textmate/Samples/customs.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -package SomePackage api; +package SomePackage; Core SomeCore; import SomePackage; diff --git a/utils/textmate/Samples/customs.jpg b/utils/textmate/Samples/customs.jpg deleted file mode 100644 index 0cebb9a79f2537dcdba68c679681b1ae4eeff7a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20539 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 XO2MPS$Pd|{G`I%6C>em0|9=wzQRpp> diff --git a/utils/textmate/Samples/customs.svg b/utils/textmate/Samples/customs.svg new file mode 100644 index 000000000000..24c7cc87dfd3 --- /dev/null +++ b/utils/textmate/Samples/customs.svg @@ -0,0 +1,15 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 package SomePackage; + 6 Core SomeCore; + 7 + 8 import SomePackage; + 9 +10 CallFunction(a, b, c.d); +11 unidentified; + diff --git a/utils/textmate/Samples/functions_variables.carbon b/utils/textmate/Samples/functions_variables.carbon index 907bc2031988..1054a90b015a 100644 --- a/utils/textmate/Samples/functions_variables.carbon +++ b/utils/textmate/Samples/functions_variables.carbon @@ -37,3 +37,16 @@ fn F(ref a: A, const ref b: B); fn F() -> T; fn F() -> T.U { return val; } fn F() -> i32 => return val; + +// --- lambdas and positional parameters + +var explicit: auto = fn (x: i32) -> i32 { return x + 1; }; +var expression: auto = fn (x: i32) => x + 1; +var positional: auto = fn { Print($0, $1, $42); }; + +// --- raw identifiers + +r#class +r#if +r#i32 +var r#var: i32 = r#class; diff --git a/utils/textmate/Samples/functions_variables.jpg b/utils/textmate/Samples/functions_variables.jpg deleted file mode 100644 index a242857b4817b51ca1fbf680c2bf47c352179bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47221 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 LzegR+Ke7J;gc8z) diff --git a/utils/textmate/Samples/functions_variables.svg b/utils/textmate/Samples/functions_variables.svg new file mode 100644 index 000000000000..4e3aa845622d --- /dev/null +++ b/utils/textmate/Samples/functions_variables.svg @@ -0,0 +1,56 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 fn F; + 6 fn F1(); + 7 fn Func(a: i32, b: A); + 8 fn Generic[T: type, U: I](a: T, b: U) -> U; + 9 fn Lambda(a: i32) -> i32 => return a + 5; +10 fn +11 +12 MultiLine[ +13 A: type, +14 B: C1, +15 C: C2 +16 ](a: A(B, C), +17 b: B, +18 c: i32); +19 fn Invalid#+?Name(); +20 x.(I.F)(); +21 +22 a: A; +23 a: A = (b as A); +24 a: i32; +25 a: array(A, 5); +26 generic a: type; +27 generic a: T = b; +28 a: A in some_list; +29 var a: T; +30 let b: T; +31 binding: T; +32 generic binding: T; +33 var +34 multiline: T; +35 +36 fn F(ref a: A, const ref b: B); +37 fn F() -> T; +38 fn F() -> T.U { return val; } +39 fn F() -> i32 => return val; +40 +41 // --- lambdas and positional parameters +42 +43 var explicit: auto = fn (x: i32) -> i32 { return x + 1; }; +44 var expression: auto = fn (x: i32) => x + 1; +45 var positional: auto = fn { Print($0, $1, $42); }; +46 +47 // --- raw identifiers +48 +49 r#class +50 r#if +51 r#i32 +52 var r#var: i32 = r#class; + diff --git a/utils/textmate/Samples/interop.carbon b/utils/textmate/Samples/interop.carbon new file mode 100644 index 000000000000..58fa046f050f --- /dev/null +++ b/utils/textmate/Samples/interop.carbon @@ -0,0 +1,29 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Inline C++ is scoped `meta.embedded.block.cpp`, so an editor that has a C++ +// grammar highlights them as C++; these renderings come from the Carbon grammar +// alone, so that content shows plain. + +package Sample library "interop"; + +import Cpp library ""; +import Cpp library ""; + +import Cpp inline '''c++ +int FromImport() { return 1; } +'''; + +import Cpp inline "int OneLiner() { return 2; }"; + +inline Cpp ''' +int FromBlock() { return 3; } +'''; + +fn Uses() { + var value: Cpp.int = 1 as Cpp.int; + var widened: Cpp.size_t = value as Cpp.size_t; + var back: i32 = value unsafe as i32; + Cpp.printf("%d\n", value); +} diff --git a/utils/textmate/Samples/interop.svg b/utils/textmate/Samples/interop.svg new file mode 100644 index 000000000000..84c6cec24c33 --- /dev/null +++ b/utils/textmate/Samples/interop.svg @@ -0,0 +1,33 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 // + 5 // Inline C++ is scoped `meta.embedded.block.cpp`, so an editor that has a C++ + 6 // grammar highlights them as C++; these renderings come from the Carbon grammar + 7 // alone, so that content shows plain. + 8 + 9 package Sample library "interop"; +10 +11 import Cpp library "<cstdio>"; +12 import Cpp library "<string_view>"; +13 +14 import Cpp inline '''c++ +15 int FromImport() { return 1; } +16 '''; +17 +18 import Cpp inline "int OneLiner() { return 2; }"; +19 +20 inline Cpp ''' +21 int FromBlock() { return 3; } +22 '''; +23 +24 fn Uses() { +25 var value: Cpp.int = 1 as Cpp.int; +26 var widened: Cpp.size_t = value as Cpp.size_t; +27 var back: i32 = value unsafe as i32; +28 Cpp.printf("%d\n", value); +29 } + diff --git a/utils/textmate/Samples/keywords.carbon b/utils/textmate/Samples/keywords.carbon index b4cf3e071f98..ec8d30452388 100644 --- a/utils/textmate/Samples/keywords.carbon +++ b/utils/textmate/Samples/keywords.carbon @@ -4,8 +4,9 @@ // --- operators ->>= <=> <<= &= == != >= >> <= << -= -> -- %= \ = += ++ /= *= & ^ = > < - % . | + / * -and as impls in like not or partial ref template where +>>= <=> <<= ->? &= ^= := :? == => != >= >> <= <> << <- -= -> -- %= |= += ++ /= +*= ~= & @ ^ : = ! > < - % . | + ? / * ~ \ +and as impls in like not or where // --- special-keywords @@ -14,7 +15,8 @@ default => // --- introducer-keywords -adapt alias choice class constraint fn import interface let library namespace var +adapt alias choice class constraint fn import inline interface let library +match_first namespace observe require var base export impl @@ -22,7 +24,8 @@ package // --- modifier-keywords -abstract const extend extern final private protected virtual +abstract const eval extend extern final generic musteval override partial +private protected ref runtime static template unsafe unused val virtual base class default export import @@ -32,13 +35,17 @@ impl package // --- misc-keywords -auto destructor forall friend observe override require +forall form friend .base // --- self-keywords self Self +// --- package-roots + +Core Cpp + // --- underscore ; diff --git a/utils/textmate/Samples/keywords.jpg b/utils/textmate/Samples/keywords.jpg deleted file mode 100644 index 2678cefd595f170fb5319443ccca8d5714237c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56376 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 + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 // --- operators + 6 + 7 >>= <=> <<= ->? &= ^= := :? == => != >= >> <= <> << <- -= -> -- %= |= += ++ /= + 8 *= ~= & @ ^ : = ! > < - % . | + ? / * ~ \ + 9 and as impls in like not or where +10 +11 // --- special-keywords +12 +13 break case continue else if for match return returned then while +14 default => +15 +16 // --- introducer-keywords +17 +18 adapt alias choice class constraint fn import inline interface let library +19 match_first namespace observe require var +20 base +21 export +22 impl +23 package +24 +25 // --- modifier-keywords +26 +27 abstract const eval extend extern final generic musteval override partial +28 private protected ref runtime static template unsafe unused val virtual +29 base class +30 default +31 export import +32 impl fn +33 impl library +34 impl package +35 +36 // --- misc-keywords +37 +38 forall form friend +39 .base +40 +41 // --- self-keywords +42 +43 self Self +44 +45 // --- package-roots +46 +47 Core Cpp +48 +49 // --- underscore +50 +51 ; +52 _ +53 _some_var + diff --git a/utils/textmate/Samples/literals.carbon b/utils/textmate/Samples/literals.carbon index 117269c0ea6e..382f52b7b63d 100644 --- a/utils/textmate/Samples/literals.carbon +++ b/utils/textmate/Samples/literals.carbon @@ -11,6 +11,24 @@ ''' Multi line string ''' +'''py + Block literal with a file type indicator. +''' + +#"a raw \n literal, where \#n is the escape"# +##"nested "# stays inside, and \##n is the escape"## +#''' + A raw block literal. +'''# + +"unterminated + +// --- characters + +'a' '\n' '\0' '\u{1F600}' +'\x70' +'' +'abcde' // --- true-false @@ -18,7 +36,7 @@ true false // --- type-literals -array bool char str type ; +array auto bool char str type i8 i16 i32 i64 i128 i10 u8 u16 u32 u64 u128 u11 f8 f16 f32 f64 f128 f12 @@ -34,6 +52,10 @@ f8 f16 f32 f64 f128 f12 .123 .1e3 +0o755 +0o_17 +0o8 + 0b1011_0010 0b_010 0b2345 diff --git a/utils/textmate/Samples/literals.jpg b/utils/textmate/Samples/literals.jpg deleted file mode 100644 index d78f94cacab69258118ed1f7bee7e436ad3b56f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46116 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%0A{%gb9Y@*?<+ak=n>bpCfkbob9+`5LZ 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 jsWX&dCo593Xf?bXu + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 // --- string + 6 + 7 'C' + 8 "Hello\nWorld\n" + 9 "\"\'\t\r\n" +10 '''Single line string''' +11 ''' Multi line +12 string +13 ''' +14 '''py +15 Block literal with a file type indicator. +16 ''' +17 +18 #"a raw \n literal, where \#n is the escape"# +19 ##"nested "# stays inside, and \##n is the escape"## +20 #''' +21 A raw block literal. +22 '''# +23 +24 "unterminated +25 +26 // --- characters +27 +28 'a' '\n' '\0' '\u{1F600}' +29 '\x70' +30 '' +31 'abcde' +32 +33 // --- true-false +34 +35 true false +36 +37 // --- type-literals +38 +39 array auto bool char str type +40 i8 i16 i32 i64 i128 i10 +41 u8 u16 u32 u64 u128 u11 +42 f8 f16 f32 f64 f128 f12 +43 +44 // --- numbers +45 +46 12345 6789 00012345 +47 +48 1234.56789 +49 0.875 +50 0.3e5 +51 1e5 +52 .123 +53 .1e3 +54 +55 0o755 +56 0o_17 +57 0o8 +58 +59 0b1011_0010 +60 0b_010 +61 0b2345 +62 0B011 +63 +64 0x2AE5 +65 0x_F109 +66 0xD8_E2.5F_7Bp8 +67 0xabcdef.abcdef +68 0XA85CE + diff --git a/utils/textmate/Samples/main.carbon b/utils/textmate/Samples/main.carbon index 73fa0feca659..808d9aa0e839 100644 --- a/utils/textmate/Samples/main.carbon +++ b/utils/textmate/Samples/main.carbon @@ -4,7 +4,7 @@ // More single line comments -package Carbon api; +package Carbon; interface HasValueParam(T: type, V: T) { fn Go(self) -> T; @@ -25,7 +25,7 @@ class Point { fn Procedure() -> i32 { returned var zoop: i32 = 0; - while (DoSomeJob() { + while (DoSomeJob()) { zoop += 1; } @@ -38,9 +38,9 @@ fn Main() -> i32 { let bin = 0b0000111001010010; let dec = 123456789012345678; - let big: Carbon.Int(1024) = 1234; + let big: Core.Int(1024) = 1234; let aaa: auto = "Carbon"; - let view: StringView = "Carbon"; + let view: str = "Carbon"; return Procedure(); } diff --git a/utils/textmate/Samples/main.jpg b/utils/textmate/Samples/main.jpg deleted file mode 100644 index 196d76bd0044f528e89d979187af9727eca737b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57342 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�e6qL(JA!rMQAllN&Ub z0=^_*I79|Joizs+`iuLXO#a%8ej>4N#c)$i54b;%!7h)PEP^ z{%#21s8hf%#eXV$Ua5WHm%J9c&&sl8vkQ0{PK!lKTU?adKvBT)9Q+FZ-MRz%Y7Up} ztpsr+q(J?svI8Va4zTjM43U69Uv^7Cc+P#;&&isZt z?mXKdBalO>Wx43pNEn}FB4*8KwKIQgkKk~Ud970~n|PE2%JUzYs9Z`C^k$guLT!xP z%bW5zuu|ELVAZ6#gvBw*sSn36Ig)Ap@n+TqvY$EN$?2MQQCs}-jZfzX=y4O=-Z9yc zTE%CVQaWC*QhR^F-D&>n6xclfBi%Z%`x5zw7Zo~UQugwV5Jxq z_sR`w+@5!vMht<%SXMq%Ia7QtS?9l*x_nK=+lEQ*Ca9YnGg%aGQX(5j9aEuRARKhu+5!b1KmzZOcS~WhiEX?NS^5;y%Ft;JSFhh z_rB#js)&%K)&YNsvwbZou(|qnFAT|SuU8PmfrmR<5Tm1*e&_vEDhws?)i47<1To}ftSE32)F)RVS&FXLOowH7H zYM4H;$s8H7AyL>I7<9aQY8ls&#!8EFv1hVepZ*KvL1Xwk3>2)PFbFB2w{#G5y29nU!Of2%uFpiLb^A!f>nlGiK|?x>6*%gs-5oZ z+$4lfF2#M8AT5-X!>qLY$+=(a9II`#we-zPJj0UPg?wm@#XH3~gQbo)UZ)M&W})>^ zbW@5{h!szpALuL(P%vhNti01xX8W`Z$L>+I(o=b*hXHj5oS1!#bz}YroDn#T!Wa8c zSGCade2J>^A8$JK`X5t_qXpmyL#a?yER^V zjs-=9+M?$_3OfrmyqWyTv|r=O&=V$hoh+P}zj=9nFU8N$bOdd*GbSQ=4WiiEWeOsV z2Rb2Xk0F^Q84dR1O{?i-sh5FQ?vpI zLW2w+6ELAcJy1y6h-trqL_Uy2_tQTcO#9E~C;eQ!fAvUkRv(9Xajoq&<#KQ9Ir>Fa z40{QSHCDBNjz_>1QD1#8LSo4@zz+8$_3^4{A!W3y{k8P8E7EOhMIj zn3K>CBQYFS3o@K|SfNf?9Z+5eo7v>q`KQS~DeBQCC+x~o;1(355C4nG^)F=y@jp8s zP95bW{-~m6IN0a91p0ay@8QbrjlP-rN9|YNV|Bo8OaXA(AN3kvu*U^hOlo1{`L|+e zh3VVk#wJ$u^qYX>>3aM4f*hq~z)-)sr1Ka`PvWr6?GhWgTr&c)C>7aUtw0GXCU*bk zw~$QnH){XCYBc+womab^gPX55zyJ2cu5&3&Y4T0ZTD5ky3cAyi@>C?G|7~B08O^oL ztRf<#`F;z%E@~Un7aipGS0j4P^l_1j1kuQFF%#e2Gc2$ z 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 WjPyKcjFInxq)*=)#w=KB zXG=3U4X?^?|oY{x@@n2;;(pkXGAlNxq767_iVzCDEg>Bk3nZio8@F z=^t*go33BvsxjeaN-BK+a{38Ppg^a_iTQh4GJSQkRZ}ir`C|4PmgdE;oGwJ;S6$|D z{DHqH1Qhg5>c-j{1EtE3yW#mamT?_0uY<`RtdVzaHlF*A$7}yLZgmACt5zh-wIRRY<~qva~|& zzTO7ITE(gP^cFi5$^)tvv%S}QETnm4r*gfI#H>DfwI>oDRlC~< zMBH7iy)*ZQ4P93?_BCk3yULt*?wO0K@vQ1S zxi-aJErEcM+LEVB9!<#0&3WmlyTknvJg^V?FM|#TxGHrwDL|vNlX)Yv3dRwEv{xPy z!l!zvn(tL9M7^36dW*VZ0aDx2dmo1I z@+zk))$z$#hADE34PDF{v{e-%V{`#$C-fCX0>mCaA*a@PlP4sn2dsr%th_9UiUTM| z$H&@owLXNQHrnCsIFMhyZ&i==&IPV!HQ}yb#~Ho&G6)}ls2MO3Oh4A z_oVF6w)t2;8nx!ApH5+S_KY!%51%ob6Gd(ZJezesM(1xXsZhNn1Yv!R`bnYppIRdUJ&SN%db1D&ZxP@L9x)#5Nd%43**UMVv?uK z-hABH@(pnQW7~JP2>n?)5oqtvm_jkO^x2)!IZ00`w1c``a&3lcd%m^=!l|O(*p;B` zSUEaLA3q-&B|CJ05I)3`z0F#j0w08!E{4u-E}347b%Pw8L9TCB4L9|F=6rzcuq1Ee zGs?6P)F`1<2v5!Cag{qe?;2a2Y`oxnU#Ux+Oa}8kup?-m=C3=36_siN4M#U4zsqdG zU(#^xR2)z#$KmZLvawR8=)@+lx1kD_g8<+r|VKxJ^In?xmcl3Kly3-68N_13u&>iqild;Prohb%Fgp zF4c&dTg^lL*yt9Ba%K3wu^(m}KxvcxM#vdcZ&|hsSe$O3MfHVUO#$IB7ZQNk-x1yG z%l{r0D*_7gFNbZetrjX-Ap+OK3hRRu6w%hSeJsZHV;FOj1E+7v;ed=1)Hn=kPT5sC zY-4K>QZC#l-15=fnW#1PZC7>X!8MaT*$2vgAY-x5@ExO$O^&;(eK66$Jb^l;6U7)r zgN)Hbgx&8Cn*i3(yZ}Yc2q9n!prqx6lDi}pkx!>yWculQp?#e~w-l&_P{SDI|7cw7 ze`n6F?us<}$wM~(l~{IIjf{sSD=C}y)UPl*#Ck>$w}S4P`iCCuPug!R-C?=5;Q2UK z4Z5MpK4j$3Q;q+kgqHsiIYxi3JZed+xvec>B8n|(FTqYMm7CG*mxqL7$t7;Pb%mlQ wRcf|-YxY|avYY6wj`*%=@%WiP-+d1^=R=$G-K0g>|8Fz}{41YX>aUgm2mNihdH?_b diff --git a/utils/textmate/Samples/main.svg b/utils/textmate/Samples/main.svg new file mode 100644 index 000000000000..4ad28ec5653d --- /dev/null +++ b/utils/textmate/Samples/main.svg @@ -0,0 +1,50 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 // More single line comments + 6 + 7 package Carbon; + 8 + 9 interface HasValueParam(T: type, V: T) { +10 fn Go(self) -> T; +11 } +12 +13 impl () as HasValueParam(i32, 5) { +14 fn Go(self) -> i32 { return 42; } +15 } +16 +17 class Point { +18 fn Origin() -> Self { +19 return {.x = 0, .y = 0}; +20 } +21 +22 var x: i32; +23 var y: i32; +24 } +25 +26 fn Procedure() -> i32 { +27 returned var zoop: i32 = 0; +28 while (DoSomeJob()) { +29 zoop += 1; +30 } +31 +32 return var; +33 } +34 +35 fn Main() -> i32 { +36 let str = "Hello world"; +37 let hex = 0xABCDEF1234567890; +38 let bin = 0b0000111001010010; +39 let dec = 123456789012345678; +40 +41 let big: Core.Int(1024) = 1234; +42 let aaa: auto = "Carbon"; +43 let view: str = "Carbon"; +44 +45 return Procedure(); +46 } + diff --git a/utils/textmate/Samples/types.jpg b/utils/textmate/Samples/types.jpg deleted file mode 100644 index 5c8c8ec62e5fef4fc9a5f18f5a4e522f717505b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50645 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�Ih|l=fzD``LHOY@jd(8g#wr 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

{V> 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 diff --git a/utils/textmate/Samples/types.svg b/utils/textmate/Samples/types.svg new file mode 100644 index 000000000000..970b20b49638 --- /dev/null +++ b/utils/textmate/Samples/types.svg @@ -0,0 +1,45 @@ + + + + 1 // Part of the Carbon Language project, under the Apache License v2.0 with LLVM + 2 // Exceptions. See /LICENSE for license information. + 3 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + 4 + 5 class C1; + 6 class C2(T1: type, T2: C1) {} + 7 class C3 { + 8 extend base: C1; + 9 } +10 class +11 (C4( +12 (T1: type), +13 T2: +14 (A.(B(E, F(G)).C) +15 .D))) ; +16 +17 class C5 { +18 impl as I; +19 extend impl as I; +20 } +21 +22 alias a1 = C1; +23 alias a2 = i32; +24 +25 adapt SomeClass; +26 adapt {.a: SomeClass, .b: i32}; +27 adapt i32; +28 +29 interface I; +30 impl C as (I(A, B, C.(D.E(F, G)).H)) {} +31 impl C as I where .A = (B where .Self = {}) {} +32 impl C as I where .A = {} and .B = C {} +33 impl Self as I; +34 impl as I; +35 +36 constraint Constraint { +37 require T impls I; +38 require Self impls I; +39 require impls I; +40 extern require impls I; +41 } + diff --git a/utils/textmate/render_sample.py b/utils/textmate/render_sample.py new file mode 100755 index 000000000000..dee7fbc3e5e3 --- /dev/null +++ b/utils/textmate/render_sample.py @@ -0,0 +1,187 @@ +#!/usr/bin/env -S uv run --script + +# /// script +# requires-python = ">=3.12" +# /// + +"""Renders Carbon sources as highlighted SVG. + +This regenerates the renderings next to the TextMate samples, so they show what +the grammar in this repository actually produces rather than whatever an editor +looked like when someone last took a screenshot by hand. + +The SVG holds the source as text rather than as outlines, so whatever displays +it lays the text out and draws the glyphs; nothing here rasterizes. Colors are +VS Code's Dark+. A scope the theme does not style resolves outward through the +scope stack, which is what makes a string's quotes take the string color and a +comment's `//` take the comment color. +""" + +__copyright__ = """ +Part of the Carbon Language project, under the Apache License v2.0 with LLVM +Exceptions. See /LICENSE for license information. +SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +""" + +import argparse +import sys +from pathlib import Path +from typing import Optional + +import tmlanguage + +# The grammar is part of the VS Code extension, which must all be contained +# under the extension's root directory. +_GRAMMAR_PATH = ( + Path(__file__).resolve().parents[1] / "vscode" / "carbon.tmLanguage.json" +) + +# VS Code's Dark+, keyed by the selectors the theme itself uses. Matching is by +# longest dotted prefix, as a real theme does, so this stays correct for any +# grammar rather than only the scope names in use today. +_THEME = { + "comment": "#6a9955", + "constant.character.escape": "#d7ba7d", + "constant.language": "#569cd6", + "constant.numeric": "#b5cea8", + "entity.name.function": "#dcdcaa", + "entity.name.namespace": "#4ec9b0", + "entity.name.tag": "#569cd6", + "entity.name.type": "#4ec9b0", + "keyword.control": "#c586c0", + "keyword.operator": "#d4d4d4", + "keyword.other": "#569cd6", + "meta.embedded": "#d4d4d4", + "storage.modifier": "#569cd6", + "storage.type": "#569cd6", + "string": "#ce9178", + "support.class": "#4ec9b0", + "support.function": "#dcdcaa", + "support.type": "#4ec9b0", + "support.type.property-name": "#9cdcfe", + "support.variable": "#9cdcfe", + "variable.language": "#569cd6", + "variable.other": "#9cdcfe", + "variable.other.enummember": "#4fc1ff", + "variable.parameter": "#9cdcfe", +} + +_BACKGROUND = "#1f1f1f" +_FOREGROUND = "#d4d4d4" +_GUTTER = "#6e7681" +# Whatever monospace font the viewer has: nothing can be fetched, because +# GitHub serves SVG under `default-src 'none'` and a web font would be blocked. +# The text simply flows, so the font's own metrics lay each line out. +_FONT = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" +_FONT_SIZE = 14 +# Only used to size the canvas. Monospace advances cluster near 0.6em, so a +# font a little wider than this just runs closer to the right edge. +_CHAR_WIDTH = 8.5 +_LINE_HEIGHT = 19 +# How far above the bottom of its line the baseline sits, leaving room for the +# descenders of `g` and `y` at this line height. +_DESCENT = 5 +_PAD = 12 + + +def _color_for(scopes: list[str]) -> str: + """Resolves a scope stack to a color, innermost scope first. + + Within a scope the longest matching prefix wins, so that a selector such as + `variable.other.enummember` beats `variable.other`. A scope the theme does + not style resolves outward to its enclosing scope, which is what gives a + string's quotes the string color. + """ + for scope in reversed(scopes): + parts = scope.split(".") + for end in range(len(parts), 0, -1): + color = _THEME.get(".".join(parts[:end])) + if color: + return color + return _FOREGROUND + + +def _escape(text: str) -> str: + """Escapes source text for an SVG text node, as one would for HTML.""" + return text.replace("&", "&").replace("<", "<").replace(">", ">") + + +def _runs(colors: list[str]) -> list[tuple[int, int, str]]: + """Merges a per-character color list into `(start, end, color)` runs.""" + runs: list[tuple[int, int, str]] = [] + for index, color in enumerate(colors): + if runs and runs[-1][2] == color: + runs[-1] = (runs[-1][0], index + 1, color) + else: + runs.append((index, index + 1, color)) + return runs + + +def render(grammar: tmlanguage.Grammar, source: str) -> str: + """Renders a Carbon source as a standalone SVG document.""" + lines = tmlanguage.split_lines(source) + colored = [[_FOREGROUND] * len(line) for line in lines] + for token in tmlanguage.tokenize(grammar, source): + color = _color_for(token.scopes) + row = colored[token.line] + # A token runs one past the line, over the newline it was tokenized + # with, and there is no column there to color. + for column in range(token.start, min(token.end, len(row))): + row[column] = color + + # Trailing blank lines would only pad the bottom of the image. + while lines and not lines[-1].strip(): + lines.pop() + colored.pop() + + digits = len(str(len(lines))) if lines else 1 + longest = max((len(line) for line in lines), default=0) + width = round(_PAD * 2 + (digits + 1 + longest) * _CHAR_WIDTH) + height = _PAD * 2 + len(lines) * _LINE_HEIGHT + + out = [ + f'', + f'', + # Indentation has to survive two eras of the spec. SVG 1.1 renderers + # read `xml:space`, and honor it here on the group. Browsers follow + # SVG 2, where whitespace is a CSS property and neither form is + # inherited into text from an ancestor, so each `text` repeats it. + f'', + ] + for linenum, linetext in enumerate(lines): + baseline = _PAD + (linenum + 1) * _LINE_HEIGHT - _DESCENT + spans = [ + f'{str(linenum + 1).rjust(digits)} ' + ] + [ + f'{_escape(linetext[start:end])}' + for start, end, color in _runs(colored[linenum]) + ] + out.append( + f'' + f"{''.join(spans)}" + ) + out.append("") + return "\n".join(out) + "\n" + + +def main(argv: Optional[list[str]] = None) -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("sources", nargs="+", type=Path) + parser.add_argument("--grammar", type=Path, default=_GRAMMAR_PATH) + args = parser.parse_args(argv) + + grammar = tmlanguage.Grammar.load(args.grammar) + for source_path in args.sources: + out_path = source_path.with_suffix(".svg") + out_path.write_text( + render(grammar, source_path.read_text(encoding="utf-8")), + encoding="utf-8", + ) + print(f"wrote {out_path}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/utils/textmate/tmlanguage.py b/utils/textmate/tmlanguage.py new file mode 100644 index 000000000000..3cdcfe5657cc --- /dev/null +++ b/utils/textmate/tmlanguage.py @@ -0,0 +1,405 @@ +#!/usr/bin/env python3 + +"""A minimal TextMate grammar tokenizer. + +TextMate grammars are normally run by Oniguruma, which we cannot depend on +hermetically. Carbon's grammar happens to use no Oniguruma-only regex syntax, +so `re` compiles its regexes unchanged. That is necessary but not sufficient, +since the two engines can still read shared syntax differently, so what +establishes that this reproduces VS Code's output is `conformance_test.py`, +which tokenizes the repository with both and compares. `check_regex_dialect` +catches the half of that a hermetic test can reach: if it fails, the grammar +has left the shared subset and this tokenizer can no longer be trusted. + +Only the grammar features Carbon uses are implemented: `match`, `begin`/`end` +with captures and `contentName`, `include` into the repository, and `\\N` +backreferences from `begin` into `end`. +""" + +__copyright__ = """ +Part of the Carbon Language project, under the Apache License v2.0 with LLVM +Exceptions. See /LICENSE for license information. +SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +""" + +import json +import re +from pathlib import Path +from typing import Any, Iterator, NamedTuple, Optional + +# Regex constructs Oniguruma supports and `re` either rejects or interprets +# differently. A grammar using any of these would invalidate this tokenizer. +_FOREIGN_SYNTAX = { + "possessive quantifier": r"(?:[*+?}])\+", + "atomic group": r"\(\?>", + r"\G anchor": r"\\G", + r"\h horizontal space": r"\\[hH]", + "conditional": r"\(\?\(", + "named backreference": r"\\k<", + "variable-length lookbehind": r"\(\?<[=!][^)]*[*+]", +} + + +# Every key a TextMate grammar can put a regex under. `match`, `begin`, and +# `end` are the three this tokenizer runs; an editor also runs the folding +# markers, so they are checked for dialect even though nothing here reads them. +_REGEX_KEYS = ( + "match", + "begin", + "end", + "foldingStartMarker", + "foldingStopMarker", +) + + +class Token(NamedTuple): + """A scope assignment covering `[start, end)` of line `line`. + + `scopes` runs outermost first, starting with the grammar's own scope name, + so the last entry is the most specific. A theme matches from there + outward, taking the first entry it has a color for. + """ + + line: int + start: int + end: int + scopes: list[str] + + +class Rule(NamedTuple): + """An entry of the region stack: an open `begin`/`end`, or the grammar. + + The grammar's own entry sits at the bottom with an `end_re` of `None`, + since nothing closes it. + """ + + scopes: list[str] + content_scopes: list[str] + end_re: Optional[re.Pattern[str]] + end_captures: dict[str, Any] + patterns: list[dict[str, Any]] + + +class _RuleMatch(NamedTuple): + """A rule that matched, and where it matched. + + `kind` names the grammar key the matching regex came from: `"end"` for + the open region's own `end`, in which case `pattern` is empty, or + `"match"` or `"begin"` for one of the rules in the region's `patterns`. + `match` is always a real match; it is what `kind` describes. + """ + + kind: str + pattern: dict[str, Any] + match: re.Match[str] + + +class Grammar: + """A parsed TextMate grammar, ready to tokenize with.""" + + def __init__(self, raw: dict[str, Any]) -> None: + self.raw = raw + self.scope_name: str = raw.get("scopeName", "") + self._repository: dict[str, Any] = raw.get("repository", {}) + self._compiled: dict[str, re.Pattern[str]] = {} + + @staticmethod + def load(path: Path) -> "Grammar": + with path.open(encoding="utf-8") as f: + return Grammar(json.load(f)) + + def compile(self, regex: str) -> re.Pattern[str]: + compiled = self._compiled.get(regex) + if compiled is None: + compiled = self._compiled[regex] = re.compile(regex) + return compiled + + def resolve( + self, + patterns: Optional[list[dict[str, Any]]], + active: frozenset[str] = frozenset(), + ) -> list[dict[str, Any]]: + """Flattens `include` directives into a list of concrete rules. + + A `name` on the repository entry itself is deliberately dropped: VS + Code inlines an include-only rule's patterns without pushing its scope, + so honoring it here would disagree with the real tokenizer. `active` + breaks a cycle between mutually including entries. + + An include of a different grammar, such as `source.cpp`, contributes + nothing: we tokenize Carbon, and embedded regions are left to whatever + scope their `contentName` assigns. + """ + resolved: list[dict[str, Any]] = [] + for pattern in patterns or []: + target = pattern.get("include") + if target is None: + resolved.append(pattern) + elif target.startswith("#"): + name = target[1:] + if name in active: + continue + entry = self._repository.get(name, {}) + resolved.extend( + self.resolve(entry.get("patterns"), active | {name}) + ) + elif target == "$self": + resolved.extend(self.resolve(self.raw.get("patterns"), active)) + return resolved + + def initial_stack(self) -> list[Rule]: + base = [self.scope_name] + return [ + Rule(base, base, None, {}, self.resolve(self.raw.get("patterns"))) + ] + + def all_regexes(self) -> Iterator[tuple[str, str]]: + """Yields every `(key, regex)` the grammar holds, for validation. + + A grammar keeps regexes only under the keys in `_REGEX_KEYS`, so + finding them all means walking every dictionary in it and picking + those keys out. `key` says which one it was, which is all a message + needs to point at the right place. + """ + + def walk(node: Any) -> Iterator[tuple[str, str]]: + if isinstance(node, dict): + for key in _REGEX_KEYS: + value = node.get(key) + if isinstance(value, str): + yield key, value + for value in node.values(): + yield from walk(value) + elif isinstance(node, list): + for value in node: + yield from walk(value) + + yield from walk(self.raw) + + +def check_regex_dialect(grammar: Grammar) -> list[str]: + """Returns a message per regex `re` cannot stand in for Oniguruma on.""" + problems: list[str] = [] + for key, regex in grammar.all_regexes(): + # A `\N` backreference is substituted before compiling, so do the + # same here with an arbitrary value before validating. + probe = re.sub(r"\\\d", "x", regex) + try: + re.compile(probe) + except re.error as e: + problems.append(f"`{key}` regex does not compile: {regex}: {e}") + continue + for name, foreign in _FOREIGN_SYNTAX.items(): + if re.search(foreign, regex): + problems.append( + f"`{key}` regex uses {name}, which `re` does not share " + f"with Oniguruma: {regex}" + ) + return problems + + +def _substitute_backrefs(regex: str, begin_match: re.Match[str]) -> str: + """Replaces `\\N` in an `end` with the text `begin` captured, as VS Code + does before compiling the `end` regex.""" + + def replace(ref: re.Match[str]) -> str: + return re.escape(begin_match.group(int(ref.group(1))) or "") + + return re.sub(r"\\(\d)", replace, regex) + + +def _append_token( + tokens: list[Token], linenum: int, start: int, end: int, scopes: list[str] +) -> None: + """Appends a token, unless it would be empty. + + Callers append the text between two things without first checking that + there is any, and about a quarter of the time there is none, so the check + lives here rather than at every call. + """ + if end > start: + tokens.append(Token(linenum, start, end, scopes)) + + +def _append_capture_tokens( + tokens: list[Token], + linenum: int, + match: re.Match[str], + captures: dict[str, Any], + scopes: list[str], +) -> None: + """Appends the tokens for one match, splitting it at its capture groups. + + `captures` maps a group number, written as a string, to the scope the + group's text takes on top of `scopes`; group `"0"` is the whole match. The + tokens tile the match with no gaps: text not covered by a listed group is + still appended, under `scopes` alone. + """ + if not captures: + _append_token(tokens, linenum, match.start(), match.end(), scopes) + return + pos = match.start() + for group in range((match.re.groups or 0) + 1): + spec = captures.get(str(group)) + # Skip a group the grammar does not name, one that did not + # participate in the match (`start` is then -1), and one that lies + # behind text already appended, since tokens come out in order. + if spec is None or match.start(group) < pos: + continue + if match.start(group) == match.end(group): + continue + _append_token(tokens, linenum, pos, match.start(group), scopes) + _append_token( + tokens, + linenum, + match.start(group), + match.end(group), + scopes + [spec["name"]], + ) + pos = match.end(group) + _append_token(tokens, linenum, pos, match.end(), scopes) + + +def _push_scope( + scopes: list[str], pattern: dict[str, Any], key: str +) -> list[str]: + """Adds the scope `pattern[key]` names, if it names one.""" + name = pattern.get(key) + return scopes + [name] if name is not None else scopes + + +def _find_earliest( + grammar: Grammar, rule: Rule, text: str, pos: int +) -> Optional[_RuleMatch]: + """Finds which of `rule`'s regexes matches soonest at or after `pos`. + + The open region's own `end` is tried first and ties are broken towards + whatever was tried earlier, which gives TextMate's two ordering rules: a + region that can close here closes here, and otherwise the first rule + listed in the grammar wins. + """ + best: Optional[_RuleMatch] = None + if rule.end_re is not None: + match = rule.end_re.search(text, pos) + if match is not None: + best = _RuleMatch("end", {}, match) + for pattern in rule.patterns: + # The key a regex came from is what the rule does with it, so take + # both from the same lookup. + if (regex := pattern.get("match")) is not None: + kind = "match" + elif (regex := pattern.get("begin")) is not None: + kind = "begin" + else: + continue + match = grammar.compile(regex).search(text, pos) + if match is None: + continue + if best is not None and match.start() >= best.match.start(): + continue + best = _RuleMatch(kind, pattern, match) + return best + + +def tokenize_line( + grammar: Grammar, linenum: int, text: str, stack: list[Rule] +) -> tuple[list[Token], list[Rule]]: + """Tokenizes one line, given the regions open when it starts. + + `text` must carry its trailing newline: VS Code tokenizes a line together + with its terminator, so that newline gets a token of its own, and carrying + it is what keeps the two token streams identical. `stack` is the chain of + `begin`/`end` regions open at the start of the line, outermost first and + never empty: its first entry is the grammar itself. The stack returned is + the one open at the start of the next line, which is how a region spans + lines. + """ + tokens: list[Token] = [] + pos = 0 + # Counts region transitions that consumed nothing, which make no progress. + stalls = 0 + while pos <= len(text): + rule = stack[-1] + found = _find_earliest(grammar, rule, text, pos) + if found is None: + break + # Text before the match belongs to the region containing it. + _append_token( + tokens, linenum, pos, found.match.start(), rule.content_scopes + ) + if found.kind == "end": + _append_capture_tokens( + tokens, linenum, found.match, rule.end_captures, rule.scopes + ) + stack = stack[:-1] + else: + scopes = _push_scope(rule.content_scopes, found.pattern, "name") + captures = "captures" if found.kind == "match" else "beginCaptures" + _append_capture_tokens( + tokens, + linenum, + found.match, + found.pattern.get(captures, {}), + scopes, + ) + if found.kind == "begin": + stack = stack + [ + Rule( + scopes, + _push_scope(scopes, found.pattern, "contentName"), + grammar.compile( + _substitute_backrefs( + found.pattern["end"], found.match + ) + ), + found.pattern.get("endCaptures", {}), + grammar.resolve(found.pattern.get("patterns")), + ) + ] + + if found.match.end() > found.match.start(): + pos = found.match.end() + elif found.kind == "match": + # A `match` that consumed nothing would match there forever, so + # step over a character. + pos = found.match.start() + 1 + else: + # Entering or leaving a region is progress in itself, and the + # character stays available to the region now on top: a lookahead + # `end` such as `(?=[\[\(])` depends on that. + pos = found.match.start() + stalls += 1 + # The bound is arbitrary; it only has to exceed the transitions a + # real line could ask for. Reaching it means a rule opens and + # closes forever, which is a grammar bug: say so rather than + # silently truncating the line. + if stalls > len(text) + 64: + raise RuntimeError( + f"line {linenum} stopped making progress at offset {pos}: " + f"rule {found.pattern!r} neither consumes nor terminates" + ) + # Whatever is left over, including the newline, belongs to the region the + # line ends inside of. + _append_token(tokens, linenum, pos, len(text), stack[-1].content_scopes) + return tokens, stack + + +def split_lines(text: str) -> list[str]: + """Splits a file into lines the way an editor numbers them. + + Terminators are not kept on the lines, and a file ending in a newline + yields an empty final line, which is the blank line an editor shows there. + + Not `str.splitlines`: that also breaks on `\\f`, `\\v`, and a handful of + Unicode separators, which a TextMate grammar sees as ordinary characters + within a line, and it drops that final empty line. + """ + return text.split("\n") + + +def tokenize(grammar: Grammar, text: str) -> Iterator[Token]: + """Tokenizes a whole file.""" + stack = grammar.initial_stack() + for linenum, line in enumerate(split_lines(text)): + tokens, stack = tokenize_line(grammar, linenum, line + "\n", stack) + yield from tokens