diff --git a/src/main/kotlin/b/language/server/BDocumentService.kt b/src/main/kotlin/b/language/server/BDocumentService.kt index cf0d28cd5a6c1b5964e99dde62519b23eea372f4..2448022e4b4826e5c9cba71300f87777334620ef 100644 --- a/src/main/kotlin/b/language/server/BDocumentService.kt +++ b/src/main/kotlin/b/language/server/BDocumentService.kt @@ -33,14 +33,29 @@ class BDocumentService(private val server: Server) : TextDocumentService { */ override fun didSave(params: DidSaveTextDocumentParams?) { + // server.languageClient.showMessage(MessageParams(MessageType.Log,"Penis")) + val currentUri = params!!.textDocument.uri + checkUri(currentUri) + + } + + /** + * + * @param the uri to perform actions on + */ + fun checkUri(currentUri : String){ val clientSettings = server.getDocumentSettings(currentUri) + // server.languageClient.showMessage(MessageParams(MessageType.Log,clientSettings.toString())) + clientSettings.thenAccept{ settings -> val prob : ProBInterface = ProBCommandLineAccess() + // server.languageClient.showMessage(MessageParams(MessageType.Log,settings.toString())) try{ val diagnostics: List<Diagnostic> = prob.checkDocument(currentUri, settings) + server.languageClient.publishDiagnostics(PublishDiagnosticsParams(currentUri, diagnostics)) val filesWithProblems = diagnostics.map { diagnostic -> diagnostic.source } calculateToInvalidate(currentUri, filesWithProblems) @@ -83,7 +98,8 @@ class BDocumentService(private val server: Server) : TextDocumentService { * Registration Options: TextDocumentChangeRegistrationOptions */ override fun didChange(params: DidChangeTextDocumentParams?) { - //Nothing + val currentUri = params!!.textDocument.uri + checkUri(currentUri) } } \ No newline at end of file diff --git a/src/main/kotlin/b/language/server/Server.kt b/src/main/kotlin/b/language/server/Server.kt index 241dfc84deecdcb746b47e83e40767d12a0d0d71..d1b11c312d27fdbc716e80d5ade78ba0c26b0343 100644 --- a/src/main/kotlin/b/language/server/Server.kt +++ b/src/main/kotlin/b/language/server/Server.kt @@ -3,6 +3,7 @@ package b.language.server import b.language.server.dataStorage.Settings import com.google.gson.JsonObject import org.eclipse.lsp4j.* +import org.eclipse.lsp4j.jsonrpc.messages.Either import org.eclipse.lsp4j.services.LanguageClient import org.eclipse.lsp4j.services.LanguageServer import org.eclipse.lsp4j.services.TextDocumentService @@ -27,28 +28,10 @@ class Server : LanguageServer { } - /** - * The initialize request is sent as the first request from the client to - * the server. - * - * If the server receives request or notification before the initialize request it should act as follows: - * - for a request the respond should be errored with code: -32001. The message can be picked by the server. - * - notifications should be dropped, except for the exit notification. This will allow the exit a server without an initialize request. - * - * Until the server has responded to the initialize request with an InitializeResult - * the client must not sent any additional requests or notifications to the server. - * - * During the initialize request the server is allowed to sent the notifications window/showMessage, - * window/logMessage and telemetry/event as well as the window/showMessageRequest request to the client. - */ override fun initialize(params: InitializeParams?): CompletableFuture<InitializeResult> { val res = InitializeResult(ServerCapabilities()) - res.capabilities.setCodeActionProvider(false) -// res.capabilities.definitionProvider = false - res.capabilities.hoverProvider = false - res.capabilities.referencesProvider = false - res.capabilities.setTextDocumentSync(TextDocumentSyncKind.Full) - res.capabilities.documentSymbolProvider = false + res.capabilities.textDocumentSync = Either.forLeft(TextDocumentSyncKind.Full) + return CompletableFuture.supplyAsync { res } } @@ -104,8 +87,10 @@ class Server : LanguageServer { if(!configurationAbility){ val returnValue = CompletableFuture<Settings>() returnValue.complete(globalSettings) + return returnValue } + // if client has configuration abilities return if(documentSettings.containsKey(uri)) { diff --git a/src/main/kotlin/b/language/server/Util.kt b/src/main/kotlin/b/language/server/Util.kt index 4c6f406cc72f900f4a6c1aa6e0c55fe7f8a101c7..a42106ee353348e5875acf2b05fc0cb6b955da75 100644 --- a/src/main/kotlin/b/language/server/Util.kt +++ b/src/main/kotlin/b/language/server/Util.kt @@ -1,13 +1,9 @@ package b.language.server -import b.language.server.dataStorage.Problem import b.language.server.dataStorage.Settings import com.google.gson.Gson import com.google.gson.JsonObject -import org.eclipse.lsp4j.Diagnostic -import org.eclipse.lsp4j.DiagnosticSeverity -import org.eclipse.lsp4j.Position -import org.eclipse.lsp4j.Range + import java.io.File diff --git a/src/main/kotlin/b/language/server/proBMangement/ProBCommandLineAccess.kt b/src/main/kotlin/b/language/server/proBMangement/ProBCommandLineAccess.kt index 4daf213f471f435fe39da5d4f72d6e9db22c888d..35af31f6a651c1d5e20ce5888a1c997d7c7f97d8 100644 --- a/src/main/kotlin/b/language/server/proBMangement/ProBCommandLineAccess.kt +++ b/src/main/kotlin/b/language/server/proBMangement/ProBCommandLineAccess.kt @@ -25,7 +25,7 @@ class ProBCommandLineAccess : ProBInterface{ val result = createFolder(errorDict, errorPath) if(!result){ - throw PathCouldNotBeCreatedException("The Path leading to $errorPath could has not been created due some issue.") + throw PathCouldNotBeCreatedException("The Path leading to $errorPath has not been created due some issue.") } val command = buildCommand(settings, path, errorPath) @@ -163,7 +163,10 @@ class ProBCommandLineAccess : ProBInterface{ .map { problem -> Diagnostic( Range( Position(problem.start.line, problem.start.col), - Position(problem.end.line, problem.end.col)), problem.message, + Position(problem.end.line, problem.end.col)), + + problem.message, + when (problem.type) { "error" -> { DiagnosticSeverity.Error @@ -178,8 +181,9 @@ class ProBCommandLineAccess : ProBInterface{ DiagnosticSeverity.Hint } }, - problem.file, - " probcli v.${problem.version}") + problem.file + //code = " probcli v.${problem.version}" + ) } } } \ No newline at end of file diff --git a/src/test/kotlin/b/language/server/ProBCommandLineTest.kt b/src/test/kotlin/b/language/server/ProBCommandLineTest.kt index 16e3b123d1d3a4186d3ba62843db14b728768deb..79e90d6bf097ce5eff8a9d8eb1a0377c09a0a571 100644 --- a/src/test/kotlin/b/language/server/ProBCommandLineTest.kt +++ b/src/test/kotlin/b/language/server/ProBCommandLineTest.kt @@ -12,6 +12,7 @@ import kotlin.test.Test import org.junit.jupiter.api.io.TempDir import java.io.File import kotlin.test.assertEquals +import kotlin.test.assertTrue class ProBCommandLineTest{ @@ -177,9 +178,19 @@ class ProBCommandLineTest{ val diagnostic = Diagnostic(Range( org.eclipse.lsp4j.Position(31,54), - org.eclipse.lsp4j.Position(53, 65)), message, DiagnosticSeverity.Hint, problemFile, " probcli v.$version" ) + org.eclipse.lsp4j.Position(5, 65)), message, DiagnosticSeverity.Hint, problemFile, " probcli v.$version" ) assertEquals(diagnostic, transformedProblem) } + + @Test + fun test_createFolders_success(@TempDir tempPath : File = File("tmp")){ + val errorDict = File(tempPath.path+"/tmp") + val errorPath = File(tempPath.path+"/tmp/hallo.njson") + val result = ProBCommandLineAccess().createFolder(errorDict, errorPath) + assertTrue(result) + } + + } \ No newline at end of file