Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit d602c87

Browse files
niteskumshubhsnov
authored andcommitted
Fixed LSP Linting Synchronization Issues (#14685)
* Fixed LSP Linting Synchrnization Issues * Addressed review comments * Removing Linter Name as it is not required
1 parent 8b8e338 commit d602c87

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed

src/extensions/default/PhpTooling/main.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,11 @@ define(function (require, exports, module) {
5757
DEBUG_OPEN_PREFERENCES_IN_SPLIT_VIEW = "debug.openPrefsInSplitView",
5858
phpServerRunning = false,
5959
serverCapabilities,
60-
currentRootPath;
60+
currentRootPath,
61+
chProvider,
62+
phProvider,
63+
lProvider,
64+
jdProvider;
6165

6266
PreferencesManager.definePreference("php", "object", phpConfig, {
6367
description: Strings.DESCRIPTION_PHP_TOOLING_CONFIGURATION
@@ -66,6 +70,9 @@ define(function (require, exports, module) {
6670
PreferencesManager.on("change", "php", function () {
6771
var newPhpConfig = PreferencesManager.get("php");
6872

73+
if (lProvider && newPhpConfig["validateOnType"] !== phpConfig["validateOnType"]) {
74+
lProvider._validateOnType = !(newPhpConfig["validateOnType"] === "false");
75+
}
6976
if ((newPhpConfig["executablePath"] !== phpConfig["executablePath"])
7077
|| (newPhpConfig["enablePhpTooling"] !== phpConfig["enablePhpTooling"])) {
7178
phpConfig = newPhpConfig;
@@ -76,6 +83,7 @@ define(function (require, exports, module) {
7683
});
7784

7885
var handleProjectOpen = function (event, directory) {
86+
lProvider.clearExistingResults();
7987
if(serverCapabilities["workspace"] && serverCapabilities["workspace"]["workspaceFolders"]) {
8088
_client.notifyProjectRootsChanged({
8189
foldersAdded: [directory.fullPath],
@@ -90,17 +98,17 @@ define(function (require, exports, module) {
9098
};
9199

92100
function registerToolingProviders() {
93-
var chProvider = new CodeHintsProvider(_client),
94-
phProvider = new DefaultProviders.ParameterHintsProvider(_client),
95-
lProvider = new DefaultProviders.LintingProvider(_client),
96-
jdProvider = new DefaultProviders.JumpToDefProvider(_client);
101+
chProvider = new CodeHintsProvider(_client),
102+
phProvider = new DefaultProviders.ParameterHintsProvider(_client),
103+
lProvider = new DefaultProviders.LintingProvider(_client),
104+
jdProvider = new DefaultProviders.JumpToDefProvider(_client);
97105

98106
JumpToDefManager.registerJumpToDefProvider(jdProvider, ["php"], 0);
99107
CodeHintManager.registerHintProvider(chProvider, ["php"], 0);
100108
ParameterHintManager.registerHintProvider(phProvider, ["php"], 0);
101109
CodeInspection.register(["php"], {
102-
name: Strings.PHP_DIAGNOSTICS,
103-
scanFile: lProvider.getInspectionResults.bind(lProvider)
110+
name: "",
111+
scanFileAsync: lProvider.getInspectionResultsAsync.bind(lProvider)
104112
});
105113

106114
_client.addOnCodeInspection(lProvider.setInspectionResults.bind(lProvider));
@@ -114,9 +122,7 @@ define(function (require, exports, module) {
114122

115123

116124
if (phpConfig["validateOnType"] !== "false") {
117-
_client.addOnDocumentChangeHandler(function () {
118-
CodeInspection.requestRun(Strings.PHP_DIAGNOSTICS);
119-
});
125+
lProvider._validateOnType = true;
120126
}
121127

122128
_client.addOnProjectOpenHandler(handleProjectOpen);
@@ -170,12 +176,8 @@ define(function (require, exports, module) {
170176
EditorManager.off("activeEditorChange.php");
171177
LanguageManager.off("languageModified.php");
172178
}
173-
174179
evtHandler.handleActiveEditorChange(null, EditorManager.getActiveEditor());
175180
currentRootPath = ProjectManager.getProjectRoot()._path;
176-
setTimeout(function () {
177-
CodeInspection.requestRun(Strings.PHP_DIAGNOSTICS);
178-
}, 1500);
179181
}
180182

181183
function runPhpServer() {

src/languageTools/DefaultProviders.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,16 +335,20 @@ define(function (require, exports, module) {
335335

336336
function LintingProvider() {
337337
this._results = new Map();
338+
this._promiseMap = new Map();
339+
this._validateOnType = false;
338340
}
339341

340342
LintingProvider.prototype.clearExistingResults = function (filePath) {
341343
var filePathProvided = !!filePath;
342344

343345
if (filePathProvided) {
344346
this._results.delete(filePath);
347+
this._promiseMap.delete(filePath);
345348
} else {
346349
//clear all results
347350
this._results.clear();
351+
this._promiseMap.clear();
348352
}
349353
};
350354

@@ -371,6 +375,27 @@ define(function (require, exports, module) {
371375
this._results.set(filePath, {
372376
errors: errors
373377
});
378+
if(this._promiseMap.get(filePath)) {
379+
this._promiseMap.get(filePath).resolve(this._results.get(filePath));
380+
this._promiseMap.delete(filePath);
381+
}
382+
if (this._validateOnType) {
383+
var editor = EditorManager.getActiveEditor(),
384+
docPath = editor ? editor.document.file._path : "";
385+
if (filePath === docPath) {
386+
CodeInspection.requestRun();
387+
}
388+
}
389+
};
390+
391+
LintingProvider.prototype.getInspectionResultsAsync = function (fileText, filePath) {
392+
var result = $.Deferred();
393+
394+
if (this._results.get(filePath)) {
395+
return result.resolve(this._results.get(filePath));
396+
}
397+
this._promiseMap.set(filePath, result);
398+
return result;
374399
};
375400

376401
LintingProvider.prototype.getInspectionResults = function (fileText, filePath) {

src/nls/root/strings.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,6 @@ define({
886886
"PHP_SERVER_MEMORY_LIMIT_INVALID" : "The memory limit you provided is invalid. Review the PHP preferences to set the correct value.",
887887
"DESCRIPTION_PHP_TOOLING_CONFIGURATION" : "PHP Tooling default configuration settings",
888888
"OPEN_PREFERENNCES" : "Open Preferences",
889-
"PHP_DIAGNOSTICS" : "Diagnostics",
890889

891890
//Strings for LanguageTools Preferences
892891
LANGUAGE_TOOLS_PREFERENCES : "Preferences for Language Tools"

0 commit comments

Comments
 (0)