C/C++ plugin initial release

This commit is contained in:
Gregory Bednov 2025-01-05 00:01:55 +03:00
commit 2104d7fe5e
22 changed files with 1128 additions and 0 deletions

View file

@ -0,0 +1,18 @@
package org.gregorybednov.clsp
import com.intellij.openapi.application.PluginPathManager
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider
import org.jetbrains.plugins.textmate.api.TextMateBundleProvider.PluginBundle
import kotlin.io.path.Path
import kotlin.io.path.exists
class CTextMateBundleProvider : TextMateBundleProvider {
override fun getBundles(): List<PluginBundle> {
return listOf(
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))
}
}

View file

@ -0,0 +1,42 @@
package org.gregorybednov.clsp
import com.intellij.execution.configurations.GeneralCommandLine
import com.intellij.lang.Language
import com.intellij.openapi.fileTypes.LanguageFileType
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.IconLoader.getIcon
import com.redhat.devtools.lsp4ij.LanguageServerFactory
import com.redhat.devtools.lsp4ij.server.OSProcessStreamConnectionProvider
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider
import javax.swing.Icon
object CppLanguage : Language("C++") {
private fun readResolve(): Any = CppLanguage
val INSTANCE: CppLanguage = CppLanguage
}
object CppIcon {
val FILE: Icon = getIcon("/icons/cpplogo.svg", CppIcon::class.java)
}
class CppFileType private constructor() : LanguageFileType(CppLanguage.INSTANCE) {
override fun getName(): String { return "C++ File" }
override fun getDescription(): String { return "C++ language file" }
override fun getDefaultExtension(): String { return "cpp" }
override fun getIcon(): Icon { return CppIcon.FILE
}
companion object { val INSTANCE: CppFileType = CppFileType() }
}
class CppLanguageServer(project: Project) : OSProcessStreamConnectionProvider() {
init {
val commandLine = GeneralCommandLine("clangd")
super.setCommandLine(commandLine)
}
}
class CppLanguageServerFactory : LanguageServerFactory {
override fun createConnectionProvider(project: Project): StreamConnectionProvider {
return CppLanguageServer(project)
}
}

View file

@ -0,0 +1,70 @@
<idea-plugin>
<id>org.gregorybednov.clsp</id>
<name>C±± LSP</name>
<vendor>Gregory Bednov</vendor>
<description><![CDATA[
C±± LSP is a plugin for C/C++ language syntax highlighting
]]></description>
<depends>com.intellij.modules.platform</depends>
<depends>com.redhat.devtools.lsp4ij</depends>
<depends>org.jetbrains.plugins.textmate</depends>
<extensions defaultExtensionNs="com.intellij">
<fileType
name="C File"
extensions="c"
language="C"
fieldName="INSTANCE"
implementationClass="org.gregorybednov.clsp.CFileType"/>
<!-- FUCKING $YourFileLanguage!!!!! -->
<editorHighlighterProvider
filetype="C File"
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateEditorHighlighterProvider" />
<lang.syntaxHighlighterFactory
language="C"
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateSyntaxHighlighterFactory" />
<fileType
name="C++ File"
extensions="cpp"
language="C++"
fieldName="INSTANCE"
implementationClass="org.gregorybednov.clsp.CppFileType"/>
<editorHighlighterProvider
filetype="C++ File"
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateEditorHighlighterProvider" />
<lang.syntaxHighlighterFactory
language="C++"
implementationClass="org.jetbrains.plugins.textmate.language.syntax.highlighting.TextMateSyntaxHighlighterFactory" />
<textmate.bundleProvider implementation="org.gregorybednov.clsp.CTextMateBundleProvider"/>
</extensions>
<extensions defaultExtensionNs="com.redhat.devtools.lsp4ij">
<languageMapping languageId="c" language="C" serverId="CLanguageServer"/>
<server id="CLanguageServer"
name="CLangD"
factoryClass="org.gregorybednov.clsp.CLanguageServerFactory">
<description><![CDATA[
Plugin for C/C++ languages using LSP via clangd.
]]>
</description>
</server>
<languageMapping languageId="cpp" language="C++" serverId="CppLanguageServer"/>
<server id="CppLanguageServer"
name="C++LangD"
factoryClass="org.gregorybednov.clsp.CppLanguageServerFactory">
<description><![CDATA[
Plugin for C/C++ languages using LSP via clangd.
]]>
</description>
</server>
</extensions>
</idea-plugin>

View file

@ -0,0 +1,36 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 38.000089 42.000031"
version="1.1"
id="svg10"
>
<defs
id="defs14" />
<path
fill="#283593"
fill-rule="evenodd"
d="m 17.903,0.28628166 c 0.679,-0.381 1.515,-0.381 2.193,0 C 23.451,2.1692817 33.547,7.8372817 36.903,9.7202817 37.582,10.100282 38,10.804282 38,11.566282 c 0,3.766 0,15.101 0,18.867 0,0.762 -0.418,1.466 -1.097,1.847 -3.355,1.883 -13.451,7.551 -16.807,9.434 -0.679,0.381 -1.515,0.381 -2.193,0 -3.355,-1.883 -13.451,-7.551 -16.807,-9.434 -0.678,-0.381 -1.096,-1.084 -1.096,-1.846 0,-3.766 0,-15.101 0,-18.867 0,-0.762 0.418,-1.466 1.097,-1.8470003 3.354,-1.883 13.452,-7.551 16.806,-9.43400004 z"
clip-rule="evenodd"
id="path2"
style="fill:#004482;fill-opacity:1" />
<path
fill="#5c6bc0"
fill-rule="evenodd"
d="m 0.304,31.404282 c -0.266,-0.356 -0.304,-0.694 -0.304,-1.149 0,-3.744 0,-15.014 0,-18.759 0,-0.758 0.417,-1.458 1.094,-1.8360003 3.343,-1.872 13.405,-7.507 16.748,-9.38000004 0.677,-0.379 1.594,-0.371 2.271,0.008 3.343,1.87200004 13.371,7.45900004 16.714,9.33100004 0.27,0.152 0.476,0.335 0.66,0.5760003 z"
clip-rule="evenodd"
id="path4"
style="fill:#659ad2;fill-opacity:1" />
<path
fill="#ffffff"
fill-rule="evenodd"
d="m 19,7.0002817 c 7.727,0 14,6.2730003 14,14.0000003 0,7.727 -6.273,14 -14,14 -7.727,0 -14,-6.273 -14,-14 0,-7.727 6.273,-14.0000003 14,-14.0000003 z m 0,7.0000003 c 3.863,0 7,3.136 7,7 0,3.863 -3.137,7 -7,7 -3.863,0 -7,-3.137 -7,-7 0,-3.864 3.136,-7 7,-7 z"
clip-rule="evenodd"
id="path6" />
<path
fill="#3949ab"
fill-rule="evenodd"
d="m 37.485,10.205282 c 0.516,0.483 0.506,1.211 0.506,1.784 0,3.795 -0.032,14.589 0.009,18.384 0.004,0.396 -0.127,0.813 -0.323,1.127 l -19.084,-10.5 z"
clip-rule="evenodd"
id="path8"
style="fill:#00599c;fill-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,25 @@
<?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">
<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"
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
L302.107,258.262z"/>
<path fill="#004482" d="M166.25,341.193l126.5-73.034c3.644-2.104,6.956-5.737,9.357-9.897L153,172.175L3.893,258.263
c2.401,4.159,5.714,7.793,9.357,9.896l126.5,73.034C147.037,345.401,158.963,345.401,166.25,341.193z"/>
<path fill="#659AD2" d="M302.108,86.087c-2.402-4.16-5.715-7.793-9.358-9.897L166.25,3.156c-7.287-4.208-19.213-4.208-26.5,0
L13.25,76.19C5.962,80.397,0,90.725,0,99.14v146.069c0,4.208,1.491,8.894,3.893,13.053L153,172.175L302.108,86.087z"/>
<g>
<path fill="#FFFFFF" d="M153,274.175c-56.243,0-102-45.757-102-102s45.757-102,102-102c36.292,0,70.139,19.53,88.331,50.968
l-44.143,25.544c-9.105-15.736-26.038-25.512-44.188-25.512c-28.122,0-51,22.878-51,51c0,28.121,22.878,51,51,51
c18.152,0,35.085-9.776,44.191-25.515l44.143,25.543C223.142,254.644,189.294,274.175,153,274.175z"/>
</g>
<g>
<polygon fill="#FFFFFF" points="255,166.508 243.666,166.508 243.666,155.175 232.334,155.175 232.334,166.508 221,166.508
221,177.841 232.334,177.841 232.334,189.175 243.666,189.175 243.666,177.841 255,177.841 "/>
</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
263.5,177.841 274.834,177.841 274.834,189.175 286.166,189.175 286.166,177.841 297.5,177.841 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB