From d23b6a2a3686dd67918db9f7e3137129e1c97cff Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 14 Aug 2026 22:43:27 -0400 Subject: [PATCH] messing around. --- .../cozy-and-windy/cozy-and-windy-0.1.0.vsix | Bin 3846 -> 3861 bytes .../themes/cozy-and-windy-color-theme.json | 18 +++++++++--------- .../tape-atom-syntax/atomasm-psx-0.3.0.vsix | Bin 0 -> 10735 bytes .vscode/tape-atom-syntax/classifier.js | 10 ++++++++++ .vscode/tape-atom-syntax/package.json | 16 +++++++++------- .vscode/tape-atom-syntax/source-index.js | 3 +++ .../syntaxes/tape_atom.tmLanguage.json | 4 ++-- .../tape-atom-syntax/test/contract.test.js | 7 ++----- 8 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 .vscode/tape-atom-syntax/atomasm-psx-0.3.0.vsix diff --git a/.vscode/cozy-and-windy/cozy-and-windy-0.1.0.vsix b/.vscode/cozy-and-windy/cozy-and-windy-0.1.0.vsix index 79a338151491a5e42d1287624b0c7434134759ee..37769eabcbaa785eaa22edd8f358692243ddf89d 100644 GIT binary patch delta 1633 zcmV-n2A=tb9+e&pP)h>@6aWAS2moNSu?)ci0${U~&jRBDV6(Hd1FZuBShJI32Sk5e zkDE9YeV+UZ#J*J{nh6OZed|os4{cjjol5gi^}*Pe#2TMDN(LM0bbhVbK7@P-iu_1Dcp4TYvHaxP$Cfs<^3 z;uDL4GSF+@jsUS5C+0O2fF_N^^Mu|{m6+_jiKph%HV5LW^m^4GR85EEw%_t z`UE5N`8?0_<#5I)Mu5o=4J9y$*iGkls)o(FTi|vyXE9e}IOls)oV&i7t1*8x`_M=U z9$C8;2tR`Sf+XIJt>bKUvm~P&7i5%;IaVV*&Bt#ph&9u#6C>c03HMTPwjE82=V}Zm z-8G^V{x`TY*Y`0KLv-twY@iH5l zf8ni4lOL8Chk$Wi3U=9|pr^f>z7kkhQI3G|W~QP}&>v3IvkeY`R+F9Ou0$E>K-t z?9h@V11B474#%k>u%`4dJ8-JYj4}x#N7!t;-lR*Um-?LTcJ`U_eN8MGsU?F(^pX~k)+sY zx`E9K>tK}#3vLc7pmep+b%e^Uoz0$t8pAw&oBXmYC2JH9)Bgpmb&BG3oarzWD1*YB zuEV}FYO#zLM0p-P<} z#u!)CV`++09#Ru-DI-7pT2q;S+o9Uh8(mdQbEJa!Y^{OKN)30gs^$~x=*jk-r#-DE zeURXqblO|(B=<^Lz9tA8bLpCzW(cjw>3ZTjY-w%nyc7QE7OQ_2lT*$=>RprP1zeEx zw^9n4HPS-KF`BQjwZ=lLpGuEXH@pq%81V){9| zy807@HRf#<{nUTz={o3tMp?n}d+Y%N+>!`kFxv3mtTwf@pt5|1?|z@c`{rpB3}~*%Q#~h1w2WB@(C5nn>QGw<^hIiik)#d!6Pg92liMj}= z)kVOIb_0t_J!Zp4F!+dgGd||k;)Qi2xj@@f!f2K1iwL7fEjgh%1#xU&=@AfpyQVH; ze$Ad|{{c`-2MC{mYiZ&I006ok002-+0Rjp?0~7!N2nYaRvy+w$LIPm3liCeG0${U~ f8xDgFShEgYpMh&>;spQzx|6F8RR)(000000=B^s* delta 1622 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 literal 0 HcmV?d00001 diff --git a/.vscode/tape-atom-syntax/classifier.js b/.vscode/tape-atom-syntax/classifier.js index 89f1ec2..244eb0e 100644 --- a/.vscode/tape-atom-syntax/classifier.js +++ b/.vscode/tape-atom-syntax/classifier.js @@ -22,6 +22,7 @@ const TOKEN_TYPES = [ "tapeCop2Register", "tapeDuffleType", "tapeAttribute", + "keyword", ]; const TOKEN_MODIFIERS = ["declaration", "tapeRead", "tapeWrite", "tapeAuto"]; @@ -36,6 +37,14 @@ const ANNOTATIONS = new Set([ "atom_auto_reg", "phase_auto_reg", "atom_dbg_skip", ]); +const DSL_KEYWORDS = new Set([ + "FI_", "I_", "NI_", "Relative_", "Struct_", "Enum_", "Union_", + "TypeR_", "TypeV_", "align_", "internal", "local_persist", "global", + "O_", "S_", "C_", "T_", "tmpl", "glue", "r_", "v_", "tr_", "tv_", + "rgcc", "rlit", "r_use", "r_set", "r_mod", "r_imm", "r_mem", + "enc_op", "enc_rs", "enc_rt", "enc_rd", "enc_imm", "enc_i", "enc_r", +]); + const DELAY_SLOT_KEYWORDS = new Set(["LdSlot_", "BdSlot_"]); const CONTROL_FLOW_PREFIXES = /^(?:branch_|jump_|call_)/; @@ -151,6 +160,7 @@ function classifyDocument(source, filePath, workspaceIndex, shouldCancel = () => if (!type && index.bindTypes.has(token.text)) type = "tapeBindType"; if (!type && index.types.has(token.text)) type = "tapeDuffleType"; + if (!type && DSL_KEYWORDS.has(token.text)) type = "keyword"; if (!type && index.attributes.has(token.text)) type = "tapeAttribute"; if (!type) type = registerType(token.text, index); if (!type && DELAY_SLOT_KEYWORDS.has(token.text)) type = "tapeDelaySlot"; diff --git a/.vscode/tape-atom-syntax/package.json b/.vscode/tape-atom-syntax/package.json index 5f9689c..394d8ed 100644 --- a/.vscode/tape-atom-syntax/package.json +++ b/.vscode/tape-atom-syntax/package.json @@ -1,9 +1,9 @@ { - "name": "tape-atom-syntax", - "displayName": "Tape Atom DSL", - "description": "Source-derived semantic highlighting for the Tape/Atom MIPS macro DSL", + "name": "atomasm-psx", + "displayName": "AtomAsm-PSX", + "description": "Semantic highlighting for the PS1 Tape/Atom MIPS macro DSL", "publisher": "local", - "version": "0.2.0", + "version": "0.3.0", "engines": { "vscode": "^1.80.0" }, "categories": ["Programming Languages"], "activationEvents": ["onLanguage:c", "onLanguage:cpp"], @@ -17,7 +17,7 @@ ], "scripts": { "test": "node --test test/*.test.js", - "package": "npx --yes @vscode/vsce@3.6.1 package --allow-missing-repository --skip-license --out tape-atom-syntax-0.2.0.vsix" + "package": "npx --yes @vscode/vsce@3.6.1 package --allow-missing-repository --skip-license --out atomasm-psx-0.3.0.vsix" }, "contributes": { "semanticTokenTypes": [ @@ -38,7 +38,8 @@ { "id": "tapeGprRegister", "superType": "variable", "description": "MIPS GPR alias" }, { "id": "tapeCop2Register", "superType": "variable", "description": "COP2 data or control register alias" }, { "id": "tapeDuffleType", "superType": "type", "description": "Duffle type or type constructor" }, - { "id": "tapeAttribute", "superType": "keyword", "description": "Duffle linkage or storage attribute" } + { "id": "tapeAttribute", "superType": "keyword", "description": "Duffle linkage or storage attribute" }, + { "id": "keyword", "description": "Standard keyword (DSL built-in macros)" } ], "semanticTokenModifiers": [ { "id": "tapeRead", "description": "Register declared in atom_reads" }, @@ -66,7 +67,8 @@ "tapeGprRegister": ["variable.other.constant.duffle.gpr"], "tapeCop2Register": ["variable.other.constant.duffle.cop2"], "tapeDuffleType": ["storage.type.duffle.type"], - "tapeAttribute": ["storage.modifier.duffle.attr"] + "tapeAttribute": ["storage.modifier.duffle.attr"], + "keyword": ["keyword"] } } ], diff --git a/.vscode/tape-atom-syntax/source-index.js b/.vscode/tape-atom-syntax/source-index.js index a148336..e8581c0 100644 --- a/.vscode/tape-atom-syntax/source-index.js +++ b/.vscode/tape-atom-syntax/source-index.js @@ -11,6 +11,9 @@ const BASE_TYPES = [ const BASE_ATTRIBUTES = [ "FI_", "I_", "NI_", "Relative_", "Struct_", "Enum_", "Union_", "TypeR_", "TypeV_", "align_", "internal", "local_persist", "global", + "O_", "S_", "C_", "T_", "tmpl", "glue", "r_", "v_", "tr_", "tv_", + "rgcc", "rlit", "r_use", "r_set", "r_mod", "r_imm", "r_mem", + "enc_op", "enc_rs", "enc_rt", "enc_rd", "enc_imm", "enc_i", "enc_r", ]; function createIndex() { diff --git a/.vscode/tape-atom-syntax/syntaxes/tape_atom.tmLanguage.json b/.vscode/tape-atom-syntax/syntaxes/tape_atom.tmLanguage.json index 1b6af23..c95c834 100644 --- a/.vscode/tape-atom-syntax/syntaxes/tape_atom.tmLanguage.json +++ b/.vscode/tape-atom-syntax/syntaxes/tape_atom.tmLanguage.json @@ -64,8 +64,8 @@ "name": "storage.type.duffle.type" }, "attributes": { - "match": "\\b(?:FI_|I_|NI_|Relative_|align_|internal|local_persist|global)\\b", - "name": "storage.modifier.duffle.attr" + "match": "\\b(?:FI_|I_|NI_|Relative_|align_|internal|local_persist|global|O_|S_|C_|T_|tmpl|glue|r_|v_|tr_|tv_|rgcc|rlit|r_use|r_set|r_mod|r_imm|r_mem|enc_op|enc_rs|enc_rt|enc_rd|enc_imm|enc_i|enc_r)\\b", + "name": "keyword" } } } diff --git a/.vscode/tape-atom-syntax/test/contract.test.js b/.vscode/tape-atom-syntax/test/contract.test.js index 4ca6ce3..06c2c19 100644 --- a/.vscode/tape-atom-syntax/test/contract.test.js +++ b/.vscode/tape-atom-syntax/test/contract.test.js @@ -31,7 +31,7 @@ test("package semantic legend matches classifier exports", () => { const contributedTypes = packageJson.contributes.semanticTokenTypes.map((entry) => entry.id); const contributedModifiers = packageJson.contributes.semanticTokenModifiers.map((entry) => entry.id); - assert.equal(packageJson.version, "0.2.0"); + assert.equal(packageJson.version, "0.3.0"); assert.deepEqual(contributedTypes, TOKEN_TYPES); assert.deepEqual(contributedModifiers, TOKEN_MODIFIERS.filter((name) => name !== "declaration")); }); @@ -59,7 +59,7 @@ test("every semantic token has a scope mapping; DSL-specific tokens also have gr const grammarRequired = new Set([ "tapeAtomKeyword", "tapeAtomName", "tapeComponentKeyword", "tapeComponentName", "tapeAnnotation", "tapeBindType", "tapePhase", "tapeLabel", - "tapeDelaySlot", "tapeDuffleType", "tapeAttribute", + "tapeDelaySlot", "tapeDuffleType", "keyword", ]); for (const tokenType of TOKEN_TYPES) { @@ -84,8 +84,5 @@ test("TextMate offset labels stay scoped to atom_offset calls", () => { test("workspace enables semantic highlighting", () => { const settings = readJson(path.resolve(ROOT, "..", "settings.json")); - assert.equal(settings["editor.semanticHighlighting.enabled"], true); - const semantic = settings["editor.semanticTokenColorCustomizations"]; - assert.equal(semantic.enabled, true); });