Skip to content

Commit

Permalink
[Go] Highlight structure field and map string key followed by : as …
Browse files Browse the repository at this point in the history
…property (similar to JavaScript).
  • Loading branch information
zufuliu committed Mar 30, 2023
1 parent 3172359 commit 89f1a9f
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 27 deletions.
1 change: 1 addition & 0 deletions scintilla/include/SciLexer.h
Original file line number Diff line number Diff line change
Expand Up @@ -1350,6 +1350,7 @@
#define SCE_GO_CONSTANT 21
#define SCE_GO_FUNCTION 22
#define SCE_GO_FUNCTION_DEFINITION 23
#define SCE_GO_KEY 24
#define SCE_DART_DEFAULT 0
#define SCE_DART_COMMENTLINE 1
#define SCE_DART_COMMENTLINEDOC 2
Expand Down
49 changes: 25 additions & 24 deletions scintilla/include/SciLexer.iface
Original file line number Diff line number Diff line change
Expand Up @@ -2700,30 +2700,31 @@ val SCE_GN_BUILTIN_FUNCTION=13
val SCE_GN_FUNCTION=14
# Lexical states for SCLEX_GO
lex Go=SCLEX_GO SCE_GO_
val SCE_GO_DEFAULT=0
val SCE_GO_COMMENTLINE=1
val SCE_GO_TASKMARKERLINE=2
val SCE_GO_COMMENTBLOCK=3
val SCE_GO_TASKMARKER=4
val SCE_GO_CHARACTER=5
val SCE_GO_STRING=6
val SCE_GO_RAW_STRING=7
val SCE_GO_ESCAPECHAR=8
val SCE_GO_FORMAT_SPECIFIER=9
val SCE_GO_NUMBER=10
val SCE_GO_OPERATOR=11
val SCE_GO_OPERATOR2=12
val SCE_GO_LABEL=13
val SCE_GO_IDENTIFIER=14
val SCE_GO_WORD=15
val SCE_GO_WORD2=16
val SCE_GO_BUILTIN_FUNC=17
val SCE_GO_TYPE=18
val SCE_GO_STRUCT=19
val SCE_GO_INTERFACE=20
val SCE_GO_CONSTANT=21
val SCE_GO_FUNCTION=22
val SCE_GO_FUNCTION_DEFINITION=23
val SCE_GO_DEFAULT=
val SCE_GO_COMMENTLINE=
val SCE_GO_TASKMARKERLINE=
val SCE_GO_COMMENTBLOCK=
val SCE_GO_TASKMARKER=
val SCE_GO_CHARACTER=
val SCE_GO_STRING=
val SCE_GO_RAW_STRING=
val SCE_GO_ESCAPECHAR=
val SCE_GO_FORMAT_SPECIFIER=
val SCE_GO_NUMBER=
val SCE_GO_OPERATOR=
val SCE_GO_OPERATOR2=
val SCE_GO_LABEL=
val SCE_GO_IDENTIFIER=
val SCE_GO_WORD=
val SCE_GO_WORD2=
val SCE_GO_BUILTIN_FUNC=
val SCE_GO_TYPE=
val SCE_GO_STRUCT=
val SCE_GO_INTERFACE=
val SCE_GO_CONSTANT=
val SCE_GO_FUNCTION=
val SCE_GO_FUNCTION_DEFINITION=
val SCE_GO_KEY=
# Lexical states for SCLEX_DART
lex Dart=SCLEX_DART SCE_DART_
val SCE_DART_DEFAULT=
Expand Down
18 changes: 15 additions & 3 deletions scintilla/lexers/LexGo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -325,8 +325,12 @@ void ColouriseGoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
} else if (keywordLists[KeywordIndex_Constant].InList(s)) {
sc.ChangeState(SCE_GO_CONSTANT);
} else if (sc.ch == ':') {
if (sc.chNext != '=' && IsJumpLabelPrevASI(chBefore)) {
sc.ChangeState(SCE_GO_LABEL);
if (sc.chNext != '=') {
if (chBefore == ',' || chBefore == '{') {
sc.ChangeState(SCE_GO_KEY);
} else if (IsJumpLabelPrevASI(chBefore)) {
sc.ChangeState(SCE_GO_LABEL);
}
}
} else {
const int chNext = sc.GetLineNextChar();
Expand Down Expand Up @@ -421,7 +425,14 @@ void ColouriseGoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
continue;
}
} else if ((sc.state == SCE_GO_STRING && sc.ch == '\"') || (sc.state == SCE_GO_RAW_STRING && sc.ch == '`')) {
sc.ForwardSetState(SCE_GO_DEFAULT);
sc.Forward();
if (sc.state == SCE_GO_STRING && (chBefore == ',' || chBefore == '{')) {
const int chNext = sc.GetLineNextChar();
if (chNext == ':') {
sc.ChangeState(SCE_GO_KEY);
}
}
sc.SetState(SCE_GO_DEFAULT);
} else if (sc.Match(':', '/', '/') && IsLowerCase(sc.chPrev)) {
insideUrl = true;
} else if (insideUrl && IsInvalidUrlChar(sc.ch)) {
Expand Down Expand Up @@ -463,6 +474,7 @@ void ColouriseGoDoc(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyl
sc.Forward();
} else if (sc.ch == '\"') {
insideUrl = false;
chBefore = chPrevNonWhite;
sc.SetState(SCE_GO_STRING);
} else if (sc.ch == '\'') {
sc.SetState(SCE_GO_CHARACTER);
Expand Down
1 change: 1 addition & 0 deletions src/EditLexers/stlGo.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ static EDITSTYLE Styles_Go[] = {
{ MULTI_STYLE(SCE_GO_TASKMARKER, SCE_GO_TASKMARKERLINE, 0, 0), NP2StyleX_TaskMarker, L"bold; fore:#408080" },
{ MULTI_STYLE(SCE_GO_STRING, SCE_GO_CHARACTER, 0, 0), NP2StyleX_String, L"fore:#008000" },
{ SCE_GO_RAW_STRING, NP2StyleX_RawString, L"fore:#F08000" },
{ SCE_GO_KEY, NP2StyleX_Property, L"fore:#648000" },
{ SCE_GO_ESCAPECHAR, NP2StyleX_EscapeSequence, L"fore:#0080C0" },
{ SCE_GO_FORMAT_SPECIFIER, NP2StyleX_FormatSpecifier, L"fore:#7C5AF3" },
{ SCE_GO_LABEL, NP2StyleX_Label, L"back:#FFC040" },
Expand Down

0 comments on commit 89f1a9f

Please sign in to comment.