Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions extension/server/src/connection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ export function handleClientRequests() {
indicators: doc.indicators,
tags: doc.tags,
includes: doc.includes,
outputs: doc.outputs
}
});
}
Expand Down
16 changes: 14 additions & 2 deletions extension/server/src/providers/documentSymbols.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default async function documentSymbolProvider(handler: DocumentSymbolPara
.filter(subitem => subitem.position && subitem.position.path === currentPath)
.map(subitem => expandStruct(subitem));
}

return parent;
}

Expand Down Expand Up @@ -65,7 +65,7 @@ export default async function documentSymbolProvider(handler: DocumentSymbolPara
Range.create(subitem.range.start!, 0, subitem.range.end!, 0),
Range.create(subitem.range.start!, 0, subitem.range.end!, 0)
));

procDef.children.push(...getScopeVars(proc.scope));
}

Expand Down Expand Up @@ -163,6 +163,18 @@ export default async function documentSymbolProvider(handler: DocumentSymbolPara

currentScopeDefs.push(fileDef);
});
scope.outputs
.filter(output => output.position && output.position.path === currentPath && validRange(output))
.forEach(output => {
const outputDef = DocumentSymbol.create(
output.name,
prettyKeywords(output.keyword),
SymbolKind.String, // or SymbolKind.Field
Range.create(output.range.start!, 0, output.range.end!, 0),
Range.create(output.range.start!, 0, output.range.end!, 0)
);
currentScopeDefs.push(outputDef);
});

scope.structs
.filter(struct => struct.position && struct.position.path === currentPath && validRange(struct))
Expand Down
4 changes: 4 additions & 0 deletions language/models/cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ export default class Cache {
return this.symbols.filter(s => s.type === `parameter`);
}

get outputs() {
return this.symbols.filter(s => s.type === `output`);
}

addSymbol(symbol: Declaration) {
const name = symbol.name.toUpperCase();
if (this.symbolRegister.has(name)) {
Expand Down
2 changes: 1 addition & 1 deletion language/models/declaration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Keywords, Reference } from "../parserTypes";
import { IRangeWithLine } from "../types";
import Cache from "./cache";

export type DeclarationType = "parameter"|"procedure"|"subroutine"|"file"|"struct"|"subitem"|"variable"|"constant"|"tag"|"indicator";
export type DeclarationType = "parameter"|"procedure"|"subroutine"|"file"|"struct"|"subitem"|"variable"|"constant"|"tag"|"indicator"| "output";

export default class Declaration {
name: string = ``;
Expand Down
34 changes: 33 additions & 1 deletion language/models/fixed.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,39 @@ export function parsePLine(content, lineNumber, lineIndex) {
start
};
}

/**
* Parse O-Spec (Output Specification) line
* @param {number} lineNumber
* @param {number} lineIndex
* @param {string} content
*/
export function parseOLine(lineNumber, lineIndex, content) {
content = content.padEnd(80);

const filename = content.substr(6, 10); // Columns 7-16
const type = content.substr(16, 1); // Column 17
const fetchOverflow = content.substr(17, 3); // Columns 18-20
const andOr = content.substr(20, 9); // Columns 21-29
const fieldName = content.substr(29, 14); // Columns 30-43
const blankAfter = content.substr(43, 1); // Column 44
const editCodes = content.substr(44, 2); // Columns 45-46
const endPosition = content.substr(46, 5); // Columns 47-51
const dataFormat = content.substr(51, 1); // Column 52
const constantOrEdit = content.substr(52, 28); // Columns 53-80

return {
filename: calculateToken(lineNumber, lineIndex+6, filename),
type: calculateToken(lineNumber, lineIndex+16, type),
fetchOverflow: calculateToken(lineNumber, lineIndex+17, fetchOverflow),
andOr: calculateToken(lineNumber, lineIndex+20, andOr),
fieldName: calculateToken(lineNumber, lineIndex+29, fieldName),
blankAfter: calculateToken(lineNumber, lineIndex+43, blankAfter),
editCodes: calculateToken(lineNumber, lineIndex+44, editCodes),
endPosition: calculateToken(lineNumber, lineIndex+46, endPosition),
dataFormat: calculateToken(lineNumber, lineIndex+51, dataFormat),
constantOrEdit: calculateToken(lineNumber, lineIndex+52, constantOrEdit)
};
}
export function prettyTypeFromToken(dSpec) {
return getPrettyType({
type: dSpec.type ? dSpec.type.value : ``,
Expand Down
Loading