Skip to content

Commit eb2a252

Browse files
committed
Reapply "feat: Support COBOL functions (#2444)"
This reverts commit 092e919.
1 parent 092e919 commit eb2a252

File tree

64 files changed

+1801
-389
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1801
-389
lines changed

clients/cobol-lsp-vscode-extension/package-lock.json

+453-148
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

clients/cobol-lsp-vscode-extension/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@
643643
"@types/mocha": "^9.1.1",
644644
"@types/node": "^14.18.29",
645645
"@types/vscode": "^1.71.0",
646-
"@vscode/test-electron": "2.3.8",
646+
"@vscode/test-electron": "^2.4.0",
647647
"@vscode/test-web": "^0.0.56",
648648
"@vscode/vsce": "2.19.0",
649649
"assert": "^2.1.0",

clients/cobol-lsp-vscode-extension/src/test/suite/lsp.spec.copybooks.test.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ suite("Integration Test Suite: Copybooks", function () {
4444
.slow(1000);
4545

4646
test("TC174657: Copybook - not exist: no syntax ok message", async () => {
47-
await helper.showDocument("USERC1F.cbl");
48-
const editor = helper.get_editor("USERC1F.cbl");
47+
const editor = await helper.showDocument("USERC1F.cbl");
4948
await helper.waitForDiagnostics(editor.document.uri);
5049
const diagnostics = vscode.languages.getDiagnostics(editor.document.uri);
5150
assert.strictEqual(

clients/cobol-lsp-vscode-extension/src/test/suite/lsp.spec.test.ts

+4-18
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,10 @@ suite("Integration Test Suite", function () {
3434
const editor = helper.get_editor("USER2.cbl");
3535
await helper.waitForDiagnostics(editor.document.uri);
3636
const diagnostics = vscode.languages.getDiagnostics(editor.document.uri);
37-
assert.strictEqual(diagnostics.length, 2);
38-
assert.ok(diagnostics.length === 2);
37+
assert.strictEqual(diagnostics.length, 1);
3938
const d0 = diagnostics[0];
40-
const d1 = diagnostics[1];
41-
assert.strictEqual(
42-
d0.message,
43-
"Missing token PROGRAM-ID at programIdParagraph",
44-
);
45-
helper.assertRangeIsEqual(d0.range, range(pos(13, 30), pos(13, 31)));
46-
assert.strictEqual(d0.severity, diagnostics[1].severity);
47-
assert.strictEqual(
48-
d0.severity,
49-
vscode.DiagnosticSeverity.Error,
50-
"No syntax errors detected in USER2.cbl",
51-
);
52-
53-
assert.strictEqual(d1.message, "Syntax error on 'HELLO-WORLD'");
54-
helper.assertRangeIsEqual(d1.range, range(pos(14, 20), pos(14, 31)));
39+
assert.strictEqual(d0.message, "Syntax error on 'Program1-id'");
40+
helper.assertRangeIsEqual(d0.range, range(pos(14, 7), pos(14, 18)));
5541
});
5642

5743
test("TC152050, TC152053: Error case - file has semantic errors and are marked with detailed hints", async () => {
@@ -557,7 +543,7 @@ suite("Integration Test Suite", function () {
557543
await helper.showDocument(copybookPath);
558544

559545
await helper.waitFor(
560-
() => vscode.languages.getDiagnostics(copybookUri).length === 2,
546+
() => vscode.languages.getDiagnostics(copybookUri).length === 1,
561547
);
562548
copyDiagnostics = vscode.languages.getDiagnostics(copybookUri);
563549
assert.strictEqual(

clients/cobol-lsp-vscode-extension/src/test/suite/testHelper.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export async function closeActiveEditor() {
9090
await vscode.commands.executeCommand("undo");
9191
await sleep(100);
9292
}
93-
await vscode.languages.setTextDocumentLanguage(doc.document, "json");
93+
await vscode.languages.setTextDocumentLanguage(doc.document, "plaintext");
9494
await vscode.commands.executeCommand("workbench.action.closeActiveEditor");
9595
await sleep(100);
9696
}

clients/cobol-lsp-vscode-extension/syntaxes/COBOL.tmLanguage.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
}
165165
},
166166
"cobol-general-keyword": {
167-
"match": "(?<![\\-\\w])(?i:ABD|ABORT|ACCEPT|ACCESS|ADATA|ADD|CBLCARD|COBOL2|COBOL3|CPSM|DLI|EDF|EXCI|FEPI|NATLANG|NOCBLCARD|NOCPSM|NODEBUG|NOEDF|NOFEPI|NOLENGTH|NOLINKAGE|NOOPTIONS|NOSPIE|OPTIONS|SP|SPIE|SYSEIB|ADDRESS|ADEXIT|ADV|ADVANCING|ADX|AFP|AFTER|ALIAS|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALPHNUM|ALSO|ALTER|ALTERNATE|ANA|ANALIST|AND|ANSI|ANY|APOST|APPLY|AR|ARCH|ARE|AREA|AREAS|ARITH|ASCENDING|ASCII|ASSIGN|ASSOCIATED_DATA|ASSOCIATED_DATA_LENGTH|AT|AUTHOR|AUTO|AVG|AWO|BEFORE|BIN|BINARY|BLANK|BLOCK|BLOCK0|BOTH|BOTTOM|BUF|BUFSIZE|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CBL|CCSVERSION|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CICS|CLASS|CLEANSIGN|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|CO|CODEPAGE|CODE-SET|COLLATING|COLS|COMMA|COMMITMENT|COMMON|COMP|COMPAT|COMPILE|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONVERTING|COPYLOC|COPYRIGHT|CORR|CORRESPONDING|COUNT|CP|CPLC|CPYR|CR|CRUNCH|CS|CURR|CURRENCY|CYCLE|DACO-CONTROL|DATA|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DB|DBCS|DEBUG|DEBUGGING|DEC|DECIMAL-POINT|DECK|DECLARATIVES|DEF|DEFAULT|DEFAULT-DISPLAY|DEFINE|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESIGNER|DFHRESP|DFHVALUE|DIAGTRUNC|DISABLE|DISK|DISPLAY|DISPLAY-1|DISPSIGN|DIVIDE|DIVISION|DLL|DN|DOWN|DS|DSN|DSNAME|DTR|DU|DUMP|DUPLICATES|DWARF|DYN|DYNAM|DYNAMIC|EBCDIC|EGCS|EGI|EJPD|ELSE|EMA|EMI|EN|ENABLE|ENCODING|END|ENDP|ENDPERIOD|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|END-XML|ENGLISH|ENTRY|ENVIRONMENT|EOC|EODS|EOP|EQUAL|ERROR|ESCAPE|ESI|EVALUATE|EVENP|EVENPACK|EVERY|EX|EXCEPTION|EXCLUSIVE|EXEC|EXHIBIT|EXIT|EXP|EXPORTALL|EXTEND|EXTERNAL|FALSE|FASTSRT|FD|FIELD|FILED|FILE|FILE-CONTROL|FILL|FILLER|FIND|FIRST|FLAG|FLAGSTD|FNC|FOOTING|FOR|FORCENUMCMP|FROM|FSRT|FULL|FUNCTION|FUNCTION-POINTER|GENERATE|GET|GIVING|GLOBAL|GO|GOBACK|GREATER|GROUP-USAGE|HEX|HGPR|HIGH-VALUE|HIGH-VALUES|IC|ID|IDENTIFICATION|IF|IMPLICIT|IN|INDEX|INDEXED|INEXIT|INFO|INITCHECK|INITIAL|INITIALIZE|INITIATE|INL|INLINE|INPUT|INPUT-OUTPUT|INSERT|INSPECT|INSTALLATION|INTDATE|INTEGER|INTO|INVALID|INVD|INVDATA|INVMPSZ|INVPARTN|INVREQ|INX|IS|I-O|I-O-CONTROL|JA|JAPANESE|JP|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANG|LANGUAGE|LAST|LAX|LAXPERF|LAXREDEF|LAYOUT|LC|LEADING|LEFT|LENGTH|LESS|LIBEXIT|LIBRARY|LIBX|LILIAN|LIMIT|LINAGE|LINAGE-COUNTER|LINE|LINECOUNT|LINES|LINKAGE|LIST|LM|LOCAL|LOCAL-STORAGE|LOCK|LONGMIXED|LONGUPPER|LOW-VALUE|LOW-VALUES|LP|LU|LXPRF|LXRDF|MAP|MAPFAIL|MATCH|MAX|MAXPCF|MD|MDECK|MEMORY|MERGE|MESSAGE|MIG|MIXED|MMDDYYYY|MODE|MODULES|MOVE|MSG|MSGEXIT|MSGX|MULTIPLE|MULTIPLY|NAME|NAMED|NAT|NATIONAL|NATIONAL-EDITED|NATIVE|NC|ND|NEGATIVE|NETWORK|NEXT|NO|NO-POS|NOADATA|NOADEXIT|NOADV|NOADX|NOALIAS|NOALPHNUM|NOAWO|NOBIN|NOBLOCK0|NOC|NOCICS|NOCLEANSIGN|NOCOMPILE|NOCOPYLOC|NOCOPYRIGHT|NOCPLC|NOCPYR|NOCS|NOCURR|NOCURRENCY|NOD|NODBCS|NODECK|NODEF|NODEFINE|NODIAGTRUNC|NODLL|NODSNAME|NODTR|NODU|NODUMP|NODWARF|NODYN|NODYNAM|NOEJPD|NOENDPERIOD|NOEVENPACK|NOEX|NOEXIT|NOEXP|NOEXPORTALL|NOF|NOFASTSRT|NOFLAG|NOFLAGSTD|NOFNC|NOFORCENUMCMP|NOFSRT|NOIC|NOINEXIT|NOINITCHECK|NOINITIAL|NOINL|NOINLINE|NOINVD|NOINVDATA|NOINX|NOLAXPERF|NOLAXREDEF|NOLIBEXIT|NOLIBX|NOLIST|NOMAP|NOMD|NOMDECK|NOMSGEXIT|NOMSGX|NONAME|NONC|NONUM|NONUMBER|NONUMCHECK|NOOBJ|NOOBJECT|NOOFF|NOOFFSET|NOOMITODOMIN|NOPAC|NOPARMCHECK|NOPC|NOPFD|NOPRESERVE|NOPRTEXIT|NOPRTX|NORENT|NORULES|NOS|NOSEP|NOSEPARATE|NOSEQ|NOSEQUENCE|NOSERV|NOSERVICE|NOSLACKBYTES|NOSO|NOSOURCE|NOSQL|NOSQLC|NOSQLCCSID|NOSQLIMS|NOSSR|NOSSRANGE|NOSTGOPT|NOSUPP|NOSUPPRESS|NOT|NOTERM|NOTERMINAL|NOTEST|NOTHREAD|NOTRUNCBIN|NOUNRA|NOUNREFALL|NOUNREFSOURCE|NOUNRS|NOVBREF|NOVOLATILE|NOWD|NOWORD|NOX|NOXREF|NOZC|NOZLEN|NOZON|NOZONECHECK|NOZWB|NS|NSYMBOL|NULL|NULLS|NUM|NUMBER|NUMCHECK|NUMERIC|NUMERIC-EDITED|NUMPROC|OBJ|OBJECT|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OFFSET|OMITODOMIN|OMITTED|ON|OOM|OPEN|OPT|OPTFILE|OPTIMIZE|OPTIONAL|OR|ORDER|ORDERLY|ORGANIZATION|OTHER|OUT|OUTDD|OUTPUT|OVERFLOW|OWN|OWNER|PAC|PACKED-DECIMAL|PADDING|PAGE|PARAGRAPH|PARMCHECK|PARSE|PARTNFAIL|PASSWORD|PATH|PC|PERFORM|PFD|PGMN|PGMNAME|PIC|PICTURE|POINTER|POINTER-32|PORT|POSITION|POSITIVE|PRESERVE|PRINTER|PROCEDURE|PROCEDURES|PROCEDURE-POINTER|PROCEED|PROCESS|PROCESSING|PROGRAM|PROGRAM-ID|PRTEXIT|PRTX|PURGE|QUA|QUALIFY|QUOTE|QUOTES|RANDOM|RDATT|READ|READER|READY|RECEIVE|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REFERENCE|REFERENCES|RELATIVE|RELEASE|RELOAD|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|RENT|REPLACE|REPLACING|REPORT|REPORTS|RERUN|RESERVE|RESET|RESUME|RETURN|RETURNING|REVERSED|REWIND|REWRITE|RIGHT|RMODE|ROUNDED|RULES|RUN|SAME|SAVE|SD|SEARCH|SECTION|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEP|SEPARATE|SEQ|SEQUENCE|SEQUENTIAL|SERV|SERVICE|SET|SHORT|SIGN|SIZE|SLACKBYTES|SLCKB|SN|SO|SORT|SORT-MERGE|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|SQL|SQLC|SQLCCSID|SQLIMS|SSR|SSRANGE|STANDARD|STANDARD-1|STANDARD-2|START|STATS|STATUS|STD|STGOPT|STOP|STRICT|STRING|SUBTRACT|SUCC|SUM|SUPP|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|SYSLIB|TALLYING|TAPE|TABLE|TERM|TERMINAL|TERMINATE|TEST|THAN|THEN|THREAD|THROUGH|THRU|TIME|TIMER|TIMES|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRACE|TRAILING|TRUE|TRUNC|TRUNCBIN|TUNE|UE|UENGLISH|UNEXPIN|UNIT|UNREF|UNSTRING|UNTIL|UP|UPON|UPPER|USAGE|USE|USING|UTF-8|VALIDATING|VALUE|VALUES|VARYING|VBREF|VIRTUAL|VLR|VOLATILE|VOLSER|VS|VSAMOPENFS|WAIT|WARNING|WD|WHEN|WHEN-COMPILED|WITH|WORD|WORDS|WORKING-STORAGE|WRITE|WRITE-ONLY|XML|XMLPARSE|XMLSS|XOPTS|XP|XREF|YEAR|YYYYDDD|YYYYMMDD|ZC|ZD|ZERO|ZEROES|ZEROS|ZLEN|ZON|ZONECHECK|ZONEDATA|ZWB|IS|INTRINSIC|REPOSITORY|EPILOG|NOCMPR2|NOTRIG|CPP|DATEPROC|DP|GDS|GRAPHIC|KA|LEASM|LIB|LIN|MARGINS|NODE|NODATEPROC|NODP|NOEPILOG|NOFLAGMIG|NOGRAPHIC|NOLIB|NOOPSEQUENCE|NOOPT|NOOPTIMIZE|NOP|NOPROLOG|NOSTDTRUNC|NSEQ|OP|OPMARGINS|OPSEQUENCE|PROLOG|RES|SZ|TRIG|YEARWINDOW|YW)(?![\\-\\w])",
167+
"match": "(?<![\\-\\w])(?i:ABD|ABORT|ACCEPT|ACCESS|ADATA|ADD|AS|CBLCARD|COBOL2|COBOL3|CPSM|DLI|EDF|EXCI|FEPI|NATLANG|NOCBLCARD|NOCPSM|NODEBUG|NOEDF|NOFEPI|NOLENGTH|NOLINKAGE|NOOPTIONS|NOSPIE|OPTIONS|SP|SPIE|SYSEIB|ADDRESS|ADEXIT|ADV|ADVANCING|ADX|AFP|AFTER|ALIAS|ALL|ALPHABET|ALPHABETIC|ALPHABETIC-LOWER|ALPHABETIC-UPPER|ALPHANUMERIC|ALPHANUMERIC-EDITED|ALPHNUM|ALSO|ALTER|ALTERNATE|ANA|ANALIST|AND|ANSI|ANY|APOST|APPLY|AR|ARCH|ARE|AREA|AREAS|ARITH|ASCENDING|ASCII|ASSIGN|ASSOCIATED_DATA|ASSOCIATED_DATA_LENGTH|AT|AUTHOR|AUTO|AVG|AWO|BEFORE|BIN|BINARY|BLANK|BLOCK|BLOCK0|BOTH|BOTTOM|BUF|BUFSIZE|BY|BYFUNCTION|BYTITLE|CALL|CANCEL|CAPABLE|CBL|CCSVERSION|CHAINING|CHANGED|CHANNEL|CHARACTER|CHARACTERS|CICS|CLASS|CLEANSIGN|CLOCK-UNITS|CLOSE|CLOSE-DISPOSITION|CO|CODEPAGE|CODE-SET|COLLATING|COLS|COMMA|COMMITMENT|COMMON|COMP|COMPAT|COMPILE|COMPUTATIONAL|COMPUTATIONAL-1|COMPUTATIONAL-2|COMPUTATIONAL-3|COMPUTATIONAL-4|COMPUTATIONAL-5|COMPUTE|COMP-1|COMP-2|COMP-3|COMP-4|COMP-5|CONFIGURATION|CONTAINS|CONTENT|CONTINUE|CONTROL|CONVERTING|COPYLOC|COPYRIGHT|CORR|CORRESPONDING|COUNT|CP|CPLC|CPYR|CR|CRUNCH|CS|CURR|CURRENCY|CYCLE|DACO-CONTROL|DATA|DATE|DATE-COMPILED|DATE-WRITTEN|DAY|DAY-OF-WEEK|DB|DBCS|DEBUG|DEBUGGING|DEC|DECIMAL-POINT|DECK|DECLARATIVES|DEF|DEFAULT|DEFAULT-DISPLAY|DEFINE|DEFINITION|DELETE|DELIMITED|DELIMITER|DEPENDING|DESCENDING|DESIGNER|DFHRESP|DFHVALUE|DIAGTRUNC|DISABLE|DISK|DISPLAY|DISPLAY-1|DISPSIGN|DIVIDE|DIVISION|DLL|DN|DOWN|DS|DSN|DSNAME|DTR|DU|DUMP|DUPLICATES|DWARF|DYN|DYNAM|DYNAMIC|EBCDIC|EGCS|EGI|EJPD|ELSE|EMA|EMI|EN|ENABLE|ENCODING|END|ENDP|ENDPERIOD|END-ACCEPT|END-ADD|END-CALL|END-COMPUTE|END-DELETE|END-DIVIDE|END-EVALUATE|END-IF|END-MULTIPLY|END-OF-PAGE|END-PERFORM|END-READ|END-RECEIVE|END-RETURN|END-REWRITE|END-SEARCH|END-START|END-STRING|END-SUBTRACT|END-UNSTRING|END-WRITE|END-XML|ENGLISH|ENTRY|ENTRY-NAME|ENTRY-INTERFACE|ENVIRONMENT|EOC|EODS|EOP|EQUAL|ERROR|ESCAPE|ESI|EVALUATE|EVENP|EVENPACK|EVERY|EX|EXCEPTION|EXCLUSIVE|EXEC|EXHIBIT|EXIT|EXP|EXPORTALL|EXTEND|EXTERNAL|FALSE|FASTSRT|FD|FIELD|FILED|FILE|FILE-CONTROL|FILL|FILLER|FIND|FIRST|FLAG|FLAGSTD|FNC|FOOTING|FOR|FORCENUMCMP|FROM|FSRT|FULL|FUNCTION|FUNCTION-ID|FUNCTION-POINTER|GENERATE|GET|GIVING|GLOBAL|GO|GOBACK|GREATER|GROUP-USAGE|HEX|HGPR|HIGH-VALUE|HIGH-VALUES|IC|ID|IDENTIFICATION|IF|IMPLICIT|IN|INDEX|INDEXED|INEXIT|INFO|INITCHECK|INITIAL|INITIALIZE|INITIATE|INL|INLINE|INPUT|INPUT-OUTPUT|INSERT|INSPECT|INSTALLATION|INTDATE|INTEGER|INTO|INVALID|INVD|INVDATA|INVMPSZ|INVPARTN|INVREQ|INX|IS|I-O|I-O-CONTROL|JA|JAPANESE|JP|JUST|JUSTIFIED|KANJI|KEPT|KEY|KEYBOARD|LABEL|LANG|LANGUAGE|LAST|LAX|LAXPERF|LAXREDEF|LAYOUT|LC|LEADING|LEFT|LENGTH|LESS|LIBEXIT|LIBRARY|LIBX|LILIAN|LIMIT|LINAGE|LINAGE-COUNTER|LINE|LINECOUNT|LINES|LINKAGE|LIST|LM|LOCAL|LOCAL-STORAGE|LOCK|LONGMIXED|LONGUPPER|LOW-VALUE|LOW-VALUES|LP|LU|LXPRF|LXRDF|MAP|MAPFAIL|MATCH|MAX|MAXPCF|MD|MDECK|MEMORY|MERGE|MESSAGE|MIG|MIXED|MMDDYYYY|MODE|MODULES|MOVE|MSG|MSGEXIT|MSGX|MULTIPLE|MULTIPLY|NAME|NAMED|NAT|NATIONAL|NATIONAL-EDITED|NATIVE|NC|ND|NEGATIVE|NETWORK|NEXT|NO|NO-POS|NOADATA|NOADEXIT|NOADV|NOADX|NOALIAS|NOALPHNUM|NOAWO|NOBIN|NOBLOCK0|NOC|NOCICS|NOCLEANSIGN|NOCOMPILE|NOCOPYLOC|NOCOPYRIGHT|NOCPLC|NOCPYR|NOCS|NOCURR|NOCURRENCY|NOD|NODBCS|NODECK|NODEF|NODEFINE|NODIAGTRUNC|NODLL|NODSNAME|NODTR|NODU|NODUMP|NODWARF|NODYN|NODYNAM|NOEJPD|NOENDPERIOD|NOEVENPACK|NOEX|NOEXIT|NOEXP|NOEXPORTALL|NOF|NOFASTSRT|NOFLAG|NOFLAGSTD|NOFNC|NOFORCENUMCMP|NOFSRT|NOIC|NOINEXIT|NOINITCHECK|NOINITIAL|NOINL|NOINLINE|NOINVD|NOINVDATA|NOINX|NOLAXPERF|NOLAXREDEF|NOLIBEXIT|NOLIBX|NOLIST|NOMAP|NOMD|NOMDECK|NOMSGEXIT|NOMSGX|NONAME|NONC|NONUM|NONUMBER|NONUMCHECK|NOOBJ|NOOBJECT|NOOFF|NOOFFSET|NOOMITODOMIN|NOPAC|NOPARMCHECK|NOPC|NOPFD|NOPRESERVE|NOPRTEXIT|NOPRTX|NORENT|NORULES|NOS|NOSEP|NOSEPARATE|NOSEQ|NOSEQUENCE|NOSERV|NOSERVICE|NOSLACKBYTES|NOSO|NOSOURCE|NOSQL|NOSQLC|NOSQLCCSID|NOSQLIMS|NOSSR|NOSSRANGE|NOSTGOPT|NOSUPP|NOSUPPRESS|NOT|NOTERM|NOTERMINAL|NOTEST|NOTHREAD|NOTRUNCBIN|NOUNRA|NOUNREFALL|NOUNREFSOURCE|NOUNRS|NOVBREF|NOVOLATILE|NOWD|NOWORD|NOX|NOXREF|NOZC|NOZLEN|NOZON|NOZONECHECK|NOZWB|NS|NSYMBOL|NULL|NULLS|NUM|NUMBER|NUMCHECK|NUMERIC|NUMERIC-EDITED|NUMPROC|OBJ|OBJECT|OBJECT-COMPUTER|OCCURS|ODT|OF|OFF|OFFSET|OMITODOMIN|OMITTED|ON|OOM|OPEN|OPT|OPTFILE|OPTIMIZE|OPTIONAL|OR|ORDER|ORDERLY|ORGANIZATION|OTHER|OUT|OUTDD|OUTPUT|OVERFLOW|OWN|OWNER|PAC|PACKED-DECIMAL|PADDING|PAGE|PARAGRAPH|PARMCHECK|PARSE|PARTNFAIL|PASSWORD|PATH|PC|PERFORM|PFD|PGMN|PGMNAME|PIC|PICTURE|POINTER|POINTER-32|PORT|POSITION|POSITIVE|PRESERVE|PRINTER|PROCEDURE|PROCEDURES|PROCEDURE-POINTER|PROCEED|PROCESS|PROCESSING|PROGRAM|PROGRAM-ID|PROTOTYPE|PRTEXIT|PRTX|PURGE|QUA|QUALIFY|QUOTE|QUOTES|RANDOM|RDATT|READ|READER|READY|RECEIVE|RECORD|RECORDING|RECORDS|RECURSIVE|REDEFINES|REEL|REFERENCE|REFERENCES|RELATIVE|RELEASE|RELOAD|REMAINDER|REMARKS|REMOTE|REMOVAL|REMOVE|RENAMES|RENT|REPLACE|REPLACING|REPORT|REPORTS|RERUN|RESERVE|RESET|RESUME|RETURN|RETURNING|REVERSED|REWIND|REWRITE|RIGHT|RMODE|ROUNDED|RULES|RUN|SAME|SAVE|SD|SEARCH|SECTION|SECURITY|SEGMENT|SEGMENT-LIMIT|SELECT|SEND|SENTENCE|SEP|SEPARATE|SEQ|SEQUENCE|SEQUENTIAL|SERV|SERVICE|SET|SHORT|SIGN|SIZE|SLACKBYTES|SLCKB|SN|SO|SORT|SORT-MERGE|SOURCE|SOURCE-COMPUTER|SPACE|SPACES|SPECIAL-NAMES|SQL|SQLC|SQLCCSID|SQLIMS|SSR|SSRANGE|STANDARD|STANDARD-1|STANDARD-2|START|STATIC|STATS|STATUS|STD|STGOPT|STOP|STRICT|STRING|SUBTRACT|SUCC|SUM|SUPP|SUPPRESS|SYMBOL|SYMBOLIC|SYNC|SYNCHRONIZED|SYSLIB|TALLYING|TAPE|TABLE|TERM|TERMINAL|TERMINATE|TEST|THAN|THEN|THREAD|THROUGH|THRU|TIME|TIMER|TIMES|TO|TODAYS-DATE|TODAYS-NAME|TOP|TRACE|TRAILING|TRUE|TRUNC|TRUNCBIN|TUNE|UE|UENGLISH|UNEXPIN|UNIT|UNREF|UNSTRING|UNTIL|UP|UPON|UPPER|USAGE|USE|USING|UTF-8|VALIDATING|VALUE|VALUES|VARYING|VBREF|VIRTUAL|VLR|VOLATILE|VOLSER|VS|VSAMOPENFS|WAIT|WARNING|WD|WHEN|WHEN-COMPILED|WITH|WORD|WORDS|WORKING-STORAGE|WRITE|WRITE-ONLY|XML|XMLPARSE|XMLSS|XOPTS|XP|XREF|YEAR|YYYYDDD|YYYYMMDD|ZC|ZD|ZERO|ZEROES|ZEROS|ZLEN|ZON|ZONECHECK|ZONEDATA|ZWB|IS|INTRINSIC|REPOSITORY|EPILOG|NOCMPR2|NOTRIG|CPP|DATEPROC|DP|GDS|GRAPHIC|KA|LEASM|LIB|LIN|MARGINS|NODE|NODATEPROC|NODP|NOEPILOG|NOFLAGMIG|NOGRAPHIC|NOLIB|NOOPSEQUENCE|NOOPT|NOOPTIMIZE|NOP|NOPROLOG|NOSTDTRUNC|NSEQ|OP|OPMARGINS|OPSEQUENCE|PROLOG|RES|SZ|TRIG|YEARWINDOW|YW)(?![\\-\\w])",
168168
"name": "keyword.cobol"
169169
},
170170
"cobol-preprocessor-keywords": {

server/common/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<modelVersion>4.0.0</modelVersion>
2222
<artifactId>common</artifactId>
2323
<groupId>org.eclipse.lsp.cobol</groupId>
24-
<version>1.0.8</version>
24+
<version>1.0.9</version>
2525

2626
<properties>
2727
<maven.compiler.source>8</maven.compiler.source>

server/common/src/main/java/org/eclipse/lsp/cobol/common/benchmark/BenchmarkServiceImpl.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@
2424
import java.nio.file.Paths;
2525
import java.nio.file.StandardOpenOption;
2626
import java.util.*;
27+
import java.util.concurrent.CopyOnWriteArrayList;
2728
import java.util.stream.Collectors;
2829

2930
public class BenchmarkServiceImpl implements BenchmarkService {
3031
private final static Logger LOG = LoggerFactory.getLogger(BenchmarkServiceImpl.class);
3132
private static final String PERFORMANCE_LOG_PATH = "performance.log.path";
32-
private final List<BenchmarkSession> benchmarkSessions = new ArrayList<>();
33+
private final List<BenchmarkSession> benchmarkSessions = new CopyOnWriteArrayList<>();
3334

3435
@Override
3536
public BenchmarkSession startSession() {
@@ -60,6 +61,7 @@ public void logTiming() {
6061
}
6162

6263
public void logTiming(BenchmarkSession benchmarkSession) {
64+
LOG.debug("---- Benchmark for uri : {}", benchmarkSession.attr("uri"));
6365
Collection<Measurement> measurements = benchmarkSession
6466
.getMeasurements();
6567
measurements

server/common/src/main/java/org/eclipse/lsp/cobol/common/model/NodeType.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public enum NodeType {
3333
EXIT_SECTION,
3434
FILE_CONTROL_ENTRY,
3535
FILE_USAGE,
36+
FUNCTION_REFERENCE,
3637
GO_BACK,
3738
GO_TO,
3839
IF,
@@ -48,8 +49,8 @@ public enum NodeType {
4849
PARAGRAPH,
4950
PARAGRAPH_NAME_NODE,
5051
PERFORM,
51-
PROCEDURE_DIVISION,
5252
PROCEDURE_SECTION,
53+
PROCEDURE_RETURNING,
5354
PROGRAM,
5455
PROGRAM_END,
5556
PROGRAM_ID,

server/common/src/main/java/org/eclipse/lsp/cobol/common/model/tree/CodeBlockUsageNode.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import org.eclipse.lsp.cobol.common.model.NodeType;
2525
import org.eclipse.lsp4j.Location;
2626

27+
import com.google.common.collect.ImmutableList;
28+
2729
import java.util.List;
2830

2931
/** The class represents usages of paragraphs or sections. */
@@ -33,9 +35,9 @@
3335
public class CodeBlockUsageNode extends Node implements DefinedAndUsedStructure {
3436
private final String name;
3537
@Setter
36-
private List<Location> definitions;
38+
private List<Location> definitions = ImmutableList.of();
3739
@Setter
38-
private List<Location> usages;
40+
private List<Location> usages = ImmutableList.of();
3941

4042
public CodeBlockUsageNode(Locality location, String name) {
4143
super(location, NodeType.CODE_BLOCK_USAGE);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright (c) 2024 Broadcom.
3+
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4+
*
5+
* This program and the accompanying materials are made
6+
* available under the terms of the Eclipse Public License 2.0
7+
* which is available at https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Broadcom, Inc. - initial API and implementation
13+
*
14+
*/
15+
package org.eclipse.lsp.cobol.common.model.tree;
16+
17+
import lombok.EqualsAndHashCode;
18+
import lombok.Getter;
19+
import lombok.Setter;
20+
import lombok.ToString;
21+
22+
import java.util.List;
23+
24+
import org.eclipse.lsp.cobol.common.model.DefinedAndUsedStructure;
25+
import org.eclipse.lsp.cobol.common.model.Locality;
26+
import org.eclipse.lsp.cobol.common.model.NodeType;
27+
import org.eclipse.lsp4j.Location;
28+
29+
import com.google.common.collect.ImmutableList;
30+
31+
@ToString(callSuper = true)
32+
@Getter
33+
@EqualsAndHashCode(callSuper = true)
34+
public class FunctionReference extends Node implements DefinedAndUsedStructure {
35+
final String name;
36+
@Setter
37+
private List<Location> definitions = ImmutableList.of();
38+
@Setter
39+
private List<Location> usages = ImmutableList.of();
40+
41+
public FunctionReference(Locality locality, String name) {
42+
super(locality, NodeType.FUNCTION_REFERENCE);
43+
this.name = name;
44+
}
45+
46+
@Override
47+
public List<Location> getDefinitions() {
48+
return definitions;
49+
}
50+
51+
@Override
52+
public List<Location> getUsages() {
53+
return usages;
54+
}
55+
}

server/common/src/main/java/org/eclipse/lsp/cobol/common/model/tree/ParagraphNameNode.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@
2121
import org.eclipse.lsp.cobol.common.model.NodeType;
2222
import org.eclipse.lsp4j.Location;
2323

24+
import com.google.common.collect.ImmutableList;
25+
2426
import java.util.List;
2527

2628
/** The class represents paragraphs or section name node in COBOL grammar. */
2729
@Getter
2830
public class ParagraphNameNode extends Node implements DefinedAndUsedStructure {
2931
private final String name;
3032
@Setter
31-
private List<Location> definitions;
33+
private List<Location> definitions = ImmutableList.of();
3234
@Setter
33-
private List<Location> usages;
35+
private List<Location> usages = ImmutableList.of();
3436

3537
public ParagraphNameNode(Locality location, String paragraphName) {
3638
super(location, NodeType.PARAGRAPH_NAME_NODE);

0 commit comments

Comments
 (0)