Skip to content

Commit 02c5a04

Browse files
committed
feat(autoin-lang): add basic infrastructure for AutoDev input language support #101
AutoDev input language support is a new feature added to the project. The following files have been modified or created to support this new language:
1 parent 7bfe9f0 commit 02c5a04

File tree

11 files changed

+213
-0
lines changed

11 files changed

+213
-0
lines changed

build.gradle.kts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ plugins {
4141
alias(libs.plugins.serialization)
4242
alias(libs.plugins.gradleIntelliJPlugin)
4343

44+
id("org.jetbrains.grammarkit") version "2022.3.2.2"
45+
4446
kotlin("jvm") version "1.8.22"
4547
id("net.saliman.properties") version "1.5.2"
4648
}
@@ -580,6 +582,45 @@ project(":exts:ext-harmonyos") {
580582
}
581583
}
582584

585+
project(":exts:autoin-lang") {
586+
apply {
587+
plugin("org.jetbrains.grammarkit")
588+
}
589+
590+
intellij {
591+
version.set(ideaVersion)
592+
plugins.set(ideaPlugins)
593+
}
594+
dependencies {
595+
implementation(project(":"))
596+
implementation(project(":java"))
597+
}
598+
599+
tasks {
600+
generateLexer {
601+
sourceFile.set(file("src/grammar/DevInLexer.flex"))
602+
// targetDir.set("src/gen/com/feakin/intellij/lexer")
603+
targetOutputDir.set(file("src/gen/cc/unitmesh/language/lexer"))
604+
// targetClass.set("_FeakinLexer")
605+
purgeOldFiles.set(true)
606+
}
607+
608+
generateParser {
609+
sourceFile.set(file("src/grammar/DevInParser.bnf"))
610+
// targetRoot.set("src/gen")
611+
targetRootOutputDir.set(file("src/gen"))
612+
pathToParser.set("cc/unitmesh/language/parser/DevInParser.java")
613+
pathToPsiRoot.set("cc/unitmesh/language/psi")
614+
purgeOldFiles.set(true)
615+
}
616+
617+
withType<KotlinCompile> {
618+
dependsOn(generateLexer, generateParser)
619+
}
620+
}
621+
}
622+
623+
583624
fun File.isPluginJar(): Boolean {
584625
if (!isFile) return false
585626
if (extension != "jar") return false

exts/autoin-lang/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
src/gen
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2+
package org.intellij.sdk.language;
3+
4+
import com.intellij.lexer.FlexLexer;
5+
import com.intellij.psi.tree.IElementType;
6+
import cc.unitmesh.language.psi.DevInTypes;
7+
import com.intellij.psi.TokenType;
8+
9+
%%
10+
11+
%class DevInLexer
12+
%implements FlexLexer
13+
%unicode
14+
%function advance
15+
%type IElementType
16+
%eof{ return;
17+
%eof}
18+
19+
CRLF=\R
20+
WHITE_SPACE=[\ \n\t\f]
21+
FIRST_VALUE_CHARACTER=[^ \n\f\\] | "\\"{CRLF} | "\\".
22+
VALUE_CHARACTER=[^\n\f\\] | "\\"{CRLF} | "\\".
23+
END_OF_LINE_COMMENT=("#"|"!")[^\r\n]*
24+
SEPARATOR=[:=]
25+
KEY_CHARACTER=[^:=\ \n\t\f\\] | "\\ "
26+
27+
%state WAITING_VALUE
28+
29+
%%
30+
31+
({CRLF}|{WHITE_SPACE})+ { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
32+
33+
[^] { return TokenType.BAD_CHARACTER; }
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// should similar to markdown syntax
2+
// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
3+
{
4+
parserClass="cc.unitmesh.language.parser.DevInParser"
5+
6+
extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
7+
8+
psiClassPrefix="DevIn"
9+
psiImplClassSuffix="Impl"
10+
psiPackage="cc.unitmesh.language.psi"
11+
psiImplPackage="cc.unitmesh.language.psi.impl"
12+
13+
elementTypeHolderClass="cc.unitmesh.language.psi.DevInTypes"
14+
elementTypeClass="cc.unitmesh.language.psi.DevInElementType"
15+
tokenTypeClass="cc.unitmesh.language.psi.DevInTokenType"
16+
}
17+
18+
DevInFile ::= item_*
19+
20+
private item_ ::= (CRLF)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cc.unitmesh.language
2+
3+
import cc.unitmesh.devti.AutoDevIcons
4+
import com.intellij.openapi.fileTypes.LanguageFileType
5+
import com.intellij.openapi.vfs.VirtualFile
6+
import javax.swing.Icon
7+
8+
object DevInFileType : LanguageFileType(DevInLanguage) {
9+
override fun getName(): String = "DevIn File"
10+
11+
override fun getIcon(): Icon = AutoDevIcons.AI_COPILOT
12+
13+
override fun getDefaultExtension(): String = "devin"
14+
15+
override fun getCharset(file: VirtualFile, content: ByteArray): String = "UTF-8"
16+
17+
override fun getDescription(): String = "DevIn file"
18+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package cc.unitmesh.language
2+
3+
import com.intellij.lang.Language
4+
5+
object DevInLanguage : Language("DevIn", "text/devin", "text/x-devin", "application/x-devin") {
6+
val INSTANCE: Language = DevInLanguage
7+
8+
override fun isCaseSensitive() = true
9+
override fun getDisplayName() = "DevIn"
10+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package cc.unitmesh.language
2+
3+
import com.intellij.lang.ASTNode
4+
import com.intellij.lang.ParserDefinition
5+
import com.intellij.lang.PsiParser
6+
import com.intellij.lexer.Lexer
7+
import com.intellij.openapi.project.Project
8+
import com.intellij.psi.FileViewProvider
9+
import com.intellij.psi.PsiElement
10+
import com.intellij.psi.PsiFile
11+
import com.intellij.psi.tree.IFileElementType
12+
import com.intellij.psi.tree.TokenSet
13+
import org.jetbrains.annotations.NotNull
14+
15+
16+
internal class DevInParserDefinition : ParserDefinition {
17+
@NotNull
18+
override fun createLexer(project: Project?): Lexer {
19+
TODO()
20+
}
21+
22+
@NotNull
23+
override fun getCommentTokens(): TokenSet = TokenSet.EMPTY
24+
25+
@NotNull
26+
override fun getStringLiteralElements(): TokenSet = TokenSet.EMPTY
27+
28+
@NotNull
29+
override fun createParser(project: Project?): PsiParser {
30+
TODO()
31+
}
32+
33+
@NotNull
34+
override fun getFileNodeType(): IFileElementType {
35+
return FILE
36+
}
37+
38+
@NotNull
39+
override fun createFile(@NotNull viewProvider: FileViewProvider): PsiFile {
40+
TODO()
41+
}
42+
43+
@NotNull
44+
override fun createElement(node: ASTNode?): PsiElement {
45+
TODO()
46+
}
47+
48+
companion object {
49+
val FILE: IFileElementType = IFileElementType(DevInLanguage.INSTANCE)
50+
}
51+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package cc.unitmesh.language
2+
3+
import com.intellij.openapi.fileTypes.SyntaxHighlighter
4+
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory
5+
import com.intellij.openapi.project.Project
6+
import com.intellij.openapi.vfs.VirtualFile
7+
8+
class DevInSyntaxHighlighterFactory : SyntaxHighlighterFactory() {
9+
override fun getSyntaxHighlighter(project: Project?, virtualFile: VirtualFile?): SyntaxHighlighter {
10+
TODO("Not yet implemented")
11+
}
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cc.unitmesh.language.psi
2+
3+
import com.intellij.psi.tree.IElementType
4+
import org.jetbrains.annotations.NonNls
5+
import org.jetbrains.annotations.NotNull
6+
7+
class DevInTokenType(
8+
@NotNull @NonNls debugName: String
9+
): IElementType(debugName, cc.unitmesh.language.DevInLanguage.INSTANCE) {
10+
override fun toString(): String {
11+
return "DevInTokenType." + super.toString()
12+
}
13+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<idea-plugin package="cc.unitmesh.language">
2+
<extensions defaultExtensionNs="com.intellij">
3+
<!-- refs: https://github.com/JetBrains/intellij-sdk-code-samples/blob/main/simple_language_plugin/src/main/resources/META-INF/plugin.xml-->
4+
<fileType name="AutoinFile" implementationClass="cc.unitmesh.language.DevInFileType" fieldName="INSTANCE"
5+
language="AutoIn" extensions="autoin"/>
6+
7+
<lang.parserDefinition language="AutoIn" implementationClass="cc.unitmesh.language.DevInParserDefinition"/>
8+
<lang.syntaxHighlighterFactory language="AutoIn"
9+
implementationClass="cc.unitmesh.language.DevInSyntaxHighlighterFactory"/>
10+
</extensions>
11+
</idea-plugin>

settings.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ include(
2323
// since JetBrains also call `android.jar`, so we rename it to `ext-android`
2424
"exts:ext-android",
2525
"exts:ext-harmonyos",
26+
27+
// the Input Language support for AutoDev
28+
"exts:autoin-lang"
2629
)

0 commit comments

Comments
 (0)