Skip to content

Commit 28631ab

Browse files
authored
feat: Show diagnostic only for opened documents (#1965)
1 parent 5fff092 commit 28631ab

34 files changed

+1722
-1362
lines changed

clients/cobol-lsp-vscode-extension/src/extension.ts

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ function initialize() {
5858
return { copyBooksDownloader, configurationWatcher };
5959
}
6060

61+
export function getChannel(): vscode.OutputChannel {
62+
return outputChannel;
63+
}
64+
6165
export async function activate(
6266
context: vscode.ExtensionContext,
6367
): Promise<__ExtensionApi & __AnalysisApi> {

clients/cobol-lsp-vscode-extension/src/services/ProcessorGroups.ts

+17-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ import { Minimatch } from "minimatch";
1818
import { SettingsUtils } from "./util/SettingsUtils";
1919
import { globSync } from "glob";
2020
import { Uri } from "vscode";
21-
import { backwardSlashRegex, cleanWorkspaceFolder } from "./util/FSUtils";
21+
import {
22+
backwardSlashRegex,
23+
cleanWorkspaceFolder,
24+
normalizePath,
25+
} from "./util/FSUtils";
26+
import { getChannel } from "../extension";
2227

2328
const PROCESSOR_GROUP_FOLDER = ".cobolplugin";
2429
const PROCESSOR_GROUP_PGM = "pgm_conf.json";
@@ -28,25 +33,32 @@ export function loadProcessorGroupCopybookPaths(
2833
documentUri: string,
2934
dialectType: string,
3035
): string[] {
31-
return loadProcessorGroupSettings(
36+
const result = loadProcessorGroupSettings(
3237
documentUri,
3338
"libs",
3439
[] as string[],
3540
dialectType,
3641
);
42+
return result.map((s) => normalizePath(s));
3743
}
3844

3945
export function loadProcessorGroupCopybookPathsConfig(
4046
item: { scopeUri: string },
4147
configObject: string[],
4248
): string[] {
4349
const config = [
44-
...loadProcessorGroupSettings(item.scopeUri, "libs", [] as string[]),
50+
...loadProcessorGroupSettings(item.scopeUri, "libs", [] as string[]).map(
51+
(s) => normalizePath(s),
52+
),
4553
...configObject,
4654
];
4755
return SettingsUtils.getWorkspaceFoldersPath(true)
48-
.map((folder) => globSync(config.map(ele => ele.replace(backwardSlashRegex, "/")),
49-
{ cwd: cleanWorkspaceFolder(folder) }))
56+
.map((folder) =>
57+
globSync(
58+
config.map((ele) => ele.replace(backwardSlashRegex, "/")),
59+
{ cwd: cleanWorkspaceFolder(folder) },
60+
),
61+
)
5062
.reduce((acc, curVal) => {
5163
return acc.concat(curVal);
5264
}, []);

clients/cobol-lsp-vscode-extension/src/services/util/FSUtils.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { globSync, hasMagic } from "glob";
1919
import * as urlUtil from "url";
2020
import { SettingsUtils } from "./SettingsUtils";
2121
import { Uri } from "vscode";
22+
import * as vscode from "vscode";
23+
import { getChannel } from "../../extension";
2224

2325
/**
2426
* This method is responsible to return a valid URI without extension if the extension is not provided or an URI
@@ -62,7 +64,7 @@ export function getURIFrom(
6264
export function getURIFromResource(resource: string): urlUtil.URL[] {
6365
const uris: urlUtil.URL[] = [];
6466
for (const workspaceFolderPath of SettingsUtils.getWorkspaceFoldersPath()) {
65-
const workspaceFolder = workspaceFolderPath.replace(/\/(.*:)/, "$1");
67+
const workspaceFolder = cleanWorkspaceFolder(workspaceFolderPath);
6668
const uri = isAbsolute(resource)
6769
? urlUtil.pathToFileURL(resource)
6870
: new urlUtil.URL(
@@ -88,6 +90,10 @@ export function searchCopybookInWorkspace(
8890
copybookFolders: string[],
8991
extensions: string[],
9092
): string | undefined {
93+
getChannel().appendLine(
94+
"Search copybook using folders: " + copybookFolders.toString(),
95+
);
96+
9197
for (const workspaceFolderPath of SettingsUtils.getWorkspaceFoldersPath()) {
9298
const workspaceFolder = cleanWorkspaceFolder(workspaceFolderPath);
9399
for (const p of copybookFolders) {
@@ -114,6 +120,10 @@ export function cleanWorkspaceFolder(workspaceFolderPath: string) {
114120
return workspaceFolderPath.replace(/\/(.*:)/, "$1");
115121
}
116122

123+
export function normalizePath(folder: string): string {
124+
return vscode.Uri.file(folder).fsPath;
125+
}
126+
117127
function globSearch(
118128
workspaceFolder: string,
119129
resource: string,

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

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ suite("Tests with USER1.cbl", function () {
106106
editor.document.uri,
107107
{ tabSize: 4, insertSpaces: true },
108108
);
109+
assert.strictEqual(result.length, 1);
110+
109111
helper.assertRangeIsEqual(
110112
result[0].range,
111113
new vscode.Range(pos(34, 57), pos(34, 65)),

server/common/src/main/java/org/eclipse/lsp/cobol/common/copybook/CopybookModel.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515

1616
package org.eclipse.lsp.cobol.common.copybook;
1717

18-
import lombok.Value;
18+
import lombok.AllArgsConstructor;
19+
import lombok.Data;
1920

2021
/**
2122
* This value class represents a resolved copybook. It consists of the copybook name, its URI using
2223
* for positions and the content.
2324
*/
24-
@Value
25+
@Data
26+
@AllArgsConstructor
2527
public class CopybookModel {
2628
CopybookId copybookId;
2729
CopybookName copybookName;

server/engine/src/main/java/org/eclipse/lsp/cobol/core/engine/symbols/SymbolsRepository.java

+5-9
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@
2626
import org.eclipse.lsp.cobol.common.symbols.CodeBlockReference;
2727
import org.eclipse.lsp.cobol.common.symbols.SymbolTable;
2828
import org.eclipse.lsp.cobol.common.utils.ImplicitCodeUtils;
29-
import org.eclipse.lsp.cobol.service.CobolDocumentModel;
3029
import org.eclipse.lsp.cobol.common.AnalysisResult;
3130
import org.eclipse.lsp4j.Location;
32-
import org.eclipse.lsp4j.TextDocumentPositionParams;
31+
import org.eclipse.lsp4j.Position;
3332

3433
import java.util.*;
3534
import java.util.function.Predicate;
@@ -93,19 +92,16 @@ public Map<String, CodeBlockReference> getSectionMap(ProgramNode program) {
9392
/**
9493
* Find element using a position
9594
*
96-
* @param document the document to search in
95+
* @param uri the document uri
96+
* @param result the document analysis result to search in
9797
* @param position the position to check
9898
* @return element at specified position
9999
*/
100-
public static Optional<Context> findElementByPosition(
101-
CobolDocumentModel document, TextDocumentPositionParams position) {
102-
AnalysisResult result = document.getAnalysisResult();
100+
public static Optional<Context> findElementByPosition(String uri, AnalysisResult result, Position position) {
103101
if (result == null || result.getRootNode() == null) {
104102
return Optional.empty();
105103
}
106-
Optional<Node> node =
107-
findNodeByPosition(
108-
result.getRootNode(), position.getTextDocument().getUri(), position.getPosition());
104+
Optional<Node> node = findNodeByPosition(result.getRootNode(), uri, position);
109105

110106
return node.filter(Context.class::isInstance)
111107
.map(Context.class::cast)

0 commit comments

Comments
 (0)