Skip to content

Commit 07f19f8

Browse files
Merge pull request #404 from laravel/improve-startup-time
Improve startup time
2 parents b0d5969 + 8cdb91a commit 07f19f8

File tree

7 files changed

+50
-21
lines changed

7 files changed

+50
-21
lines changed

src/completion/Blade.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { getCustomBladeDirectives } from "../repositories/customBladeDirectives"
55
import { wordMatchRegex } from "./../support/patterns";
66
import { indent } from "./../support/util";
77

8-
export default class Blade implements vscode.CompletionItemProvider {
8+
export class Blade implements vscode.CompletionItemProvider {
99
provideCompletionItems(
1010
document: vscode.TextDocument,
1111
position: vscode.Position,
@@ -130,7 +130,11 @@ export default class Blade implements vscode.CompletionItemProvider {
130130
"@stack(...)": "@stack(${1})",
131131
"@push(...)": ["@push(${1})", indent("${2}"), "@endpush"],
132132
"@pushIf(...)": ["@pushIf(${1})", indent("${2}"), "@endPushIf"],
133-
"@pushOnce(...)": ["@pushOnce(${1})", indent("${2}"), "@endPushOnce"],
133+
"@pushOnce(...)": [
134+
"@pushOnce(${1})",
135+
indent("${2}"),
136+
"@endPushOnce",
137+
],
134138
"@prepend(...)": ["@prepend(${1})", indent("${2}"), "@endprepend"],
135139
"@php": ["@php", indent("${1}"), "@endphp"],
136140
"@component(...)": ["@component(${1})", "${2}", "@endcomponent"],

src/completion/Eloquent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import AutocompleteResult from "../parser/AutocompleteResult";
66
import { getModels } from "./../repositories/models";
77
import { wordMatchRegex } from "./../support/patterns";
88

9-
export default class Eloquent implements CompletionProvider {
9+
export class Eloquent implements CompletionProvider {
1010
private relationMethods = [
1111
"doesntHave",
1212
"doesntHaveMorph",

src/completion/Registry.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { toArray } from "@src/support/util";
66
import * as vscode from "vscode";
77
import { CompletionProvider, FeatureTagParam } from "..";
88

9-
export default class Registry implements vscode.CompletionItemProvider {
9+
export class Registry implements vscode.CompletionItemProvider {
1010
private providers: CompletionProvider[] = [];
1111

1212
constructor(...providers: CompletionProvider[]) {

src/completion/Validation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { CompletionProvider } from "..";
66
import AutocompleteResult from "../parser/AutocompleteResult";
77
import { wordMatchRegex } from "./../support/patterns";
88

9-
export default class Validation implements CompletionProvider {
9+
export class Validation implements CompletionProvider {
1010
private rules = {
1111
accepted: "accepted",
1212
active_url: "active_url",

src/extension.ts

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,7 @@ import os from "os";
66
import { LanguageClient } from "vscode-languageclient/node";
77
import { bladeSpacer } from "./blade/bladeSpacer";
88
import { initClient } from "./blade/client";
9-
import { CodeActionProvider } from "./codeAction/codeActionProvider";
109
import { openFileCommand } from "./commands";
11-
import BladeCompletion from "./completion/Blade";
12-
import { completionProviders } from "./completion/CompletionProvider";
13-
import EloquentCompletion from "./completion/Eloquent";
14-
import Registry from "./completion/Registry";
15-
import ValidationCompletion from "./completion/Validation";
16-
import { updateDiagnostics } from "./diagnostic/diagnostic";
17-
import { completionProvider as bladeComponentCompletion } from "./features/bladeComponent";
18-
import { viteEnvCodeActionProvider } from "./features/env";
19-
import { completionProvider as livewireComponentCompletion } from "./features/livewireComponent";
20-
import { hoverProviders } from "./hover/HoverProvider";
21-
import { linkProviders } from "./link/LinkProvider";
2210
import { configAffected } from "./support/config";
2311
import { collectDebugInfo } from "./support/debug";
2412
import {
@@ -30,6 +18,7 @@ import { clearParserCaches, setParserBinaryPath } from "./support/parser";
3018
import {
3119
clearDefaultPhpCommand,
3220
clearPhpFileCache,
21+
initPhp,
3322
initVendorWatchers,
3423
} from "./support/php";
3524
import { hasWorkspace, projectPathExists } from "./support/project";
@@ -51,7 +40,7 @@ function shouldActivate(): boolean {
5140
return true;
5241
}
5342

54-
export function activate(context: vscode.ExtensionContext) {
43+
export async function activate(context: vscode.ExtensionContext) {
5544
info("Activating Laravel Extension...");
5645

5746
if (!shouldActivate()) {
@@ -63,6 +52,34 @@ export function activate(context: vscode.ExtensionContext) {
6352

6453
info("Started");
6554

55+
const [
56+
{ Registry },
57+
{ completionProviders },
58+
{ Eloquent: EloquentCompletion },
59+
{ Validation: ValidationCompletion },
60+
{ Blade: BladeCompletion },
61+
{ completionProvider: bladeComponentCompletion },
62+
{ completionProvider: livewireComponentCompletion },
63+
{ CodeActionProvider },
64+
{ updateDiagnostics },
65+
{ viteEnvCodeActionProvider },
66+
{ hoverProviders },
67+
{ linkProviders },
68+
] = await Promise.all([
69+
import("./completion/Registry.js"),
70+
import("./completion/CompletionProvider.js"),
71+
import("./completion/Eloquent.js"),
72+
import("./completion/Validation.js"),
73+
import("./completion/Blade.js"),
74+
import("./features/bladeComponent.js"),
75+
import("./features/livewireComponent.js"),
76+
import("./codeAction/codeActionProvider.js"),
77+
import("./diagnostic/diagnostic.js"),
78+
import("./features/env.js"),
79+
import("./hover/HoverProvider.js"),
80+
import("./link/LinkProvider.js"),
81+
]);
82+
6683
console.log("Laravel VS Code Started...");
6784

6885
const BLADE_LANGUAGES = [
@@ -72,6 +89,7 @@ export function activate(context: vscode.ExtensionContext) {
7289

7390
const LANGUAGES = [{ scheme: "file", language: "php" }, ...BLADE_LANGUAGES];
7491

92+
initPhp();
7593
initVendorWatchers();
7694
watchForComposerChanges();
7795
setParserBinaryPath(context);

src/support/php.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@ let defaultPhpCommand: string | null = null;
2727

2828
const discoverFiles = new BoundedFileCache(50);
2929

30-
let hasVendor = projectPathExists("vendor/autoload.php");
31-
const hasBootstrap = projectPathExists("bootstrap/app.php");
30+
let hasVendor: boolean | null = null;
31+
let hasBootstrap: boolean | null = null;
32+
33+
export const initPhp = () => {
34+
hasVendor = projectPathExists("vendor/autoload.php");
35+
hasBootstrap = projectPathExists("bootstrap/app.php");
36+
};
3237

3338
let phpEnvKey: PhpEnvironment | null = null;
3439
const phpEnvsThatUseRelativePaths: PhpEnvironment[] = ["sail", "lando"];

src/syntax/DocumentHighlight.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ import * as vscode from "vscode";
22
import * as html from "vscode-html-languageservice";
33
import * as lsTextDocument from "vscode-languageserver-textdocument";
44

5-
const service = html.getLanguageService();
5+
let service: html.LanguageService | null = null;
66

77
class DocumentHighlight implements vscode.DocumentHighlightProvider {
88
provideDocumentHighlights(
99
document: vscode.TextDocument,
1010
position: vscode.Position,
1111
token: vscode.CancellationToken,
1212
): vscode.DocumentHighlight[] | Thenable<vscode.DocumentHighlight[]> {
13+
service ??= html.getLanguageService();
14+
1315
const doc = lsTextDocument.TextDocument.create(
1416
document.uri.fsPath,
1517
"html",

0 commit comments

Comments
 (0)