Skip to content

Commit e37e3ce

Browse files
committed
Merge commit 'c300f5aa740710026527cf5708eb373ed3f78339'
2 parents df1fc80 + c300f5a commit e37e3ce

File tree

3 files changed

+34
-25
lines changed

3 files changed

+34
-25
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
## 0.4.0 (-)
1+
## 0.4.1 (July 5, 2022)
2+
- Fix a bug when using custom keywords for semantic highlighting
3+
4+
## 0.4.0 (July 1, 2022)
25
- Function call hierarchy
36
- Formatting provider
47
- Prepare rename provider for better rename experience

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "macro-executor",
33
"displayName": "Macro Executor Language",
44
"description": "Fanuc Macro-Executor Programming Language",
5-
"version": "0.4.0",
5+
"version": "0.4.1",
66
"author": "iSorp",
77
"publisher": "iSorp",
88
"license": "MIT",

server/src/macroLanguageService/services/macroSemantic.ts

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@ export class MacroSemantic {
1515
private builder:SemanticTokensBuilder;
1616
private document: TextDocument;
1717
private customKeywords:CustomKeywords[];
18-
19-
constructor() {}
18+
private prevLine = -1;
19+
private prevChar = -1;
2020

21+
constructor() {}
22+
2123
public doSemanticHighlighting(document: TextDocument, macroFile: nodes.MacroFile, settings: LanguageSettings, range:Range | undefined) : SemanticTokens {
2224
this.builder = new SemanticTokensBuilder();
2325
this.document = document;
2426
this.customKeywords = settings.keywords;
27+
this.prevLine = -1;
28+
this.prevChar = -1;
2529

2630
try {
2731
let start:number;
@@ -39,64 +43,62 @@ export class MacroSemantic {
3943
return false;
4044
}
4145
}
42-
46+
4347
if (candidate.symbol) {
4448
const symbol = candidate.symbol;
4549
if (symbol.type === nodes.NodeType.Symbol) {
4650
switch (symbol.valueType) {
4751
case nodes.NodeType.Numeric:
4852
if (symbol.attrib === nodes.ValueAttribute.Constant) {
49-
this.build(symbol, candidate.type, TokenTypes.constant);
53+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.constant);
5054
}
5155
else if (symbol.attrib !== nodes.ValueAttribute.Program) {
52-
this.build(symbol, candidate.type, TokenTypes.number);
56+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.number);
5357
}
5458
break;
5559
case nodes.NodeType.Code:
56-
this.build(symbol, symbol.type, TokenTypes.code);
57-
break;
60+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.code);
61+
break;
5862
case nodes.NodeType.Parameter:
59-
this.build(symbol, symbol.type, TokenTypes.parameter);
63+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.parameter);
6064
break;
6165
case nodes.NodeType.Statement:
6266
if (symbol.attrib === nodes.ValueAttribute.GCode || symbol.attrib === nodes.ValueAttribute.MCode) {
63-
this.build(symbol, symbol.type, TokenTypes.code);
67+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.code);
6468
}
6569
else {
66-
this.build(symbol, symbol.type, TokenTypes.parameter);
70+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.parameter);
6771
}
6872
break;
6973
case nodes.NodeType.Address:
7074
if (symbol.attrib === nodes.ValueAttribute.GCode || symbol.attrib === nodes.ValueAttribute.MCode) {
71-
this.build(symbol, symbol.type, TokenTypes.code);
75+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.code);
7276
}
7377
else if (symbol.attrib === nodes.ValueAttribute.Parameter) {
74-
this.build(symbol, symbol.type, TokenTypes.parameter);
78+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.parameter);
7579
}
7680
else {
77-
this.build(symbol, symbol.type, TokenTypes.address);
81+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.address);
7882
}
7983
break;
8084
case nodes.NodeType.SequenceNumber:
81-
this.build(symbol, symbol.type, TokenTypes.label);
82-
break;
85+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.label);
86+
break;
8387
case nodes.NodeType.Variable:
84-
this.build(symbol, symbol.type, TokenTypes.macrovar);
85-
break;
86-
default:
87-
this.build(symbol, symbol.type);
88+
this.build(symbol, nodes.NodeType.Symbol, TokenTypes.macrovar);
89+
break;
8890
}
8991
}
9092
else if (symbol.type === nodes.NodeType.Label) {
91-
this.build(candidate, candidate.type, TokenTypes.label);
93+
this.build(symbol, nodes.NodeType.Label, TokenTypes.label);
9294
}
9395
}
9496
else if (!candidate.symbol) {
9597
if (candidate.type === nodes.NodeType.Variable) {
96-
this.build((<nodes.Variable>candidate)?.body, candidate.type);
98+
this.build((<nodes.Variable>candidate)?.body, nodes.NodeType.Variable);
9799
}
98100
else if (candidate.type === nodes.NodeType.Code) {
99-
this.build(candidate, candidate.type);
101+
this.build(candidate, nodes.NodeType.Code);
100102
}
101103
}
102104
return true;
@@ -124,7 +126,11 @@ export class MacroSemantic {
124126

125127
if (token) {
126128
if (node.type === nodes.NodeType.Symbol || node.type === nodes.NodeType.Label) {
127-
this.builder.push(pos.line, pos.character, node.getText().length, token, 0);
129+
if (this.prevLine !== pos.line || this.prevChar !== pos.character) {
130+
this.prevLine = pos.line;
131+
this.prevChar = pos.character;
132+
this.builder.push(pos.line, pos.character, node.getText().length, token, 0);
133+
}
128134
}
129135
else {
130136
this.builder.push(pos.line, pos.character, node.length, token, 0);

0 commit comments

Comments
 (0)