build: use @angular/language-service from source (#64306)

This commit updates the VSCode Angular Language Service extension to use the `@angular/language-service` package built from source within the workspace, rather than a version downloaded from npm.

This change simplifies development and testing by ensuring the extension always uses the latest code from the local repository. The Bazel build configuration, VSCode launch settings, and e2e tests have been updated to reflect this change.

PR Close #64306
This commit is contained in:
Alan Agius
2025-10-09 07:42:13 +00:00
committed by Andrew Kushnir
parent 461eeda6d9
commit ad279efd90
9 changed files with 40 additions and 41 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
"runtimeExecutable": "${execPath}",
"args": [
"--disable-extensions",
"--extensionDevelopmentPath=${workspaceFolder}/dist/bin/vscode-ng-language-service/npm/vscode-ng-language-service/vsix_sandbox"
"--extensionDevelopmentPath=${workspaceFolder}/dist/bin/vscode-ng-language-service/development_package"
],
"preLaunchTask": "VSCE: package"
},
+10 -18
View File
@@ -1305,12 +1305,9 @@ importers:
vscode-ng-language-service:
dependencies:
'@angular/language-service':
specifier: 21.0.0-next.7
version: 21.0.0-next.7
specifier: workspace:*
version: link:../packages/language-service
devDependencies:
'@angular/core':
specifier: 21.0.0-next.7
version: 21.0.0-next.7(@angular/compiler@21.0.0-next.7)
'@types/jasmine':
specifier: ~5.1.9
version: 5.1.9
@@ -1382,7 +1379,7 @@ importers:
dependencies:
'@angular/common':
specifier: 21.0.0-next.7
version: 21.0.0-next.7(@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7))(rxjs@7.8.2)
version: 21.0.0-next.7(@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7)(rxjs@7.8.2))(rxjs@7.8.2)
'@angular/compiler':
specifier: 21.0.0-next.7
version: 21.0.0-next.7
@@ -1391,7 +1388,7 @@ importers:
version: 21.0.0-next.7(@angular/compiler@21.0.0-next.7)(typescript@5.9.3)
'@angular/core':
specifier: 21.0.0-next.7
version: 21.0.0-next.7(@angular/compiler@21.0.0-next.7)
version: 21.0.0-next.7(@angular/compiler@21.0.0-next.7)(rxjs@7.8.2)
rxjs:
specifier: 7.8.2
version: 7.8.2
@@ -1406,8 +1403,8 @@ importers:
vscode-ng-language-service/server:
dependencies:
'@angular/language-service':
specifier: 21.0.0-next.7
version: 21.0.0-next.7
specifier: workspace:*
version: link:../../packages/language-service
typescript:
specifier: 5.9.3
version: 5.9.3
@@ -1753,6 +1750,7 @@ packages:
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
peerDependencies:
'@angular/compiler': 21.0.0-next.7
rxjs: ^6.5.3 || ^7.4.0
peerDependenciesMeta:
'@angular/compiler':
optional: true
@@ -1761,10 +1759,6 @@ packages:
resolution: {tarball: https://codeload.github.com/angular/domino/tar.gz/93e720f143d0296dd2726ffbcf4fc12283363a7b}
version: 2.1.6
'@angular/language-service@21.0.0-next.7':
resolution: {integrity: sha512-aDX+5D+UX/qaakZQM32Z71Iks9TDWaqjYNlMiVePUQSFPh2UZvQ/1a6+iYdhW4rJ7mKOwICIVuIvHlVkGGQ8nw==}
engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
'@angular/material@21.0.0-next.8':
resolution: {integrity: sha512-lTv37cioGdq9ko6jESvQ1LiKRX35ozg4cqF8XWs0CGwOt6s9gphntf4zypTEIR1kk/qlHM1Y/2KCew3VYkWUaQ==}
peerDependencies:
@@ -13583,9 +13577,9 @@ snapshots:
rxjs: 7.8.2
tslib: 2.8.1
'@angular/common@21.0.0-next.7(@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7))(rxjs@7.8.2)':
'@angular/common@21.0.0-next.7(@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7)(rxjs@7.8.2))(rxjs@7.8.2)':
dependencies:
'@angular/core': 21.0.0-next.7(@angular/compiler@21.0.0-next.7)
'@angular/core': 21.0.0-next.7(@angular/compiler@21.0.0-next.7)(rxjs@7.8.2)
rxjs: 7.8.2
tslib: 2.8.1
@@ -13623,7 +13617,7 @@ snapshots:
optionalDependencies:
'@angular/compiler': link:packages/compiler
'@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7)':
'@angular/core@21.0.0-next.7(@angular/compiler@21.0.0-next.7)(rxjs@7.8.2)':
dependencies:
rxjs: 7.8.2
tslib: 2.8.1
@@ -13633,8 +13627,6 @@ snapshots:
'@angular/domino@https://codeload.github.com/angular/domino/tar.gz/93e720f143d0296dd2726ffbcf4fc12283363a7b': {}
'@angular/language-service@21.0.0-next.7': {}
'@angular/material@21.0.0-next.8(@angular/cdk@21.0.0-next.8(@angular/common@packages+common)(@angular/core@packages+core)(rxjs@7.8.2))(@angular/common@packages+common)(@angular/core@packages+core)(@angular/forms@packages+forms)(@angular/platform-browser@packages+platform-browser)(rxjs@7.8.2)':
dependencies:
'@angular/cdk': 21.0.0-next.8(@angular/common@packages+common)(@angular/core@packages+core)(rxjs@7.8.2)
+10 -11
View File
@@ -23,9 +23,10 @@ expand_template_rule(
name = "package_json_expanded",
out = "package_expanded.json",
stamp_substitutions = {
"0.0.0-PLACEHOLDER": "{{BUILD_SCM_VERSION}}",
"workspace:*": "{{STABLE_PROJECT_VERSION}}",
},
substitutions = {
"workspace:*": "0.0.0",
"../dist/bin/vscode-ng-language-service/client/src/extension.js": "./index",
},
template = "package.json",
@@ -34,12 +35,12 @@ expand_template_rule(
npm_package(
name = "vsix_sandbox",
srcs = [
"package_expanded.json",
"angular.png",
"CHANGELOG.md",
"README.md",
"angular.png",
"package_expanded.json",
"//vscode-ng-language-service/client:index.js",
"//vscode-ng-language-service/server:npm_files",
"//vscode-ng-language-service/server:npm_package",
"//vscode-ng-language-service/syntaxes:npm_files",
# Transitive closure of npm deps that are marked as "external" in esbuild needed for vsce;
# this set was determined manually by running `bazel build //:vsix` and burning down missing packages.
@@ -56,7 +57,7 @@ npm_package(
],
replace_prefixes = {
"package_expanded.json": "package.json",
"server/package_expanded.json": "server/package.json",
"server/npm_package/": "server/",
"client/": "",
"syntaxes/src/": "syntaxes/",
},
@@ -82,16 +83,14 @@ vsce_bin.vsce(
)
npm_package(
name = "npm",
name = "development_package",
srcs = [
":vsix",
":vsix_sandbox",
],
data = [
"//vscode-ng-language-service:node_modules/@angular/language-service",
],
root_paths = [
"vsix_sandbox",
"vscode-ng-language-service/vsix_sandbox",
"vscode-ng-language-service",
],
visibility = ["//vscode-ng-language-service/integration:__subpackages__"],
visibility = ["//vscode-ng-language-service/integration/e2e:__subpackages__"],
)
@@ -70,7 +70,8 @@ export class Version {
}
isVersionZero() {
return this.versionStr === '0.0.0';
// Handle both `0.0.0`, `0.0.0-PLACEHOLDER` and similar
return this.major === 0 && this.minor === 0 && this.patch === 0;
}
toString(): string {
@@ -30,7 +30,7 @@ js_test(
name = "test",
data = [
":e2e",
"//vscode-ng-language-service:npm",
"//vscode-ng-language-service:development_package",
],
entry_point = ":index.js",
env = {
@@ -9,7 +9,7 @@ import {mkdtemp} from 'node:fs/promises';
import Xvfb from 'xvfb';
async function main() {
const EXT_DEVELOPMENT_PATH = join(PACKAGE_ROOT, 'npm/vscode-ng-language-service/vsix_sandbox');
const EXT_DEVELOPMENT_PATH = join(PACKAGE_ROOT, 'development_package');
const EXT_TESTS_PATH = join(PACKAGE_ROOT, 'integration', 'e2e', 'jasmine');
const xvfb = new Xvfb();
+4 -4
View File
@@ -2,7 +2,8 @@
"name": "ng-template",
"displayName": "Angular Language Service",
"description": "Editor services for Angular templates",
"version": "20.2.2",
"version": "0.0.0",
"private": true,
"publisher": "Angular",
"icon": "angular.png",
"license": "MIT",
@@ -246,7 +247,7 @@
"scripts": {
"build:syntaxes": "bazel run //vscode-ng-language-service/syntaxes:syntaxes",
"watch": "ibazel build //vscode-ng-language-service/client/src //vscode-ng-language-service/server/src",
"package": "bazel build //vscode-ng-language-service:npm --config=release",
"package": "bazel build //vscode-ng-language-service:development_package --config=release",
"test": "bazel test --test_tag_filters=unit_test //vscode-ng-language-service/...",
"test:watch": "ibazel test --test_tag_filters=unit_test //vscode-ng-language-service/...",
"test:lsp": "bazel test --test_output=streamed //vscode-ng-language-service/integration/lsp:test",
@@ -257,10 +258,9 @@
"test:inspect-syntaxes": "bazel run --config=debug //vscode-ng-language-service/syntaxes/test:test"
},
"dependencies": {
"@angular/language-service": "21.0.0-next.7"
"@angular/language-service": "workspace:*"
},
"devDependencies": {
"@angular/core": "21.0.0-next.7",
"@types/jasmine": "~5.1.9",
"@types/jasmine-reporters": "~2.5.3",
"@types/node": "^24.5.2",
+10 -3
View File
@@ -1,5 +1,6 @@
load("@aspect_bazel_lib//lib:expand_template.bzl", "expand_template_rule")
load("@aspect_rules_esbuild//esbuild:defs.bzl", "esbuild")
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
load("@aspect_rules_ts//ts:defs.bzl", "ts_config")
load("@npm//:defs.bzl", "npm_link_all_packages")
@@ -73,21 +74,27 @@ expand_template_rule(
name = "package_json_expanded",
out = "package_expanded.json",
stamp_substitutions = {
"0.0.0-PLACEHOLDER": "{{BUILD_SCM_VERSION}}",
"0.0.0-PLACEHOLDER": "{{STABLE_PROJECT_VERSION}}",
"workspace:*": "{{STABLE_PROJECT_VERSION}}",
},
substitutions = {
"0.0.0-PLACEHOLDER": "0.0.0",
"workspace:*": "0.0.0",
"../../dist/bin/vscode-ng-language-service/server/src/server.js": "./index.js",
},
template = "package.json",
)
filegroup(
name = "npm_files",
npm_package(
name = "npm_package",
srcs = [
"README.md",
"bin/ngserver",
"index.js",
"package_expanded.json",
],
replace_prefixes = {
"package_expanded.json": "package.json",
},
visibility = ["//vscode-ng-language-service:__pkg__"],
)
@@ -17,7 +17,7 @@
"ngserver": "./bin/ngserver"
},
"dependencies": {
"@angular/language-service": "21.0.0-next.7",
"@angular/language-service": "workspace:*",
"typescript": "5.9.3"
},
"devDependencies": {