Commit 776207cf authored by Tesla Ice Zhang's avatar Tesla Ice Zhang Committed by Xianwen Chen

Improve IDEA plugin (#363)

* Added:

+ brace matcher
+ highlight for keywords

* Revert license

* Fix nullability bug

* Update version
parent f29210d5
out/
*~
resources/META-INF
\ No newline at end of file
......@@ -13,10 +13,10 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<idea-plugin version="2">
<idea-plugin>
<id>com.dropbox.djinni.ideaplugin</id>
<name>Djinni IDL file support</name>
<version>0.8</version>
<version>0.8.1</version>
<vendor url="https://github.com/dropbox/djinni">Dropbox Djinni Github Project</vendor>
<description><![CDATA[
......@@ -70,6 +70,7 @@
<lang.psiStructureViewFactory language="Djinni" implementationClass="com.dropbox.djinni.ideaplugin.DjinniStructureViewFactory"/>
<lang.formatter language="Djinni" implementationClass="com.dropbox.djinni.ideaplugin.DjinniFormattingModelBuilder"/>
<lang.commenter language="Djinni" implementationClass="com.dropbox.djinni.ideaplugin.DjinniCommenter"/>
<lang.braceMatcher language="Djinni" implementationClass="com.dropbox.djinni.ideaplugin.DjinniBraceMatcher"/>
</extensions>
<application-components>
......
......@@ -25,4 +25,7 @@ public interface DjinniConstMember extends PsiElement {
@NotNull
PsiElement getSemicolon();
@NotNull
PsiElement getConst();
}
......@@ -7,4 +7,10 @@ import com.intellij.psi.PsiElement;
public interface DjinniDerivingParam extends PsiElement {
@Nullable
PsiElement getEqKeyword();
@Nullable
PsiElement getOrd();
}
......@@ -7,4 +7,7 @@ import com.intellij.psi.PsiElement;
public interface DjinniEnumTypeVariant extends PsiElement {
@NotNull
PsiElement getEnum();
}
......@@ -12,6 +12,9 @@ public interface DjinniExternStatement extends PsiNamedElement {
@NotNull
PsiElement getAt();
@NotNull
PsiElement getExtern();
@NotNull
PsiElement getStringLiteral();
......
......@@ -12,6 +12,9 @@ public interface DjinniImportStatement extends PsiNamedElement {
@NotNull
PsiElement getAt();
@NotNull
PsiElement getImport();
@NotNull
PsiElement getStringLiteral();
......
......@@ -28,4 +28,7 @@ public interface DjinniInterfaceMemberFunction extends PsiElement {
@NotNull
PsiElement getIdentifier();
@Nullable
PsiElement getStatic();
}
......@@ -10,4 +10,7 @@ public interface DjinniInterfaceTypeVariant extends PsiElement {
@NotNull
List<DjinniGenerator> getGeneratorList();
@NotNull
PsiElement getInterface();
}
......@@ -10,4 +10,7 @@ public interface DjinniRecordTypeVariant extends PsiElement {
@NotNull
List<DjinniGenerator> getGeneratorList();
@NotNull
PsiElement getRecord();
}
......@@ -40,8 +40,14 @@ public interface DjinniTypes {
IElementType AT = new DjinniTokenType("@");
IElementType COLON = new DjinniTokenType(":");
IElementType COMMENT = new DjinniTokenType("comment");
IElementType CONST = new DjinniTokenType("const");
IElementType ENUM = new DjinniTokenType("enum");
IElementType EQ = new DjinniTokenType("=");
IElementType EQ_KEYWORD = new DjinniTokenType("eq");
IElementType EXTERN = new DjinniTokenType("extern");
IElementType IDENTIFIER = new DjinniTokenType("identifier");
IElementType IMPORT = new DjinniTokenType("import");
IElementType INTERFACE = new DjinniTokenType("interface");
IElementType LEFT_BLOCK_BRACE = new DjinniTokenType("{");
IElementType LEFT_GENERICS_BRACE = new DjinniTokenType("<");
IElementType LEFT_PARAM_BRACE = new DjinniTokenType("(");
......@@ -50,13 +56,16 @@ public interface DjinniTypes {
IElementType MAP = new DjinniTokenType("map");
IElementType NUMBER_LITERAL = new DjinniTokenType("number_literal");
IElementType OPTIONAL = new DjinniTokenType("optional");
IElementType ORD = new DjinniTokenType("ord");
IElementType PLUS = new DjinniTokenType("+");
IElementType RECORD = new DjinniTokenType("record");
IElementType RIGHT_BLOCK_BRACE = new DjinniTokenType("}");
IElementType RIGHT_GENERICS_BRACE = new DjinniTokenType(">");
IElementType RIGHT_PARAM_BRACE = new DjinniTokenType(")");
IElementType SEMICOLON = new DjinniTokenType(";");
IElementType SET = new DjinniTokenType("set");
IElementType SPACE = new DjinniTokenType("space");
IElementType STATIC = new DjinniTokenType("static");
IElementType STRING_LITERAL = new DjinniTokenType("string_literal");
IElementType TEXT = new DjinniTokenType("text");
......
......@@ -17,8 +17,12 @@ public class DjinniBasicTypeImpl extends ASTWrapperPsiElement implements DjinniB
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitBasicType(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitBasicType(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniConstMemberImpl extends ASTWrapperPsiElement implements Djinn
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitConstMember(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitConstMember(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -58,4 +62,10 @@ public class DjinniConstMemberImpl extends ASTWrapperPsiElement implements Djinn
return findNotNullChildByType(SEMICOLON);
}
@Override
@NotNull
public PsiElement getConst() {
return findNotNullChildByType(CONST);
}
}
......@@ -16,8 +16,12 @@ public class DjinniConstNamedValueImpl extends DjinniReferenceImpl implements Dj
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitConstNamedValue(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitConstNamedValue(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniConstRecordMemberElementImpl extends ASTWrapperPsiElement imp
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitConstRecordMemberElement(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitConstRecordMemberElement(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -16,8 +16,12 @@ public class DjinniConstReferenceImpl extends DjinniReferenceImpl implements Dji
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitConstReference(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitConstReference(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniConstValueImpl extends ASTWrapperPsiElement implements Djinni
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitConstValue(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitConstValue(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,9 +17,25 @@ public class DjinniDerivingParamImpl extends ASTWrapperPsiElement implements Dji
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitDerivingParam(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitDerivingParam(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
@Override
@Nullable
public PsiElement getEqKeyword() {
return findChildByType(EQ_KEYWORD);
}
@Override
@Nullable
public PsiElement getOrd() {
return findChildByType(ORD);
}
}
......@@ -17,8 +17,12 @@ public class DjinniDerivingParamListImpl extends ASTWrapperPsiElement implements
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitDerivingParamList(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitDerivingParamList(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniEnumMemberImpl extends ASTWrapperPsiElement implements Djinni
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitEnumMember(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitEnumMember(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,9 +17,19 @@ public class DjinniEnumTypeVariantImpl extends ASTWrapperPsiElement implements D
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitEnumTypeVariant(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitEnumTypeVariant(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
@Override
@NotNull
public PsiElement getEnum() {
return findNotNullChildByType(ENUM);
}
}
......@@ -16,8 +16,12 @@ public class DjinniEnumValueImpl extends DjinniReferenceImpl implements DjinniEn
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitEnumValue(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitEnumValue(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniExternStatementImpl extends DjinniImportStatementBaseImpl imp
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitExternStatement(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitExternStatement(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -28,6 +32,12 @@ public class DjinniExternStatementImpl extends DjinniImportStatementBaseImpl imp
return findNotNullChildByType(AT);
}
@Override
@NotNull
public PsiElement getExtern() {
return findNotNullChildByType(EXTERN);
}
@Override
@NotNull
public PsiElement getStringLiteral() {
......
......@@ -17,8 +17,12 @@ public class DjinniGeneratorImpl extends ASTWrapperPsiElement implements DjinniG
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitGenerator(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitGenerator(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniGenericBasicTypeDualParameterImpl extends ASTWrapperPsiElemen
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitGenericBasicTypeDualParameter(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitGenericBasicTypeDualParameter(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniGenericBasicTypeImpl extends ASTWrapperPsiElement implements
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitGenericBasicType(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitGenericBasicType(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniGenericBasicTypeSingleParameterImpl extends ASTWrapperPsiElem
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitGenericBasicTypeSingleParameter(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitGenericBasicTypeSingleParameter(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniImportStatementImpl extends DjinniImportStatementBaseImpl imp
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitImportStatement(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitImportStatement(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -28,6 +32,12 @@ public class DjinniImportStatementImpl extends DjinniImportStatementBaseImpl imp
return findNotNullChildByType(AT);
}
@Override
@NotNull
public PsiElement getImport() {
return findNotNullChildByType(IMPORT);
}
@Override
@NotNull
public PsiElement getStringLiteral() {
......
......@@ -17,8 +17,12 @@ public class DjinniInterfaceFunctionParamImpl extends ASTWrapperPsiElement imple
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitInterfaceFunctionParam(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitInterfaceFunctionParam(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniInterfaceFunctionParamListImpl extends ASTWrapperPsiElement i
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitInterfaceFunctionParamList(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitInterfaceFunctionParamList(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniInterfaceMemberFunctionImpl extends ASTWrapperPsiElement impl
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitInterfaceMemberFunction(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitInterfaceMemberFunction(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -64,4 +68,10 @@ public class DjinniInterfaceMemberFunctionImpl extends ASTWrapperPsiElement impl
return findNotNullChildByType(IDENTIFIER);
}
@Override
@Nullable
public PsiElement getStatic() {
return findChildByType(STATIC);
}
}
......@@ -17,8 +17,12 @@ public class DjinniInterfaceMemberImpl extends ASTWrapperPsiElement implements D
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitInterfaceMember(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitInterfaceMember(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniInterfaceTypeVariantImpl extends ASTWrapperPsiElement impleme
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitInterfaceTypeVariant(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitInterfaceTypeVariant(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -28,4 +32,10 @@ public class DjinniInterfaceTypeVariantImpl extends ASTWrapperPsiElement impleme
return PsiTreeUtil.getChildrenOfTypeAsList(this, DjinniGenerator.class);
}
@Override
@NotNull
public PsiElement getInterface() {
return findNotNullChildByType(INTERFACE);
}
}
......@@ -17,8 +17,12 @@ public class DjinniPredefinedTypeImpl extends ASTWrapperPsiElement implements Dj
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitPredefinedType(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitPredefinedType(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniRecordMemberImpl extends ASTWrapperPsiElement implements Djin
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitRecordMember(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitRecordMember(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniRecordMemberVariableImpl extends ASTWrapperPsiElement impleme
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitRecordMemberVariable(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitRecordMemberVariable(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -17,8 +17,12 @@ public class DjinniRecordTypeVariantImpl extends ASTWrapperPsiElement implements
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitRecordTypeVariant(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitRecordTypeVariant(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......@@ -28,4 +32,10 @@ public class DjinniRecordTypeVariantImpl extends ASTWrapperPsiElement implements
return PsiTreeUtil.getChildrenOfTypeAsList(this, DjinniGenerator.class);
}
@Override
@NotNull
public PsiElement getRecord() {
return findNotNullChildByType(RECORD);
}
}
......@@ -18,8 +18,12 @@ public class DjinniTypeDefinitionImpl extends DjinniNamedElementImpl implements
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitTypeDefinition(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitTypeDefinition(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -16,8 +16,12 @@ public class DjinniTypeReferenceImpl extends DjinniReferenceImpl implements Djin
super(node);
}
public void accept(@NotNull DjinniVisitor visitor) {
visitor.visitTypeReference(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof DjinniVisitor) ((DjinniVisitor)visitor).visitTypeReference(this);
if (visitor instanceof DjinniVisitor) accept((DjinniVisitor)visitor);
else super.accept(visitor);
}
......
......@@ -46,6 +46,15 @@
space="regexp:\s+"
comment="regexp:#.*"
enum="enum"
record="record"
eq_keyword="eq"
ord="ord"
interface="interface"
static="static"
const="const"
extern="extern"
import="import"
string_literal="regexp:('([^'\\]|\\.)*'|\"([^\"\\]|\\\"|\\\'|\\)*\")"
number_literal="regexp:-?(\d+(\.\d*)?)|(\.\d+)"
identifier="regexp:\p{Alpha}\w*"
......@@ -72,7 +81,7 @@ generator ::= (PLUS 'c') | (PLUS 'j') | (PLUS 'o')
private enumDescription ::= enumTypeVariant LEFT_BLOCK_BRACE enumMember* RIGHT_BLOCK_BRACE
enumTypeVariant ::= 'enum'
enumTypeVariant ::= enum
enumMember ::= enumValue SEMICOLON
......@@ -86,11 +95,11 @@ enumValue ::= identifier {
private recordDescription ::= recordTypeVariant LEFT_BLOCK_BRACE recordMember* RIGHT_BLOCK_BRACE ['deriving' LEFT_PARAM_BRACE derivingParamList RIGHT_PARAM_BRACE]
recordTypeVariant ::= 'record' generator*
recordTypeVariant ::= record generator*
derivingParamList ::= (derivingParam ',' derivingParamList) | derivingParam
derivingParam ::= 'eq' | 'ord'
derivingParam ::= eq_keyword | ord
recordMember ::= constMember | recordMemberVariable
......@@ -100,11 +109,11 @@ recordMemberVariable ::= identifier COLON typeReference SEMICOLON
private interfaceDescription ::= interfaceTypeVariant LEFT_BLOCK_BRACE interfaceMember* RIGHT_BLOCK_BRACE
interfaceTypeVariant ::= 'interface' generator*
interfaceTypeVariant ::= interface generator*
interfaceMember ::= constMember | interfaceMemberFunction
interfaceMemberFunction ::= ['static'] identifier LEFT_PARAM_BRACE interfaceFunctionParamList? RIGHT_PARAM_BRACE [COLON typeReference] SEMICOLON
interfaceMemberFunction ::= [static] identifier LEFT_PARAM_BRACE interfaceFunctionParamList? RIGHT_PARAM_BRACE [COLON typeReference] SEMICOLON
interfaceFunctionParamList ::= (interfaceFunctionParam ',' interfaceFunctionParamList) | interfaceFunctionParam
......@@ -134,7 +143,7 @@ genericBasicTypeDualParameter ::= map LEFT_GENERICS_BRACE typeReference LIST_SEP
//
// const definitions
//
constMember ::= 'const' constNamedValue COLON typeReference EQ constValue SEMICOLON
constMember ::= const constNamedValue COLON typeReference EQ constValue SEMICOLON
constNamedValue ::= identifier {
mixin="com.dropbox.djinni.ideaplugin.psi.impl.DjinniReferenceImpl"
......@@ -159,7 +168,7 @@ constRecordMemberElement ::= identifier EQ constValue
//
// import
//
importStatement ::= AT'import' string_literal {
importStatement ::= AT import string_literal {
mixin="com.dropbox.djinni.ideaplugin.psi.impl.DjinniImportStatementBaseImpl"
implements="com.intellij.psi.PsiNamedElement"
methods=[getName setName getRangeOfPath getPath]
......@@ -168,7 +177,7 @@ importStatement ::= AT'import' string_literal {
//
// extern
//
externStatement ::= AT'extern' string_literal {
externStatement ::= AT extern string_literal {
mixin="com.dropbox.djinni.ideaplugin.psi.impl.DjinniImportStatementBaseImpl"
implements="com.intellij.psi.PsiNamedElement"
methods=[getName setName getRangeOfPath getPath]
......
package com.dropbox.djinni.ideaplugin;
import com.dropbox.djinni.ideaplugin.psi.DjinniTypes;
import com.intellij.lang.BracePair;
import com.intellij.lang.PairedBraceMatcher;
import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DjinniBraceMatcher implements PairedBraceMatcher {
public static @NotNull
BracePair[] PAIRS = new BracePair[]{
new BracePair(DjinniTypes.LEFT_BLOCK_BRACE, DjinniTypes.RIGHT_BLOCK_BRACE, false),
new BracePair(DjinniTypes.LEFT_GENERICS_BRACE, DjinniTypes.RIGHT_GENERICS_BRACE, false),
new BracePair(DjinniTypes.LEFT_PARAM_BRACE, DjinniTypes.RIGHT_PARAM_BRACE, false),
};
@NotNull
@Override
public BracePair[] getPairs() {
return PAIRS;
}
@Override
public boolean isPairedBracesAllowedBeforeType(@NotNull IElementType lbraceType, @Nullable IElementType contextType) {
return true;
}
@Override
public int getCodeConstructStart(PsiFile file, int openingBraceOffset) {
return openingBraceOffset;
}
}
......@@ -33,6 +33,7 @@ public class DjinniColorSettingsPage implements ColorSettingsPage {
private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[] {
new AttributesDescriptor("Comment", DjinniSyntaxHighlighter.COMMENT),
new AttributesDescriptor("Identifier", DjinniSyntaxHighlighter.IDENTIFIER),
new AttributesDescriptor("Keywords", DjinniSyntaxHighlighter.KEYWORDS),
new AttributesDescriptor("String literal", DjinniSyntaxHighlighter.STRING_LITERAL),
new AttributesDescriptor("Number literal", DjinniSyntaxHighlighter.NUMBER_LITERAL),
};
......
......@@ -23,6 +23,7 @@ import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.annotations.NotNull;
import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey;
......@@ -31,14 +32,25 @@ import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAtt
* Created by jaetzold on 7/23/15.
*/
public class DjinniSyntaxHighlighter extends SyntaxHighlighterBase {
public static TokenSet KEYWORD_TOKENS = TokenSet.create(DjinniTypes.EQ_KEYWORD,
DjinniTypes.ENUM,
DjinniTypes.INTERFACE,
DjinniTypes.CONST,
DjinniTypes.EXTERN,
DjinniTypes.IMPORT,
DjinniTypes.ORD,
DjinniTypes.RECORD,
DjinniTypes.STATIC);
public static final TextAttributesKey STRING_LITERAL = createTextAttributesKey("DJINNI_STRING_LITERAL", DefaultLanguageHighlighterColors.STRING);
public static final TextAttributesKey KEYWORDS = createTextAttributesKey("DJINNI_KEYWORDS", DefaultLanguageHighlighterColors.KEYWORD);
public static final TextAttributesKey NUMBER_LITERAL = createTextAttributesKey("DJINNI_NUMBER_LITERAL", DefaultLanguageHighlighterColors.NUMBER);
public static final TextAttributesKey IDENTIFIER = createTextAttributesKey("DJINNI_IDENTIFIER", DefaultLanguageHighlighterColors.IDENTIFIER);
public static final TextAttributesKey COMMENT = createTextAttributesKey("DJINNI_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT);
public static final TextAttributesKey BAD_CHARACTER = createTextAttributesKey("DJINNI_BAD_CHARACTER", HighlighterColors.BAD_CHARACTER);
private static final TextAttributesKey[] STRING_LITERAL_KEYS = new TextAttributesKey[]{STRING_LITERAL};
private static final TextAttributesKey[] KEYWORD_KEYS = new TextAttributesKey[]{KEYWORDS};
private static final TextAttributesKey[] NUMBER_LITERAL_KEYS = new TextAttributesKey[]{NUMBER_LITERAL};
private static final TextAttributesKey[] IDENTIFIER_KEYS = new TextAttributesKey[]{IDENTIFIER};
private static final TextAttributesKey[] COMMENT_KEYS = new TextAttributesKey[]{COMMENT};
......@@ -64,6 +76,8 @@ public class DjinniSyntaxHighlighter extends SyntaxHighlighterBase {
return COMMENT_KEYS;
} else if (tokenType.equals(TokenType.BAD_CHARACTER)) {
return BAD_CHAR_KEYS;
} else if (KEYWORD_TOKENS.contains(tokenType)) {
return KEYWORD_KEYS;
} else {
return EMPTY_KEYS;
}
......
......@@ -17,11 +17,9 @@ package com.dropbox.djinni.ideaplugin;
import com.dropbox.djinni.ideaplugin.psi.*;
import com.dropbox.djinni.ideaplugin.psi.impl.DjinniPsiImplUtil;
import com.intellij.lang.Language;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.search.FileTypeIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
......@@ -30,8 +28,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by jaetzold on 7/27/15.
......@@ -123,7 +119,7 @@ public class DjinniUtil {
}
@NotNull
public static List<PsiElement> findAllExternalTypes(Project project, PsiElement visibilityContext) {
public static List<PsiElement> findAllExternalTypes(Project project, @Nullable PsiElement visibilityContext) {
List<PsiElement> result = new ArrayList<PsiElement>();
List<PsiFile> allExternalFiles = findAllExternalFiles(project, visibilityContext);
......@@ -273,7 +269,7 @@ public class DjinniUtil {
}
@NotNull
public static List<DjinniFile> findAllDjinniFiles(Project project, PsiElement visibilityContext) {
public static List<DjinniFile> findAllDjinniFiles(Project project, @Nullable PsiElement visibilityContext) {
List<DjinniFile> result = new ArrayList<DjinniFile>();
if (visibilityContext == null) {
......@@ -315,7 +311,7 @@ public class DjinniUtil {
}
@NotNull
public static List<PsiFile> findAllExternalFiles(Project project, @NotNull PsiElement visibilityContext) {
public static List<PsiFile> findAllExternalFiles(Project project, @Nullable PsiElement visibilityContext) {
List<PsiFile> result = new ArrayList<PsiFile>();
List<DjinniFile> visibleDjinniFiles = findAllDjinniFiles(project, visibilityContext);
......
......@@ -63,6 +63,12 @@ TEXT=[a-zA-Z_0-9]+
"set" { return SET; }
"optional" { return OPTIONAL; }
"map" { return MAP; }
"enum" { return ENUM; }
"record" { return RECORD; }
"eq" { return EQ_KEYWORD; }
"ord" { return ORD; }
"interface" { return INTERFACE; }
"static" { return STATIC; }
{SPACE} { return SPACE; }
{COMMENT} { return COMMENT; }
......
......@@ -20,6 +20,9 @@ import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* Created by jaetzold on 7/20/15.
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment