From 7f6d42ce4085a218873a4ab049d9d022c031ece0 Mon Sep 17 00:00:00 2001 From: blurfx Date: Sun, 26 Nov 2023 14:28:54 +0900 Subject: [PATCH] feat: improve c/c++ struct field tokenizing --- package.json | 3 ++- packages/core/package.json | 1 + packages/core/src/rules/cpp.ts | 5 +++++ packages/core/tests/tokenizer/c-cpp.test.ts | 17 +++++++++++++++++ packages/highlighter/package.json | 1 + 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 984ca63..5948de0 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,9 @@ "main": "index.js", "scripts": { "test": "pnpm recursive run test:ci", + "dev": "pnpm run -r --parallel dev", "pre-commit": "pnpm run --filter \"@calor/*\" pre-commit", - "build": "pnpm recursive run build", + "build": "pnpm run -r build", "lint": "pnpm build && pnpm run --filter \"@calor/*\" lint", "ci:version": "changeset version", "ci:publish": "pnpm build && changeset publish", diff --git a/packages/core/package.json b/packages/core/package.json index 39df492..fb5d8e9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -12,6 +12,7 @@ }, "scripts": { "build": "tsup", + "dev": "tsup --watch", "test": "vitest", "test:ci": "vitest run", "pre-commit": "lint-staged", diff --git a/packages/core/src/rules/cpp.ts b/packages/core/src/rules/cpp.ts index 451a7bc..61b80ee 100644 --- a/packages/core/src/rules/cpp.ts +++ b/packages/core/src/rules/cpp.ts @@ -14,6 +14,11 @@ const cppRules: ParseRule[] = [ kind: 'keyword', pattern: /(#\s*(?:define|if|elif|else|endif|import|error|line))\b/g, }, + { + kind: 'class', + pattern: /\b(struct)(\s+)([a-zA-Z$_][\w$_]*)\b/g, + matchHints: ['keyword', 'plain', 'class'], + }, { kind: 'keyword', pattern: diff --git a/packages/core/tests/tokenizer/c-cpp.test.ts b/packages/core/tests/tokenizer/c-cpp.test.ts index e5c6679..7248659 100644 --- a/packages/core/tests/tokenizer/c-cpp.test.ts +++ b/packages/core/tests/tokenizer/c-cpp.test.ts @@ -129,4 +129,21 @@ describe('c/cpp tokenizer', () => { expect(includeTokens.length).toBe(1); expect(includeTokens[0].value).toBe('#include'); }); + it('struct', () => { + const tokens = tokenize( + ` + struct MyStruct { + int num; + struct foo *bar; + }; + `, + cppRules, + ); + const structNameTokens = tokens.filter((token) => token.kind === 'class'); + expect(structNameTokens.length).toBe(2); + expect(structNameTokens.some((token) => token.value === 'MyStruct')).toBe( + true, + ); + expect(structNameTokens.some((token) => token.value === 'foo')).toBe(true); + }); }); diff --git a/packages/highlighter/package.json b/packages/highlighter/package.json index 284a963..5d3e0d9 100644 --- a/packages/highlighter/package.json +++ b/packages/highlighter/package.json @@ -13,6 +13,7 @@ }, "scripts": { "build": "tsup", + "dev": "tsup --watch", "pre-commit": "lint-staged", "typecheck": "tsc --noEmit --project .", "dry:eslint": "eslint --ext .ts,.tsx ./src",