Skip to content

Commit 7e039a5

Browse files
SJrXSteve Ramage
andauthored
feat: Add support for systemd-networkd (netdev,network,link files) (Resolves #90)
Co-authored-by: Steve Ramage <[email protected]>
1 parent 46576c0 commit 7e039a5

File tree

25 files changed

+2478
-130
lines changed

25 files changed

+2478
-130
lines changed

buildSrc/src/main/groovy/GenerateDataFromManPages.groovy

Lines changed: 279 additions & 23 deletions
Large diffs are not rendered by default.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<xsl:stylesheet version="1.0"
3+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4+
xmlns:xi="http://www.w3.org/2001/XInclude">
5+
6+
<!-- Identity template: Copies everything as-is -->
7+
<xsl:template match="@* | node()">
8+
<xsl:copy>
9+
<xsl:apply-templates select="@* | node()"/>
10+
</xsl:copy>
11+
</xsl:template>
12+
13+
<!-- Process XInclude -->
14+
<xsl:template match="xi:include">
15+
<xsl:variable name="file" select="@href"/>
16+
<xsl:apply-templates select="document($file)/*"/>
17+
</xsl:template>
18+
19+
</xsl:stylesheet>

src/main/kotlin/net/sjrx/intellij/plugins/systemdunitfiles/UnitFileIcon.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ object UnitFileIcon {
1717
val SWAP = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/swap.svg", UnitFileIcon::class.java)
1818
val TARGET = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/target.svg", UnitFileIcon::class.java)
1919
val TIMER = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/timer.svg", UnitFileIcon::class.java)
20+
val LINK = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/link.svg", UnitFileIcon::class.java)
21+
val NETDEV = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/netdev.svg", UnitFileIcon::class.java)
22+
val NETWORK = IconLoader.getIcon("/net/sjrx/intellij/plugins/systemdunitfiles/network.svg", UnitFileIcon::class.java)
2023
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.sjrx.intellij.plugins.systemdunitfiles.filetypes
2+
3+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileIcon
4+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileLanguage
5+
import org.jetbrains.annotations.Nls
6+
import javax.swing.Icon
7+
8+
class LinkFileType private constructor() : AbstractUnitFileType(UnitFileLanguage.INSTANCE) {
9+
override fun getName(): String {
10+
return "Network Device Configuration (systemd-networkd)"
11+
}
12+
13+
override fun getDescription(): String {
14+
return displayName
15+
}
16+
17+
override fun getDefaultExtension(): String {
18+
return "link"
19+
}
20+
21+
override fun getIcon(): Icon? {
22+
return UnitFileIcon.LINK
23+
}
24+
25+
override fun getDisplayName(): @Nls String {
26+
return "Network Device Configuration (systemd-networkd)"
27+
}
28+
29+
companion object {
30+
val INSTANCE = LinkFileType()
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.sjrx.intellij.plugins.systemdunitfiles.filetypes
2+
3+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileIcon
4+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileLanguage
5+
import org.jetbrains.annotations.Nls
6+
import javax.swing.Icon
7+
8+
class NetDevFileType private constructor() : AbstractUnitFileType(UnitFileLanguage.INSTANCE) {
9+
override fun getName(): String {
10+
return "Virtual Network Device Configuration (systemd-networkd)"
11+
}
12+
13+
override fun getDescription(): String {
14+
return displayName
15+
}
16+
17+
override fun getDefaultExtension(): String {
18+
return "netdev"
19+
}
20+
21+
override fun getIcon(): Icon? {
22+
return UnitFileIcon.NETDEV
23+
}
24+
25+
override fun getDisplayName(): @Nls String {
26+
return "Virtual Network Device Configuration (systemd-networkd)"
27+
}
28+
29+
companion object {
30+
val INSTANCE = NetDevFileType()
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.sjrx.intellij.plugins.systemdunitfiles.filetypes
2+
3+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileIcon
4+
import net.sjrx.intellij.plugins.systemdunitfiles.UnitFileLanguage
5+
import org.jetbrains.annotations.Nls
6+
import javax.swing.Icon
7+
8+
class NetworkFileType private constructor() : AbstractUnitFileType(UnitFileLanguage.INSTANCE) {
9+
override fun getName(): String {
10+
return "Network Configuration (systemd-networkd)"
11+
}
12+
13+
override fun getDescription(): String {
14+
return displayName
15+
}
16+
17+
override fun getDefaultExtension(): String {
18+
return "network"
19+
}
20+
21+
override fun getIcon(): Icon? {
22+
return UnitFileIcon.NETWORK
23+
}
24+
25+
override fun getDisplayName(): @Nls String {
26+
return "Network Configuration (systemd-networkd)"
27+
}
28+
29+
companion object {
30+
val INSTANCE = NetworkFileType()
31+
}
32+
}

src/main/kotlin/net/sjrx/intellij/plugins/systemdunitfiles/semanticdata/SemanticDataRepository.kt

Lines changed: 288 additions & 62 deletions
Large diffs are not rendered by default.

src/main/resources/META-INF/plugin.xml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@
4848
<fileType name="Target unit configuration for systemd" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.TargetFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="target"/>
4949
<fileType name="Timer unit configuration for systemd" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.TimerFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="timer"/>
5050
<fileType name="Nspawn container systemd container images" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.NSpawnFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="nspawn"/>
51+
<fileType name="Network Device Configuration (systemd-networkd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.LinkFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="link"/>
52+
<fileType name="Virtual Network Device Configuration (systemd-networkd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.NetDevFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="netdev"/>
53+
<fileType name="Network Configuration (systemd-networkd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.filetypes.NetworkFileType" fieldName="INSTANCE" language="Unit File (systemd)" extensions="network"/>
5154

5255
<lang.commenter language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.commenter.UnitFileCommenter"/>
5356
<lang.documentationProvider language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.documentation.UnitFileDocumentationProvider"/>
@@ -58,26 +61,25 @@
5861
<annotator language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.annotators.PropertyIsNotInSectionAnnotator"/>
5962
<annotator language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.annotators.PidFileOptionWarning"/>
6063
<localInspection implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.inspections.UnknownKeyInSectionInspection"
61-
groupPath="Unit files (systemd)"
64+
groupPath="Unit files (systemd)" language="Unit File (systemd)"
6265
shortName="UnknownKeyInSection" displayName="Unknown option in section"
6366
groupName="Validity" enabledByDefault="true" level="WARNING"/>
6467
<localInspection implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.inspections.InvalidValueInspection"
65-
groupPath="Unit files (systemd)"
68+
groupPath="Unit files (systemd)" language="Unit File (systemd)"
6669
shortName="InvalidValue" displayName="Invalid value for option"
6770
groupName="Validity" enabledByDefault="true" level="WARNING"/>
6871
<localInspection implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.inspections.DeprecatedOptionsInspection"
69-
groupPath="Unit files (systemd)"
72+
groupPath="Unit files (systemd)" language="Unit File (systemd)"
7073
shortName="DeprecatedKey" displayName="Deprecated options"
7174
groupName="Deprecation" enabledByDefault="true" level="WARNING"/>
7275
<localInspection implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.inspections.ShellSyntaxInExecDirectiveInspection"
73-
groupPath="Unit files (systemd)"
76+
groupPath="Unit files (systemd)" language="Unit File (systemd)"
7477
shortName="ShellSyntaxInExecDirective" displayName="Unsupported shell meta-characters"
7578
groupName="Validity" enabledByDefault="true" level="WARNING"/>
7679
<localInspection implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.inspections.MissingRequiredKeyInspection"
77-
groupPath="Unit files (systemd)"
80+
groupPath="Unit files (systemd)" language="Unit File (systemd)"
7881
shortName="MissingRequiredKey" displayName="Missing required key"
7982
groupName="Validity" enabledByDefault="true" level="ERROR"/>
80-
8183
<completion.contributor language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.completion.UnitFileKeyCompletionContributor"/>
8284
<completion.contributor language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.completion.UnitFileValueCompletionContributor"/>
8385
<completion.contributor language="Unit File (systemd)" implementationClass="net.sjrx.intellij.plugins.systemdunitfiles.completion.UnitFileSectionCompletionContributor"/>
Lines changed: 187 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)