Skip to content

Commit

Permalink
switch to lsp4ij
Browse files Browse the repository at this point in the history
  • Loading branch information
CppCXY committed Jun 7, 2024
1 parent 58effb5 commit b61fbc3
Show file tree
Hide file tree
Showing 9 changed files with 207 additions and 154 deletions.
51 changes: 31 additions & 20 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,20 @@ data class BuildData(
val targetCompatibilityLevel: JavaVersion = JavaVersion.VERSION_17,
// https://github.com/JetBrains/gradle-intellij-plugin/issues/403#issuecomment-542890849
val instrumentCodeCompilerVersion: String = ideaSDKVersion,
val type: String = "IU"
val type: String = "IC"
)

val buildDataList = listOf(
BuildData(
ideaSDKShortVersion = "241",
ideaSDKVersion = "LATEST-EAP-SNAPSHOT",
sinceBuild = "241",
untilBuild = "241.*",
untilBuild = "242.*",
)
)

group = "com.cppcxy"
val sumnekoVersion = "3.8.0"
val sumnekoVersion = "3.9.2"

val sumnekoProjectUrl = "https://github.com/LuaLS/lua-language-server"

Expand Down Expand Up @@ -90,8 +90,9 @@ intellij {
pluginName.set("Sumneko-Lua")
version.set(buildVersionData.ideaSDKVersion)
type.set(buildVersionData.type) // Target IDE Platform

sandboxDir.set("${project.buildDir}/${buildVersionData.ideaSDKShortVersion}/idea-sandbox")
plugins.set(listOf(/* Plugin Dependencies */))
plugins.set(listOf("com.redhat.devtools.lsp4ij:0.0.1"))
}

repositories {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@ import com.tang.intellij.lua.psi.LuaPsiElement
*/
class LuaHighlightErrorFilter : HighlightErrorFilter() {
override fun shouldHighlightErrorElement(psiErrorElement: PsiErrorElement): Boolean {
return psiErrorElement !is LuaPsiElement;
return psiErrorElement !is LuaPsiElement
}
}
12 changes: 12 additions & 0 deletions src/main/kotlin/com/cppcxy/ide/lsp/LspFactory.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.cppcxy.ide.lsp

import com.intellij.openapi.project.Project
import com.redhat.devtools.lsp4ij.LanguageServerFactory
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider


class LspFactory : LanguageServerFactory {
override fun createConnectionProvider(project: Project): StreamConnectionProvider {
return SumnekoServer(project)
}
}
60 changes: 30 additions & 30 deletions src/main/kotlin/com/cppcxy/ide/lsp/SumnekoClient.kt
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
package com.cppcxy.ide.lsp

import com.cppcxy.ide.editor.statusbar.StatusBarWidgetFactory
import com.intellij.openapi.project.Project
import com.intellij.openapi.wm.WindowManager
import com.intellij.platform.lsp.api.Lsp4jClient
import com.intellij.platform.lsp.api.LspServerNotificationsHandler
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification

class SumnekoClient(private val serverNotificationsHandler: LspServerNotificationsHandler, val project: Project) :
Lsp4jClient(serverNotificationsHandler) {

@JsonNotification("$/status/show")
fun statusShow() {
}

@JsonNotification("$/status/hide")
fun statusHide() {
}

@JsonNotification("$/status/report")
fun statusReport(report: StatusReport) {
val statusBar = WindowManager.getInstance().getStatusBar(project)
val widget = statusBar.getWidget("SumnekoBar") as StatusBarWidgetFactory.SumnekoBar?
if (widget != null) {
widget.message = report.text
widget.toolTip = report.tooltip
}
}
}
//package com.cppcxy.ide.lsp
//
//import com.cppcxy.ide.editor.statusbar.StatusBarWidgetFactory
//import com.intellij.openapi.project.Project
//import com.intellij.openapi.wm.WindowManager
//import com.intellij.platform.lsp.api.Lsp4jClient
//import com.intellij.platform.lsp.api.LspServerNotificationsHandler
//import org.eclipse.lsp4j.jsonrpc.services.JsonNotification
//
//class SumnekoClient(private val serverNotificationsHandler: LspServerNotificationsHandler, val project: Project) :
// Lsp4jClient(serverNotificationsHandler) {
//
// @JsonNotification("$/status/show")
// fun statusShow() {
// }
//
// @JsonNotification("$/status/hide")
// fun statusHide() {
// }
//
// @JsonNotification("$/status/report")
// fun statusReport(report: StatusReport) {
// val statusBar = WindowManager.getInstance().getStatusBar(project)
// val widget = statusBar.getWidget("SumnekoBar") as StatusBarWidgetFactory.SumnekoBar?
// if (widget != null) {
// widget.message = report.text
// widget.toolTip = report.tooltip
// }
// }
//}
138 changes: 69 additions & 69 deletions src/main/kotlin/com/cppcxy/ide/lsp/SumnekoLspServerDescriptor.kt
Original file line number Diff line number Diff line change
@@ -1,69 +1,69 @@
@file:Suppress("UnstableApiUsage")

package com.cppcxy.ide.lsp

import com.intellij.execution.configurations.GeneralCommandLine
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.lsp.api.*
import com.intellij.platform.lsp.api.customization.LspCompletionSupport
import com.intellij.platform.lsp.api.customization.LspFormattingSupport
import com.tang.intellij.lua.lang.LuaFileType
import com.tang.intellij.lua.lang.LuaIcons
import org.eclipse.lsp4j.CompletionItem
import org.eclipse.lsp4j.CompletionItemKind
import javax.swing.Icon


class SumnekoLspServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "SumnekoLua") {
override fun isSupportedFile(file: VirtualFile): Boolean {
return file.fileType is LuaFileType
}

override fun createCommandLine(): GeneralCommandLine {
if (!SumnekoAdaptor.canExecute) {
SumnekoAdaptor.addExecutePermission()
}

return GeneralCommandLine().apply {
withCharset(Charsets.UTF_8)
withExePath(SumnekoAdaptor.luaLanguageServer)
addParameter("--locale=${SumnekoAdaptor.locale}")
}
}

override fun createLsp4jClient(handler: LspServerNotificationsHandler): Lsp4jClient {
return SumnekoClient(handler, project)
}

override val lspCompletionSupport = object : LspCompletionSupport() {
override fun getIcon(item: CompletionItem): Icon? {
return when (item.kind) {
CompletionItemKind.Function -> LuaIcons.CLASS_METHOD
CompletionItemKind.Class -> LuaIcons.CLASS
CompletionItemKind.Field -> LuaIcons.CLASS_FIELD
CompletionItemKind.File -> LuaIcons.FILE
CompletionItemKind.Enum -> LuaIcons.ENUM
CompletionItemKind.Snippet -> LuaIcons.SNIPPET
else -> {
super.getIcon(item)
}
}

}
}

override val lspFormattingSupport = object : LspFormattingSupport() {
override fun shouldFormatThisFileExclusivelyByServer(
file: VirtualFile,
ideCanFormatThisFileItself: Boolean,
serverExplicitlyWantsToFormatThisFile: Boolean
): Boolean {
return file.fileType is LuaFileType
}
}
}




//@file:Suppress("UnstableApiUsage")
//
//package com.cppcxy.ide.lsp
//
//import com.intellij.execution.configurations.GeneralCommandLine
//import com.intellij.openapi.project.Project
//import com.intellij.openapi.vfs.VirtualFile
//import com.intellij.platform.lsp.api.*
//import com.intellij.platform.lsp.api.customization.LspCompletionSupport
//import com.intellij.platform.lsp.api.customization.LspFormattingSupport
//import com.tang.intellij.lua.lang.LuaFileType
//import com.tang.intellij.lua.lang.LuaIcons
//import org.eclipse.lsp4j.CompletionItem
//import org.eclipse.lsp4j.CompletionItemKind
//import javax.swing.Icon
//
//
//class SumnekoLspServerDescriptor(project: Project) : ProjectWideLspServerDescriptor(project, "SumnekoLua") {
// override fun isSupportedFile(file: VirtualFile): Boolean {
// return file.fileType is LuaFileType
// }
//
// override fun createCommandLine(): GeneralCommandLine {
// if (!SumnekoAdaptor.canExecute) {
// SumnekoAdaptor.addExecutePermission()
// }
//
// return GeneralCommandLine().apply {
// withCharset(Charsets.UTF_8)
// withExePath(SumnekoAdaptor.luaLanguageServer)
// addParameter("--locale=${SumnekoAdaptor.locale}")
// }
// }
//
// override fun createLsp4jClient(handler: LspServerNotificationsHandler): Lsp4jClient {
// return SumnekoClient(handler, project)
// }
//
// override val lspCompletionSupport = object : LspCompletionSupport() {
// override fun getIcon(item: CompletionItem): Icon? {
// return when (item.kind) {
// CompletionItemKind.Function -> LuaIcons.CLASS_METHOD
// CompletionItemKind.Class -> LuaIcons.CLASS
// CompletionItemKind.Field -> LuaIcons.CLASS_FIELD
// CompletionItemKind.File -> LuaIcons.FILE
// CompletionItemKind.Enum -> LuaIcons.ENUM
// CompletionItemKind.Snippet -> LuaIcons.SNIPPET
// else -> {
// super.getIcon(item)
// }
// }
//
// }
// }
//
// override val lspFormattingSupport = object : LspFormattingSupport() {
// override fun shouldFormatThisFileExclusivelyByServer(
// file: VirtualFile,
// ideCanFormatThisFileItself: Boolean,
// serverExplicitlyWantsToFormatThisFile: Boolean
// ): Boolean {
// return file.fileType is LuaFileType
// }
// }
//}
//
//
//
//
Loading

0 comments on commit b61fbc3

Please sign in to comment.