Skip to content

Commit 7d0f1c4

Browse files
authored
fix: be able to fold all regions (#1494)
1 parent b03f8ab commit 7d0f1c4

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

server/src/sas/CompletionProvider.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
CompletionItem,
66
CompletionItemKind,
77
CompletionList,
8+
CompletionParams,
89
Hover,
910
MarkupKind,
1011
SignatureHelp,
@@ -611,12 +612,25 @@ export class CompletionProvider {
611612
});
612613
}
613614

614-
getCompleteItems(position: Position): Promise<CompletionList | undefined> {
615+
getCompleteItems(
616+
params: CompletionParams,
617+
): Promise<CompletionList | undefined> {
615618
return new Promise((resolve) => {
616-
this._getZone(position);
619+
this._getZone(params.position);
617620
const prefix = this.popupContext.prefix;
618621

619622
this._loadAutoCompleteItems(this.popupContext.zone, (data) => {
623+
if (
624+
params.context?.triggerCharacter === "." &&
625+
data &&
626+
data[0] &&
627+
(typeof data[0] === "string" ||
628+
(data[0].type !== "DATA" && data[0].type !== "VIEW"))
629+
) {
630+
// only data list can be triggered by "."
631+
resolve(undefined);
632+
return;
633+
}
620634
const items = data?.map((item) => ({
621635
label: processLabelCase(
622636
typeof item === "string" ? item : item.name,

server/src/sas/LanguageServiceProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Range, TextDocument } from "vscode-languageserver-textdocument";
1010
import { CodeZoneManager } from "./CodeZoneManager";
1111
import { CompletionProvider } from "./CompletionProvider";
1212
import { FormatOnTypeProvider } from "./FormatOnTypeProvider";
13-
import { FoldingBlock } from "./LexerEx";
13+
import { FoldingBlock, LexerEx } from "./LexerEx";
1414
import { Model } from "./Model";
1515
import type { LibService } from "./SyntaxDataProvider";
1616
import { SyntaxProvider } from "./SyntaxProvider";
@@ -203,6 +203,7 @@ export class LanguageServiceProvider {
203203
result.push({
204204
startLine: block.startLine,
205205
endLine: block.endFoldingLine,
206+
kind: block.type === LexerEx.SEC_TYPE.CUSTOM ? "region" : undefined,
206207
});
207208
}
208209
i = rootBlock.endFoldingLine;

server/src/sas/SyntaxDataProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2559,9 +2559,10 @@ export class SyntaxDataProvider {
25592559
return _getKeywords(/*'statisticsKeywords'*/ "stat-kw", cb);
25602560
}
25612561
getDSStatements(cb?: (data: string[]) => void) {
2562+
const globalProcStatements = this.getGlobalProcedureStatements();
25622563
return _tryToLoadStatementsFromPubs("datastep", cb, function () {
25632564
const data = _procStmtObj("datastep");
2564-
return data[ID_STMTS];
2565+
return data[ID_STMTS].concat(globalProcStatements);
25652566
});
25662567
}
25672568
getDSOptions(cb?: (data: string[]) => void) {

server/src/server.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,13 @@ export const runServer = (
144144
async sas(languageService) {
145145
if (
146146
params.context?.triggerCharacter &&
147-
params.context.triggerCharacter !== " "
147+
params.context.triggerCharacter !== " " &&
148+
params.context.triggerCharacter !== "."
148149
) {
149150
return undefined;
150151
}
151152
const completionList =
152-
await languageService.completionProvider.getCompleteItems(
153-
params.position,
154-
);
153+
await languageService.completionProvider.getCompleteItems(params);
155154
if (completionList) {
156155
for (const item of completionList.items) {
157156
if (!item.data) {

0 commit comments

Comments
 (0)