Skip to content

Commit 494389e

Browse files
committed
Fixes #352
1 parent 5f603ac commit 494389e

File tree

4 files changed

+41
-22
lines changed

4 files changed

+41
-22
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changelog
22

3+
## [2.6.3] - 2024-XX-XX
4+
- Fix issue [#352](https://github.com/intersystems/language-server/issues/352): Hide Deprecated classes and class members from completion lists by default
5+
36
## [2.6.2] - 2024-10-07
47
- Fix issue [#345](https://github.com/intersystems/language-server/issues/345): Add intellisense for variables passed by reference as method arguments
58
- Fix issue [#347](https://github.com/intersystems/language-server/issues/347): Setting a variable's subscript should not affect the type of that variable

package.json

+6
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@
248248
"type": "boolean",
249249
"default": false,
250250
"description": "Controls whether generated classes and class members are shown in completion lists."
251+
},
252+
"intersystems.language-server.completion.showDeprecated": {
253+
"scope": "window",
254+
"type": "boolean",
255+
"default": false,
256+
"description": "Controls whether deprecated classes and class members are shown in completion lists."
251257
}
252258
}
253259
},

server/src/providers/completion.ts

+30-21
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,9 @@ async function completionFullClassName(doc: TextDocument, parsed: compressedline
543543

544544
// Get all classes
545545
const querydata = {
546-
query: "SELECT dcd.Name, dcd.Deprecated FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?) AS sod, %Dictionary.ClassDefinition AS dcd WHERE sod.Name = dcd.Name||'.cls'",
546+
query: `SELECT dcd.Name, dcd.Deprecated FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?) AS sod, %Dictionary.ClassDefinition AS dcd WHERE sod.Name = dcd.Name||'.cls'${
547+
!settings.completion.showDeprecated ? " AND dcd.Deprecated = 0" : ""
548+
}`,
547549
parameters: ["*.cls",1,1,1,1,0,settings.completion.showGenerated ? 1 : 0]
548550
};
549551
const respdata = await makeRESTRequest("POST",1,"/action/query",server,querydata);
@@ -611,7 +613,9 @@ async function completionPackage(server: ServerSpec, settings: LanguageServerCon
611613

612614
// Get all the packages
613615
const querydata = {
614-
query: "SELECT DISTINCT $PIECE(Name,'.',1,$LENGTH(Name,'.')-2) AS Package FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?)",
616+
query: `SELECT DISTINCT $PIECE(dcd.Name,'.',1,$LENGTH(dcd.Name,'.')-1) AS Package FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?) AS sod, %Dictionary.ClassDefinition AS dcd WHERE sod.Name = dcd.Name||'.cls'${
617+
!settings.completion.showDeprecated ? " AND dcd.Deprecated = 0" : ""
618+
}`,
615619
parameters: ["*.cls",1,1,1,1,0,settings.completion.showGenerated ? 1 : 0]
616620
};
617621
const respdata = await makeRESTRequest("POST",1,"/action/query",server,querydata);
@@ -948,7 +952,9 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
948952

949953
// Get all appropriate subclasses of %Query
950954
const querydata = {
951-
query: "SELECT dcd.Name, Deprecated FROM %Dictionary.ClassDefinition_SubclassOf(?) AS sco, %Dictionary.ClassDefinition AS dcd WHERE sco.Name = dcd.Name AND sco.Name NOT %INLIST $LISTFROMSTRING(?)",
955+
query: `SELECT dcd.Name, Deprecated FROM %Dictionary.ClassDefinition_SubclassOf(?) AS sco, %Dictionary.ClassDefinition AS dcd WHERE sco.Name = dcd.Name AND sco.Name NOT %INLIST $LISTFROMSTRING(?)${
956+
!settings.completion.showDeprecated ? " AND dcd.Deprecated = 0" : ""
957+
}`,
952958
parameters: ["%Library.Query","%Library.ExtentSQLQuery,%Library.RowSQLQuery"]
953959
};
954960
const respdata = await makeRESTRequest("POST",1,"/action/query",server,querydata);
@@ -1075,7 +1081,9 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
10751081

10761082
// Get all classes that match the filter
10771083
const querydata = {
1078-
query: "SELECT dcd.Name, dcd.Deprecated FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?,?) AS sod, %Dictionary.ClassDefinition AS dcd WHERE sod.Name = dcd.Name||'.cls'",
1084+
query: `SELECT dcd.Name, dcd.Deprecated FROM %Library.RoutineMgr_StudioOpenDialog(?,?,?,?,?,?,?,?) AS sod, %Dictionary.ClassDefinition AS dcd WHERE sod.Name = dcd.Name||'.cls'${
1085+
!settings.completion.showDeprecated ? " AND dcd.Deprecated = 0" : ""
1086+
}`,
10791087
parameters: ["*.cls",1,1,1,1,0,settings.completion.showGenerated ? 1 : 0,`Name %STARTSWITH '${filter}'`]
10801088
};
10811089
const respdata = await makeRESTRequest("POST",1,"/action/query",server,querydata);
@@ -1096,6 +1104,7 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
10961104
// This is a class member
10971105

10981106
const internalStr = !settings.completion.showInternal ? " AND Internal = 0": "";
1107+
const deprecatedStr = !settings.completion.showDeprecated ? " AND Deprecated = 0" : "";
10991108
if (prevline.slice(-2) === ".#") {
11001109
// Get the base class that this member is in
11011110
const membercontext = await getClassMemberContext(doc,parsed,thistoken-1,params.position.line,server);
@@ -1108,7 +1117,7 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
11081117
const data: QueryData = {
11091118
query: `SELECT Name, Description, Origin, Type, Deprecated FROM %Dictionary.CompiledParameter WHERE parent->ID = ?${
11101119
membercontext.context == "instance" ? " AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')" : ""
1111-
}${internalStr}`,
1120+
}${internalStr}${deprecatedStr}`,
11121121
parameters: [membercontext.baseclass]
11131122
}
11141123
const respdata = await makeRESTRequest("POST",1,"/action/query",server,data);
@@ -1165,50 +1174,50 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
11651174
// Non-generated methods
11661175
data.query += "SELECT Name, Description, Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated, NULL AS Aliases " +
11671176
"FROM %Dictionary.CompiledMethod WHERE parent->ID = ? AND Stub IS NULL AND ((Origin = parent->ID) OR (Origin != parent->ID AND NotInheritable = 0)) " +
1168-
`AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr}`;
1177+
`AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr}${deprecatedStr}`;
11691178
data.parameters.push(membercontext.baseclass);
11701179
// Properties and Parameters
11711180
data.query += " UNION ALL %PARALLEL " +
11721181
"SELECT Name, Description, Origin, NULL AS FormalSpec, RuntimeType AS Type, 'property' AS MemberType, Deprecated, Aliases " +
1173-
`FROM %Dictionary.CompiledProperty WHERE parent->ID = ? AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr} UNION ALL %PARALLEL ` +
1182+
`FROM %Dictionary.CompiledProperty WHERE parent->ID = ? AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
11741183
"SELECT Name, Description, Origin, NULL AS FormalSpec, Type, 'parameter' AS MemberType, Deprecated, NULL AS Aliases " +
1175-
`FROM %Dictionary.CompiledParameter WHERE parent->ID = ? AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr}`;
1184+
`FROM %Dictionary.CompiledParameter WHERE parent->ID = ? AND (parent->ClassType IS NULL OR parent->ClassType != 'datatype')${internalStr}${deprecatedStr}`;
11761185
data.parameters.push(membercontext.baseclass,membercontext.baseclass);
11771186
if (settings.completion.showGenerated) {
11781187
// Generated methods
11791188
data.query += " UNION ALL %PARALLEL " +
11801189
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated, NULL AS Aliases " +
1181-
`FROM %Dictionary.CompiledIndexMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr} UNION ALL %PARALLEL ` +
1190+
`FROM %Dictionary.CompiledIndexMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
11821191
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated, NULL AS Aliases " +
1183-
`FROM %Dictionary.CompiledQueryMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr} UNION ALL %PARALLEL ` +
1192+
`FROM %Dictionary.CompiledQueryMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
11841193
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated, NULL AS Aliases " +
1185-
`FROM %Dictionary.CompiledPropertyMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr} UNION ALL %PARALLEL ` +
1194+
`FROM %Dictionary.CompiledPropertyMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
11861195
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated, NULL AS Aliases " +
1187-
`FROM %Dictionary.CompiledConstraintMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr}`;
1196+
`FROM %Dictionary.CompiledConstraintMethod WHERE parent->parent->ID = ? AND (parent->parent->ClassType IS NULL OR parent->parent->ClassType != 'datatype')${internalStr}${deprecatedStr}`;
11881197
data.parameters.push(...new Array(4).fill(membercontext.baseclass));
11891198
}
11901199
} else {
11911200
// Non-generated methods
11921201
data.query += "SELECT Name, Description, Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated " +
1193-
`FROM %Dictionary.CompiledMethod WHERE parent->ID = ? AND ClassMethod = 1 AND Stub IS NULL AND ((Origin = parent->ID) OR (Origin != parent->ID AND NotInheritable = 0))${internalStr}`;
1202+
`FROM %Dictionary.CompiledMethod WHERE parent->ID = ? AND ClassMethod = 1 AND Stub IS NULL AND ((Origin = parent->ID) OR (Origin != parent->ID AND NotInheritable = 0))${internalStr}${deprecatedStr}`;
11941203
data.parameters.push(membercontext.baseclass);
11951204
if (membercontext.context == "class") {
11961205
// Parameters
11971206
data.query += " UNION ALL %PARALLEL " +
1198-
`SELECT Name, Description, Origin, NULL AS FormalSpec, Type, 'parameter' AS MemberType, Deprecated FROM %Dictionary.CompiledParameter WHERE parent->ID = ?${internalStr}`;
1207+
`SELECT Name, Description, Origin, NULL AS FormalSpec, Type, 'parameter' AS MemberType, Deprecated FROM %Dictionary.CompiledParameter WHERE parent->ID = ?${internalStr}${deprecatedStr}`;
11991208
data.parameters.push(membercontext.baseclass);
12001209
}
12011210
if (settings.completion.showGenerated) {
12021211
// Generated methods
12031212
data.query += " UNION ALL %PARALLEL " +
12041213
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated " +
1205-
`FROM %Dictionary.CompiledIndexMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr} UNION ALL %PARALLEL ` +
1214+
`FROM %Dictionary.CompiledIndexMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
12061215
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated " +
1207-
`FROM %Dictionary.CompiledQueryMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr} UNION ALL %PARALLEL ` +
1216+
`FROM %Dictionary.CompiledQueryMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
12081217
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated " +
1209-
`FROM %Dictionary.CompiledPropertyMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr} UNION ALL %PARALLEL ` +
1218+
`FROM %Dictionary.CompiledPropertyMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr}${deprecatedStr} UNION ALL %PARALLEL ` +
12101219
"SELECT parent->name||Name AS Name, Description, parent->Origin AS Origin, FormalSpec, ReturnType AS Type, 'method' AS MemberType, Deprecated " +
1211-
`FROM %Dictionary.CompiledConstraintMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr}`
1220+
`FROM %Dictionary.CompiledConstraintMethod WHERE parent->parent->ID = ? AND ClassMethod = 1${internalStr}${deprecatedStr}`
12121221
data.parameters.push(...new Array(4).fill(membercontext.baseclass));
12131222
}
12141223
}
@@ -1396,7 +1405,7 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
13961405
const data: QueryData = {
13971406
query: `SELECT Name, Description, Origin, Type, Deprecated FROM %Dictionary.CompiledParameter WHERE parent->ID = ?${
13981407
isProperty ? " OR parent->ID %INLIST (SELECT $LISTFROMSTRING(PropertyClass) FROM %Dictionary.CompiledClass WHERE Name = ?)" : ""
1399-
}${!settings.completion.showInternal ? " AND Internal = 0": ""}`,
1408+
}${!settings.completion.showInternal ? " AND Internal = 0": ""}${!settings.completion.showDeprecated ? " AND Deprecated = 0": ""}`,
14001409
parameters: isProperty ? [normalizedcls,currentClass(doc,parsed)] : [normalizedcls]
14011410
};
14021411
const respdata = await makeRESTRequest("POST",1,"/action/query",server,data);
@@ -2103,14 +2112,14 @@ export async function onCompletion(params: CompletionParams): Promise<Completion
21032112
const data: QueryData = {
21042113
query: `SELECT Name, Description, Origin, RuntimeType, Deprecated FROM %Dictionary.CompiledProperty WHERE parent->ID = ? AND Calculated = 0${
21052114
!settings.completion.showInternal ? " AND Internal = 0": ""
2106-
}`,
2115+
}${!settings.completion.showDeprecated ? " AND Deprecated = 0" : ""}`,
21072116
parameters: [thisclass]
21082117
}
21092118
const respdata = await makeRESTRequest("POST",1,"/action/query",server,data);
21102119
if (Array.isArray(respdata?.data?.result?.content) && respdata.data.result.content.length > 0) {
21112120
// We got data back
21122121

2113-
for (let memobj of respdata.data.result.content) {
2122+
for (const memobj of respdata.data.result.content) {
21142123
const quotedname = quoteUDLIdentifier(memobj.Name,1);
21152124
var item: CompletionItem = {
21162125
label: ""

server/src/utils/types.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ export type LanguageServerConfiguration = {
4040
},
4141
completion: {
4242
showGenerated: boolean,
43-
showInternal: boolean
43+
showInternal: boolean,
44+
showDeprecated: boolean
4445
}
4546
};
4647

0 commit comments

Comments
 (0)