C/C++ plugin - notifications improvement
This commit is contained in:
parent
2104d7fe5e
commit
b115b5d9f0
4 changed files with 32 additions and 13 deletions
|
|
@ -1,18 +1,13 @@
|
||||||
package org.gregorybednov.clsp
|
package org.gregorybednov.clsp
|
||||||
|
|
||||||
import com.intellij.openapi.application.PluginPathManager
|
|
||||||
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider
|
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider
|
||||||
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider.PluginBundle
|
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider.PluginBundle
|
||||||
import kotlin.io.path.Path
|
import kotlin.io.path.Path
|
||||||
import kotlin.io.path.exists
|
|
||||||
|
|
||||||
class CTextMateBundleProvider : TextMateBundleProvider {
|
class CTextMateBundleProvider : TextMateBundleProvider {
|
||||||
override fun getBundles(): List<PluginBundle> {
|
override fun getBundles(): List<PluginBundle> {
|
||||||
return listOf(
|
return listOf(
|
||||||
PluginBundle("c/c++", Path("/Users/gregorybednov/Downloads/better-cpp-syntax"))
|
PluginBundle("c/c++", Path("/Users/gregorybednov/Downloads/better-cpp-syntax"))
|
||||||
)
|
)
|
||||||
val textmateDir = PluginPathManager.getPluginResource(this::class.java, "textmate") ?: return emptyList()
|
|
||||||
val path = textmateDir.toPath()
|
|
||||||
return listOf(PluginBundle("better-cpp-syntax", path))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2,13 +2,21 @@ package org.gregorybednov.clsp
|
||||||
|
|
||||||
import com.intellij.execution.configurations.GeneralCommandLine
|
import com.intellij.execution.configurations.GeneralCommandLine
|
||||||
import com.intellij.lang.Language
|
import com.intellij.lang.Language
|
||||||
|
import com.intellij.notification.NotificationGroupManager
|
||||||
|
import com.intellij.notification.NotificationType
|
||||||
import com.intellij.openapi.fileTypes.LanguageFileType
|
import com.intellij.openapi.fileTypes.LanguageFileType
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.IconLoader.getIcon
|
import com.intellij.openapi.util.IconLoader.getIcon
|
||||||
|
import com.intellij.util.EnvironmentUtil
|
||||||
import com.redhat.devtools.lsp4ij.LanguageServerFactory
|
import com.redhat.devtools.lsp4ij.LanguageServerFactory
|
||||||
|
import com.redhat.devtools.lsp4ij.LanguageServerManager
|
||||||
import com.redhat.devtools.lsp4ij.server.OSProcessStreamConnectionProvider
|
import com.redhat.devtools.lsp4ij.server.OSProcessStreamConnectionProvider
|
||||||
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider
|
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider
|
||||||
|
import java.io.File
|
||||||
|
import java.nio.file.Paths
|
||||||
import javax.swing.Icon
|
import javax.swing.Icon
|
||||||
|
import kotlin.io.path.pathString
|
||||||
|
|
||||||
|
|
||||||
object CppLanguage : Language("C++") {
|
object CppLanguage : Language("C++") {
|
||||||
private fun readResolve(): Any = CppLanguage
|
private fun readResolve(): Any = CppLanguage
|
||||||
|
|
@ -29,11 +37,26 @@ class CppFileType private constructor() : LanguageFileType(CppLanguage.INSTANCE)
|
||||||
}
|
}
|
||||||
|
|
||||||
class CppLanguageServer(project: Project) : OSProcessStreamConnectionProvider() {
|
class CppLanguageServer(project: Project) : OSProcessStreamConnectionProvider() {
|
||||||
|
private fun findExecutableInPATH(executable: String) =
|
||||||
|
EnvironmentUtil.getEnvironmentMap().values.flatMap { it.split(File.pathSeparator) }
|
||||||
|
.map { File(Paths.get(it, executable).pathString) }.find { it.exists() && it.canExecute() }?.path
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
val clangdPath = findExecutableInPATH("clangd")
|
||||||
|
if (clangdPath.isNullOrEmpty()) {
|
||||||
|
NotificationGroupManager.getInstance().getNotificationGroup("C/C++ notifications").createNotification(
|
||||||
|
"C++ LSP",
|
||||||
|
"LSP server clangd not found. Make sure it is installed properly (and is available in PATH)," +
|
||||||
|
"and restart the IDE.",
|
||||||
|
NotificationType.ERROR).notify(project)
|
||||||
|
LanguageServerManager.getInstance(project).stop("CppLanguageServer")
|
||||||
|
} else {
|
||||||
val commandLine = GeneralCommandLine("clangd")
|
val commandLine = GeneralCommandLine("clangd")
|
||||||
|
commandLine.setWorkDirectory(project.basePath)
|
||||||
super.setCommandLine(commandLine)
|
super.setCommandLine(commandLine)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class CppLanguageServerFactory : LanguageServerFactory {
|
class CppLanguageServerFactory : LanguageServerFactory {
|
||||||
override fun createConnectionProvider(project: Project): StreamConnectionProvider {
|
override fun createConnectionProvider(project: Project): StreamConnectionProvider {
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
<depends>org.jetbrains.plugins.textmate</depends>
|
<depends>org.jetbrains.plugins.textmate</depends>
|
||||||
|
|
||||||
<extensions defaultExtensionNs="com.intellij">
|
<extensions defaultExtensionNs="com.intellij">
|
||||||
|
<notificationGroup id="C/C++ notifications"
|
||||||
|
displayType="BALLOON" />
|
||||||
<fileType
|
<fileType
|
||||||
name="C File"
|
name="C File"
|
||||||
extensions="c"
|
extensions="c"
|
||||||
|
|
@ -18,7 +20,7 @@
|
||||||
fieldName="INSTANCE"
|
fieldName="INSTANCE"
|
||||||
implementationClass="org.gregorybednov.clsp.CFileType"/>
|
implementationClass="org.gregorybednov.clsp.CFileType"/>
|
||||||
|
|
||||||
<!-- FUCKING $YourFileLanguage!!!!! -->
|
<!-- F*** $YourFileLanguage!!!!! I spent f**ing week trying to understand what's wrong!!!-->
|
||||||
<editorHighlighterProvider
|
<editorHighlighterProvider
|
||||||
filetype="C File"
|
filetype="C File"
|
||||||
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateEditorHighlighterProvider" />
|
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateEditorHighlighterProvider" />
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
|
||||||
width="16" height="16" viewBox="0 0 306 344.35" enable-background="new 0 0 306 344.35" xml:space="preserve">
|
width="16" height="16" viewBox="0 0 306 344.35" enable-background="new 0 0 306 344.35" xml:space="preserve">
|
||||||
<path fill="#00599C" d="M302.107,258.262c2.401-4.159,3.893-8.845,3.893-13.053V99.14c0-4.208-1.49-8.893-3.892-13.052L153,172.175
|
<path fill="#00599C" d="M302.107,258.262c2.401-4.159,3.893-8.845,3.893-13.053V99.14c0-4.208-1.49-8.893-3.892-13.052L153,172.175
|
||||||
L302.107,258.262z"/>
|
L302.107,258.262z"/>
|
||||||
|
|
@ -19,7 +18,7 @@
|
||||||
221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "/>
|
221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "/>
|
||||||
</g>
|
</g>
|
||||||
<g>
|
<g>
|
||||||
<polygon fill="#FFFFFF" points="297.5,166.508 286.166,166.508 286.166,155.175 274.834,155.175 274.834,166.508 263.5,166.508
|
<polygon fill="#FFFFFF" points="297.5,166.508 274.834,166.508 263.5,166.508
|
||||||
263.5,177.841 274.834,177.841 274.834,189.175 286.166,189.175 286.166,177.841 297.5,177.841 "/>
|
263.5,177.841 286.166,177.841 297.5,177.841"/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
Loading…
Add table
Add a link
Reference in a new issue