Skip to content

Commit f891676

Browse files
committed
修复代码诊断bug, 修复签名问题, 修复空工作区问题
1 parent d386cba commit f891676

File tree

4 files changed

+84
-80
lines changed

4 files changed

+84
-80
lines changed

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaLanguageServer.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ class LuaLanguageServer : LanguageServer, LanguageClientAware {
5353
}
5454

5555
override fun initialize(params: InitializeParams): CompletableFuture<InitializeResult> {
56-
for (workspace in params.workspaceFolders) {
57-
workspaceService.addRoot(workspace.uri)
56+
if (params.workspaceFolders != null) {
57+
for (workspace in params.workspaceFolders) {
58+
workspaceService.addRoot(workspace.uri)
59+
}
5860
}
5961
initIntellijEnv()
6062

@@ -107,7 +109,7 @@ class LuaLanguageServer : LanguageServer, LanguageClientAware {
107109
inlayHintOptions.resolveProvider = true
108110
capabilities.inlayHintProvider = Either.forRight(inlayHintOptions)
109111

110-
capabilities.diagnosticProvider = DiagnosticRegistrationOptions(false, true)
112+
capabilities.diagnosticProvider = DiagnosticRegistrationOptions(false, false)
111113

112114
// capabilities.semanticTokensProvider = SemanticTokensWithRegistrationOptions(
113115
// SemanticTokensLegend(

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaTextDocumentService.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.tang.intellij.lua.stubs.index.LuaClassMemberIndex
2020
import com.tang.intellij.lua.ty.*
2121
import com.tang.lsp.*
2222
import com.tang.vscode.api.impl.LuaFile
23+
import com.tang.vscode.diagnostics.DiagnosticsService
2324
//import com.tang.vscode.color.ColorService
2425
import com.tang.vscode.documentation.LuaDocumentationProvider
2526
import com.tang.vscode.extendApi.ExtendApiService
@@ -485,10 +486,27 @@ class LuaTextDocumentService(private val workspace: LuaWorkspaceService) : TextD
485486
} else if (file is LuaFile) {
486487
file.text = params.textDocument.text
487488
}
489+
if (file is ILuaFile) {
490+
val diagnosticList = mutableListOf<Diagnostic>()
491+
DiagnosticsService.inspectFile(file, diagnosticList)
492+
this.client?.publishDiagnostics(PublishDiagnosticsParams(
493+
uri, diagnosticList
494+
))
495+
}
488496
}
489497

490498
override fun didSave(params: DidSaveTextDocumentParams) {
491-
499+
val uri = params.textDocument.uri
500+
val file = workspace.findFile(uri)
501+
if (file is ILuaFile) {
502+
val diagnosticList = mutableListOf<Diagnostic>()
503+
DiagnosticsService.inspectFile(file, diagnosticList)
504+
this.client?.publishDiagnostics(
505+
PublishDiagnosticsParams(
506+
uri, diagnosticList
507+
)
508+
)
509+
}
492510
}
493511

494512
override fun signatureHelp(params: SignatureHelpParams?): CompletableFuture<SignatureHelp?> {

EmmyLua-LS/src/main/kotlin/com/tang/vscode/LuaWorkspaceService.kt

Lines changed: 52 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
4141
private val schemeMap = mutableMapOf<String, IFolder>()
4242
private val configurationManager = ConfigurationManager()
4343
private var client: LuaLanguageClient? = null
44-
private var configVersion = 0
4544
private val project: Project = WProject()
4645
private val fileManager = FileManager(project)
4746
private val fileScopeProvider = WorkspaceRootFileScopeProvider()
@@ -86,7 +85,6 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
8685
override fun didChangeConfiguration(params: DidChangeConfigurationParams) {
8786
val settings = params.settings as? JsonObject ?: return
8887
val ret = VSCodeSettings.update(settings)
89-
++configVersion
9088
if (ret.associationChanged || initWorkspace) {
9189
initWorkspace = false
9290
loadWorkspace()
@@ -116,7 +114,6 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
116114

117115
@JsonRequest("emmy/updateConfig")
118116
fun updateConfig(params: UpdateConfigParams): CompletableFuture<Void> {
119-
++configVersion
120117
configurationManager.updateConfiguration(params)
121118
loadWorkspace()
122119
refreshWorkspace()
@@ -161,64 +158,57 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
161158
}
162159
}
163160

164-
override fun diagnostic(params: WorkspaceDiagnosticParams): CompletableFuture<WorkspaceDiagnosticReport> {
165-
for (prev in params.previousResultIds) {
166-
val file = findFile(prev.uri)
167-
if (file is LuaFile) {
168-
file.workspaceDiagnosticResultId = prev.value
169-
}
170-
}
171-
172-
val files = mutableListOf<LuaFile>()
173-
project.process {
174-
val file = it.virtualFile
175-
if (file is LuaFile) {
176-
files.add(file)
177-
}
178-
true
179-
}
180-
181-
val workspaceConfigVersion = configVersion
182-
183-
return computeAsync { checker ->
184-
for (luaFile in files) {
185-
luaFile.lock {
186-
val documentReport = diagnoseFile(luaFile, luaFile.workspaceDiagnosticResultId, checker)
187-
if (documentReport.isRelatedFullDocumentDiagnosticReport) {
188-
val workspaceItemReport = WorkspaceFullDocumentDiagnosticReport(
189-
documentReport.relatedFullDocumentDiagnosticReport.items,
190-
luaFile.uri.toString(),
191-
null
192-
)
193-
194-
workspaceItemReport.resultId = documentReport.relatedFullDocumentDiagnosticReport.resultId
195-
val report = WorkspaceDiagnosticReportPartialResult(
196-
listOf(WorkspaceDocumentDiagnosticReport(workspaceItemReport))
197-
)
198-
client?.notifyProgress(ProgressParams(params.partialResultToken, Either.forRight(report)))
199-
} else if (documentReport.isRelatedUnchangedDocumentDiagnosticReport) {
200-
val workspaceItemReport = WorkspaceUnchangedDocumentDiagnosticReport(
201-
documentReport.relatedUnchangedDocumentDiagnosticReport.resultId,
202-
luaFile.uri.toString(),
203-
null
204-
)
205-
val report = WorkspaceDiagnosticReportPartialResult(
206-
listOf(WorkspaceDocumentDiagnosticReport(workspaceItemReport))
207-
)
208-
client?.notifyProgress(ProgressParams(params.partialResultToken, Either.forRight(report)))
209-
}
210-
}
211-
}
212-
213-
// 如果配置版本发生变更则中断无限循环
214-
while (workspaceConfigVersion == configVersion) {
215-
Thread.sleep(1000)
216-
}
217-
218-
val empty = WorkspaceDiagnosticReport(emptyList())
219-
empty
220-
}
221-
}
161+
// override fun diagnostic(params: WorkspaceDiagnosticParams): CompletableFuture<WorkspaceDiagnosticReport> {
162+
// for (prev in params.previousResultIds) {
163+
// val file = findFile(prev.uri)
164+
// if (file is LuaFile) {
165+
// file.workspaceDiagnosticResultId = prev.value
166+
// }
167+
// }
168+
//
169+
// val files = mutableListOf<LuaFile>()
170+
// project.process {
171+
// val file = it.virtualFile
172+
// if (file is LuaFile) {
173+
// files.add(file)
174+
// }
175+
// true
176+
// }
177+
//
178+
// return computeAsync { checker ->
179+
// for (luaFile in files) {
180+
// luaFile.lock {
181+
// val documentReport = diagnoseFile(luaFile, luaFile.workspaceDiagnosticResultId, checker)
182+
// if (documentReport.isRelatedFullDocumentDiagnosticReport) {
183+
// val workspaceItemReport = WorkspaceFullDocumentDiagnosticReport(
184+
// documentReport.relatedFullDocumentDiagnosticReport.items,
185+
// luaFile.uri.toString(),
186+
// null
187+
// )
188+
//
189+
// workspaceItemReport.resultId = documentReport.relatedFullDocumentDiagnosticReport.resultId
190+
// val report = WorkspaceDiagnosticReportPartialResult(
191+
// listOf(WorkspaceDocumentDiagnosticReport(workspaceItemReport))
192+
// )
193+
// client?.notifyProgress(ProgressParams(params.partialResultToken, Either.forRight(report)))
194+
// } else if (documentReport.isRelatedUnchangedDocumentDiagnosticReport) {
195+
// val workspaceItemReport = WorkspaceUnchangedDocumentDiagnosticReport(
196+
// documentReport.relatedUnchangedDocumentDiagnosticReport.resultId,
197+
// luaFile.uri.toString(),
198+
// null
199+
// )
200+
// val report = WorkspaceDiagnosticReportPartialResult(
201+
// listOf(WorkspaceDocumentDiagnosticReport(workspaceItemReport))
202+
// )
203+
// client?.notifyProgress(ProgressParams(params.partialResultToken, Either.forRight(report)))
204+
// }
205+
// }
206+
// }
207+
//
208+
// val empty = WorkspaceDiagnosticReport(emptyList())
209+
// empty
210+
// }
211+
// }
222212

223213
private fun getSchemeFolder(path: FileURI, autoCreate: Boolean): IFolder? {
224214
var folder: IFolder? = schemeMap[path.scheme]
@@ -317,21 +307,13 @@ class LuaWorkspaceService : WorkspaceService, IWorkspace {
317307
}
318308

319309
fun diagnoseFile(file: ILuaFile, previousId: String?, checker: CancelChecker?): DocumentDiagnosticReport {
320-
val fileVersion = file.getVersion()
321-
val resultId = "$fileVersion|$configVersion"
322-
if (previousId != null && resultId == previousId) {
323-
return DocumentDiagnosticReport(RelatedUnchangedDocumentDiagnosticReport(resultId))
324-
}
325-
326310
val diagnostics = mutableListOf<Diagnostic>()
327311

328312
if (file is LuaFile) {
329313
file.diagnostic(diagnostics, checker)
330314
}
331315

332-
val report = DocumentDiagnosticReport(RelatedFullDocumentDiagnosticReport(diagnostics))
333-
report.relatedFullDocumentDiagnosticReport.resultId = resultId
334-
return report
316+
return DocumentDiagnosticReport(RelatedFullDocumentDiagnosticReport(diagnostics))
335317
}
336318

337319
private fun loadWorkspace(monitor: IProgressMonitor) {

EmmyLua-LS/src/main/kotlin/com/tang/vscode/diagnostics/DiagnosticsService.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,32 +36,34 @@ object DiagnosticsService {
3636
diagnostics.add(diagnostic)
3737
}
3838
}
39+
}
40+
true
41+
}
42+
}
43+
44+
fun inspectFile(file: ILuaFile, diagnostics: MutableList<Diagnostic>) {
45+
PsiTreeUtil.processElements(file.psi) {
46+
when (it) {
3947
is LuaIndexExpr -> {
40-
checker?.checkCanceled()
4148
DeprecatedInspection.indexDeprecatedInspections(it, file, diagnostics)
4249
FieldValidInspection.fieldValidationInspections(it, file, diagnostics)
4350
}
4451
is LuaCallExpr -> {
45-
checker?.checkCanceled()
4652
FunctionInspection.callExprInspections(it, file, diagnostics)
4753
}
4854
is LuaAssignStat -> {
49-
checker?.checkCanceled()
5055
AssignInspection.assignInspections(it, file, diagnostics)
5156
}
5257
is LuaNameExpr -> {
53-
checker?.checkCanceled()
5458
DeprecatedInspection.nameExprDeprecatedInspections(it, file, diagnostics)
5559
UndeclaredVariableInspection.undeclaredVariableInspections(it, file, diagnostics)
5660
}
5761
is LuaDocTagClass -> {
58-
checker?.checkCanceled()
5962
InheritInspection.inheritInspections(it, file, diagnostics)
6063
}
6164
}
6265
true
6366
}
6467
}
6568

66-
6769
}

0 commit comments

Comments
 (0)