Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8b456a8
feat: add LSP support for desktop (TypeScript/JavaScript via vtsls)
abose Jun 18, 2026
ffd9e5f
chore: add vtsls and typescript third-party licenses
abose Jun 18, 2026
f097e92
fix: register TypeScriptSupport extension for build concatenation
abose Jun 18, 2026
6f48130
test: add TabstopManager.parseSnippet unit tests
abose Jun 18, 2026
69b6401
chore: don't copy vtsls/typescript licenses in CI build
abose Jun 18, 2026
5f6c17e
test: add TabstopManager editor-session tests
abose Jun 18, 2026
25c203e
refactor: remove legacy NodeDomain language-tools transport
abose Jun 18, 2026
602449d
refactor: move language-tools provider styles into core brackets.less
abose Jun 18, 2026
12e174a
docs: note cacheManifest.json is a generated build artifact
abose Jun 18, 2026
e437c5b
build: raise dist/brackets.js prod size limit to 11 MB
abose Jun 18, 2026
1c4ce4d
test: exclude TypeScriptSupport LSP extension from test windows
abose Jun 18, 2026
508771b
fix: run LSP in test windows and fix the provider issues it surfaced
abose Jun 18, 2026
e0ca832
chore: sync src-node package-lock version to 5.2.0-0
abose Jun 18, 2026
86e4898
feat: localize LSP server messages and drop the "(LSP)" tag from Prob…
abose Jun 18, 2026
7bf4181
fix: don't re-run inspection when LSP re-publishes unchanged diagnostics
abose Jun 18, 2026
cf21727
feat: suppress TypeScript "implicit any" suggestions in plain JavaScript
abose Jun 18, 2026
e8373c2
feat: show informational diagnostic count in the Problems panel title
abose Jun 18, 2026
28f37a8
test: add empty unittests.js for TypeScriptSupport extension
abose Jun 18, 2026
ce840d8
test: add LSP integration tests for TypeScriptSupport (JS + TS)
abose Jun 18, 2026
9cb53b7
fix: sync the restored file and enable Find Usages when the LSP start…
abose Jun 18, 2026
be85df2
feat: quick-action buttons in the LSP hover popup (Go to Definition /…
abose Jun 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
- No trailing whitespace.
- Use `const` and `let` instead of `var`.

## Build artifacts — do not hand-edit
- **`src/cacheManifest.json`** is a generated build artifact (gitignored, produced by `gulpfile.js/index.js`). It lists files + hashes for the service-worker cache. Never hand-edit or commit it — it is regenerated by the build, so edits are overwritten and won't be tracked anyway. When you add/remove/rename source files, just let the build regenerate it.

## Translations / i18n
- All user-visible strings must go in `src/nls/root/strings.js` — never hardcode English in source files.
- Use `const Strings = require("strings");` then `Strings.KEY_NAME`.
Expand Down
2 changes: 1 addition & 1 deletion gulpfile.js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -909,7 +909,7 @@ function _renameExtensionConcatAsExtensionJSInDist(extensionName) {
}

const minifyableExtensions = ["CloseOthers", "CodeFolding", "DebugCommands", "Git",
"HealthData", "JavaScriptCodeHints", "JavaScriptRefactoring", "QuickView"];
"HealthData", "JavaScriptCodeHints", "JavaScriptRefactoring", "QuickView", "TypeScriptSupport"];
// extensions that nned not be minified either coz they are single file extensions or some other reason.
const nonMinifyExtensions = ["CSSAtRuleCodeHints", "CSSCodeHints",
"CSSPseudoSelectorHints", "DarkTheme", "HandlebarsSupport", "HTMLCodeHints", "HtmlEntityCodeHints",
Expand Down
5 changes: 4 additions & 1 deletion gulpfile.js/thirdparty-lib-copy.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,10 @@ let copyThirdPartyLibs = series(
renameFile.bind(renameFile, 'node_modules/@xterm/addon-webgl/lib/addon-webgl.js.map',
'addon-webgl.js.map', 'src/thirdparty/xterm'),
copyLicence.bind(copyLicence, 'node_modules/@xterm/xterm/LICENSE', 'xterm')

// vtsls language server (bundled in src-node is not installed in pipline tests as the destop app building
// does it for desktop LSP). we ran it once and copied the license here.
// copyLicence.bind(copyLicence, 'src-node/node_modules/@vtsls/language-server/LICENSE', 'vtsls'),
// copyLicence.bind(copyLicence, 'src-node/node_modules/typescript/LICENSE.txt', 'typescript')
);

/**
Expand Down
7 changes: 5 additions & 2 deletions gulpfile.js/validate-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@ const LARGE_FILE_LIST_DEV = {
// Size limits for production/staging builds (in MB)
const PROD_MAX_FILE_SIZE_MB = 2;
const PROD_MAX_TOTAL_SIZE_MB = 80;
// Custom size limits for known large files (size in MB) For staging/production builds
// Custom size limits for known large files (size in MB) For staging/production builds.
// Margin policy: keep ~1 MB of headroom over a file's current size for individual files (and ~5 MB
// for the aggregate/total). Bump a limit only enough to restore that margin when a file legitimately
// grows - don't pad it large, so unexpected size jumps still get caught.
const LARGE_FILE_LIST_PROD = {
'dist/brackets.js': 10, // this is the full minified file itself renamed in prod
'dist/brackets.js': 11, // this is the full minified file itself renamed in prod (~10 MB + 1 MB margin)
'dist/phoenix/virtualfs.js.map': 3
};

Expand Down
3 changes: 3 additions & 0 deletions src-node/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ require("./test-connection");
require("./utils");
require("./terminal");
require("./git/cli");
// Note: "./lsp-client" is intentionally NOT required here. It is lazy-loaded on demand the
// first time the desktop LSP client is used (via NodeUtils._loadNodeExtensionModule), so the
// LSP framework adds nothing to node boot time. See src/languageTools/LSPClient.js.
require("./claude-code-agent");
function randomNonce(byteLength) {
const randomBuffer = new Uint8Array(byteLength);
Expand Down
Loading
Loading