Skip to content

Commit

Permalink
Simple tree sitter based syntax highlighting for typescript (microsof…
Browse files Browse the repository at this point in the history
…t#225252)

* Simple tree sitter based syntax highlighting for typescript

Part of microsoft#210475

* Implement onceIf using filter

* Mix monaco

* Fix tests

* Switch back to classic

* PR feedback

* Fix bug causing test failure

* Update tree-sitter-wasm

* Fix monaco editor tree shaking

* Fix running monaco checks on Windows

* Use dummy tree sitter service in standalone

* PR feedback
  • Loading branch information
alexr00 authored Aug 19, 2024
1 parent af83049 commit 977f832
Show file tree
Hide file tree
Showing 28 changed files with 1,029 additions and 144 deletions.
1 change: 1 addition & 0 deletions build/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ module.exports.indentationFilter = [
'!src/vs/base/common/semver/semver.js',
'!src/vs/base/node/terminateProcess.sh',
'!src/vs/base/node/cpuUsage.sh',
'!src/vs/editor/common/languages/highlights/*.scm',
'!test/unit/assert.js',
'!test/unit/assert-esm.js',
'!resources/linux/snap/electron-launch',
Expand Down
7 changes: 5 additions & 2 deletions build/gulpfile.editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => {
shakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers
importIgnorePattern: /(^vs\/css!)/,
destRoot: path.join(root, 'out-editor-src'),
redirects: []
redirects: {
'@vscode/tree-sitter-wasm': '../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-web',
}
});
});

Expand Down Expand Up @@ -133,7 +135,8 @@ const compileEditorESMTask = task.define('compile-editor-esm', () => {
let result;
if (process.platform === 'win32') {
result = cp.spawnSync(`..\\node_modules\\.bin\\tsc.cmd`, {
cwd: path.join(__dirname, '../out-editor-esm')
cwd: path.join(__dirname, '../out-editor-esm'),
shell: true
});
} else {
result = cp.spawnSync(`node`, [`../node_modules/.bin/tsc`], {
Expand Down
16 changes: 7 additions & 9 deletions build/lib/treeshaking.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 10 additions & 8 deletions build/lib/treeshaking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,25 +155,27 @@ function discoverAndReadFiles(ts: typeof import('typescript'), options: ITreeSha

while (queue.length > 0) {
const moduleId = queue.shift()!;
const dts_filename = path.join(options.sourcesRoot, moduleId + '.d.ts');
let redirectedModuleId: string = moduleId;
if (options.redirects[moduleId]) {
redirectedModuleId = options.redirects[moduleId];
}

const dts_filename = path.join(options.sourcesRoot, redirectedModuleId + '.d.ts');
if (fs.existsSync(dts_filename)) {
const dts_filecontents = fs.readFileSync(dts_filename).toString();
FILES[`${moduleId}.d.ts`] = dts_filecontents;
continue;
}

const js_filename = path.join(options.sourcesRoot, moduleId + '.js');

const js_filename = path.join(options.sourcesRoot, redirectedModuleId + '.js');
if (fs.existsSync(js_filename)) {
// This is an import for a .js file, so ignore it...
continue;
}

let ts_filename: string;
if (options.redirects[moduleId]) {
ts_filename = path.join(options.sourcesRoot, options.redirects[moduleId] + '.ts');
} else {
ts_filename = path.join(options.sourcesRoot, moduleId + '.ts');
}
const ts_filename = path.join(options.sourcesRoot, redirectedModuleId + '.ts');

const ts_filecontents = fs.readFileSync(ts_filename).toString();
const info = ts.preProcessFile(ts_filecontents);
for (let i = info.importedFiles.length - 1; i >= 0; i--) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
"@vscode/spdlog": "^0.15.0",
"@vscode/sqlite3": "5.1.6-vscode",
"@vscode/sudo-prompt": "9.3.1",
"@vscode/tree-sitter-wasm": "^0.0.1",
"@vscode/tree-sitter-wasm": "^0.0.2",
"@vscode/vscode-languagedetection": "1.0.21",
"@vscode/windows-mutex": "^0.5.0",
"@vscode/windows-process-tree": "^0.6.0",
Expand Down
2 changes: 1 addition & 1 deletion remote/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"@vscode/proxy-agent": "^0.22.0",
"@vscode/ripgrep": "^1.15.9",
"@vscode/spdlog": "^0.15.0",
"@vscode/tree-sitter-wasm": "^0.0.1",
"@vscode/tree-sitter-wasm": "^0.0.2",
"@vscode/vscode-languagedetection": "1.0.21",
"@vscode/windows-process-tree": "^0.6.0",
"@vscode/windows-registry": "^1.1.0",
Expand Down
2 changes: 1 addition & 1 deletion remote/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"@microsoft/1ds-core-js": "^3.2.13",
"@microsoft/1ds-post-js": "^3.2.13",
"@vscode/iconv-lite-umd": "0.7.0",
"@vscode/tree-sitter-wasm": "^0.0.1",
"@vscode/tree-sitter-wasm": "^0.0.2",
"@vscode/vscode-languagedetection": "1.0.21",
"@xterm/addon-clipboard": "0.2.0-beta.35",
"@xterm/addon-image": "0.9.0-beta.52",
Expand Down
8 changes: 4 additions & 4 deletions remote/web/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@
resolved "https://registry.yarnpkg.com/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz#d2f1e0664ee6036408f9743fee264ea0699b0e48"
integrity sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==

"@vscode/tree-sitter-wasm@^0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.1.tgz#ffb2e295a416698f4c77cbffeca3b28567d6754b"
integrity sha512-m0GKnQ3BxWnVd+20KLGwr1+Qvt/RiiaJmKAqHNU35pNydDtduUzyBm7ETz/T0vOVKoeIAaiYsJOA1aKWs7Y1tA==
"@vscode/tree-sitter-wasm@^0.0.2":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.2.tgz#da21541d343be69bb263e9380d165e3b164ec1f0"
integrity sha512-N57MR/kt4jR0H/TXeDsVYeJmvvUiK7avow0fjy+/EeKcyNBJcM2BFhj4XOAaaMbhGsOcIeSvJFouRWctXI7sKw==

"@vscode/[email protected]":
version "1.0.21"
Expand Down
8 changes: 4 additions & 4 deletions remote/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,10 @@
mkdirp "^1.0.4"
node-addon-api "7.1.0"

"@vscode/tree-sitter-wasm@^0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.1.tgz#ffb2e295a416698f4c77cbffeca3b28567d6754b"
integrity sha512-m0GKnQ3BxWnVd+20KLGwr1+Qvt/RiiaJmKAqHNU35pNydDtduUzyBm7ETz/T0vOVKoeIAaiYsJOA1aKWs7Y1tA==
"@vscode/tree-sitter-wasm@^0.0.2":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.0.2.tgz#da21541d343be69bb263e9380d165e3b164ec1f0"
integrity sha512-N57MR/kt4jR0H/TXeDsVYeJmvvUiK7avow0fjy+/EeKcyNBJcM2BFhj4XOAaaMbhGsOcIeSvJFouRWctXI7sKw==

"@vscode/[email protected]":
version "1.0.21"
Expand Down
2 changes: 1 addition & 1 deletion src/tsconfig.monaco.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
],
"paths": {},
"module": "amd",
"moduleResolution": "classic",
"moduleResolution": "node",
"removeComments": false,
"preserveConstEnums": true,
"target": "ES2022",
Expand Down
9 changes: 9 additions & 0 deletions src/vs/base/common/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,15 @@ export namespace Event {
};
}

/**
* Given an event, returns another event which only fires once, and only when the condition is met.
*
* @param event The event source for the new event.
*/
export function onceIf<T>(event: Event<T>, condition: (e: T) => boolean): Event<T> {
return Event.once(Event.filter(event, condition));
}

/**
* Maps an event of one type into an event of another type using a mapping function, similar to how
* `Array.prototype.map` works.
Expand Down
Loading

0 comments on commit 977f832

Please sign in to comment.