Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
630ccc4
Rascal LSP formatting API and example.
toinehartman Jul 11, 2025
d3675c4
Provide overridable defaults for common string operations.
toinehartman Jul 14, 2025
b32d2f6
Align names with `DocumentFormattingParams`
toinehartman Jul 14, 2025
f16e17a
Implement parametric formatting.
toinehartman Jul 14, 2025
b749dcf
Ongoing design work.
toinehartman Jul 16, 2025
f1effe1
Experiment with a first formatting implementation using Box.
toinehartman Aug 6, 2025
6fc3acf
Simplify API and shift responsibilities towards DSL.
toinehartman Aug 7, 2025
bdb7989
Improve names in formatting library.
toinehartman Aug 7, 2025
a985a81
Add indentation conversion functions.
toinehartman Aug 7, 2025
0196d07
Do string modifications in Pico formatter.
toinehartman Aug 7, 2025
d1c4e3e
Update formatting API design.
toinehartman Aug 18, 2025
49b66d0
Add `mergeLines`
toinehartman Aug 18, 2025
998a115
Small fixes.
toinehartman Aug 18, 2025
551fe2a
Break new line ties by order.
toinehartman Aug 18, 2025
84c5a35
Document & fix string/formatting utils.
toinehartman Aug 18, 2025
c4b3561
Add rangeFormatting, reuse formatting.
toinehartman Aug 19, 2025
1748678
Match contribution sig in implementation.
toinehartman Aug 25, 2025
1d56010
Add missing license header.
toinehartman Aug 25, 2025
20a71ae
Document formatting service.
toinehartman Aug 25, 2025
cda1531
Use formatter from stdlib.
toinehartman Aug 25, 2025
206a57a
Change defaults based on discussion with @DavyLandman.
toinehartman Aug 27, 2025
6cdab51
Fix import to renamed module.
toinehartman Aug 28, 2025
05b2955
Format Pico examples.
toinehartman Aug 28, 2025
9561883
Inline function.
toinehartman Sep 3, 2025
7b92033
Use focus instead of Tree+loc.
toinehartman Sep 3, 2025
244da24
Implement range focus with special case for lists.
toinehartman Sep 8, 2025
69307a7
Fix comment about Rascal charcter encoding.
toinehartman Sep 8, 2025
c1b08a8
Add basic TreeSearch tests.
toinehartman Sep 10, 2025
6f5657f
Consider layout as well.
toinehartman Sep 10, 2025
49cf9be
Include partially selected element at end of range.
toinehartman Sep 10, 2025
b23a5ea
Simplify prepending element.
toinehartman Sep 10, 2025
ce46294
Test & fix list focus.
toinehartman Sep 15, 2025
f759c2e
Merge remote-tracking branch 'origin/main' into feature/lsp-formatting
toinehartman Apr 8, 2026
0810af3
Merge remote-tracking branch 'origin/main' into feature/lsp-formatting
toinehartman May 29, 2026
4d412cb
linked up the rascal formatter, in an experimental style
jurgenvinju Jun 5, 2026
fec6109
initial experiment linking the Rqascal formatter into the LSP server …
jurgenvinju Jun 5, 2026
2f52efb
Merge branch 'main' into feature/lsp-formatting
jurgenvinju Jun 8, 2026
c0e88b9
Merge branch 'feat/rascal-formatter' into feature/lsp-formatting
jurgenvinju Jun 8, 2026
b464037
added rangeFormatter for Rascal (experimental)
jurgenvinju Jun 8, 2026
1b18e4e
bumped rascal to 0.43.0-RC6
jurgenvinju Jun 8, 2026
c2c8641
Merge remote-tracking branch 'origin/main' into feature/lsp-formatting
toinehartman Jun 8, 2026
dd57c5d
Fixes for document management refactoring.
toinehartman Jun 8, 2026
c4201ce
pico formatter refactored
jurgenvinju Jun 8, 2026
3dd69f6
missing import added
jurgenvinju Jun 8, 2026
68c11a1
Add missing header.
toinehartman Jun 8, 2026
df55b71
Remove formatting util & fix references.
toinehartman Jun 8, 2026
3b53f00
Test DSL formatting.
toinehartman Jun 8, 2026
01b5f2e
late fixes
jurgenvinju Jun 23, 2026
578618a
fixes from other branch
jurgenvinju Jun 23, 2026
1b6ae22
search excludes
jurgenvinju Aug 25, 2026
7d3101a
set executable bit
jurgenvinju Aug 27, 2026
c58b7cf
resolved issue with final layout for substring formatters
jurgenvinju Aug 27, 2026
51932cb
clean up module and removed dead code and debug code
jurgenvinju Aug 27, 2026
b4bb6e9
set version number right
jurgenvinju Aug 27, 2026
71c963e
working version
jurgenvinju Aug 27, 2026
d1db887
Merge remote-tracking branch 'origin/feat/rascal-formatter' into feat…
jurgenvinju Aug 27, 2026
9b47c0f
factored FormattingOptions converter for reuse by rascal and lsp server
jurgenvinju Aug 27, 2026
a5f18cb
factored and reused formatting options converter
jurgenvinju Aug 27, 2026
d8fc8eb
fixed ambiguous overload for formatter function of Pico
jurgenvinju Aug 27, 2026
07f0e65
Merge branch 'main' into feature/lsp-formatting
jurgenvinju Aug 27, 2026
9da8b7e
fixed a broken merge
jurgenvinju Aug 27, 2026
a9b83a6
fix missing code
jurgenvinju Aug 27, 2026
0bc051b
removed sleep from import
jurgenvinju Aug 28, 2026
c7221bb
revert chai to version 4 because then it still supported plain js mod…
jurgenvinju Aug 28, 2026
baba15b
added missing header
jurgenvinju Aug 28, 2026
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
Empty file modified package-and-run.sh
100644 → 100755
Empty file.
3 changes: 2 additions & 1 deletion rascal-lsp/.vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"target": false
},
"search.exclude": {
"target": true
"target": true,
"/target/": true
},
}
8 changes: 7 additions & 1 deletion rascal-lsp/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
<dependency>
<groupId>org.rascalmpl</groupId>
<artifactId>rascal</artifactId>
<version>0.43.0-RC8</version>
<version>0.43.0-RC15-PREVIEW-REGULAR-PARSERS</version>
</dependency>
<!-- Rascal tests require JUnit 4 -->
<dependency>
Expand Down Expand Up @@ -155,6 +155,12 @@
<version>3.5.6</version>
</dependency>
</dependencies>
<configuration>
<systemPropertyVariables>
<forkMode>always</forkMode>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is this change in the pom.xml has to do with this PR?

<log4j2.configurationFactory>org.rascalmpl.vscode.lsp.log.LogRedirectConfiguration</log4j2.configurationFactory>
</systemPropertyVariables>
</configuration>
</plugin>
<plugin>
<groupId>org.rascalmpl</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public interface ILanguageContributions {
public InterruptibleFuture<IList> selectionRange(IList focus);
public InterruptibleFuture<IList> prepareCallHierarchy(IList focus);
public InterruptibleFuture<IList> incomingOutgoingCalls(IConstructor hierarchyItem, IConstructor direction);
public InterruptibleFuture<IList> formatting(IList input, IConstructor formattingOptions);

public InterruptibleFuture<ISourceLocation> prepareRename(IList focus);
public InterruptibleFuture<ITuple> rename(IList focus, String name);
Expand All @@ -88,6 +89,7 @@ public interface ILanguageContributions {
public CompletableFuture<Boolean> providesSelectionRange();
public CompletableFuture<Boolean> providesCallHierarchy();
public CompletableFuture<Boolean> providesCompletion();
public CompletableFuture<Boolean> providesFormatting();

public CompletableFuture<Boolean> specialCaseHighlighting();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ public class InterpretedLanguageContributions implements ILanguageContributions
private final CompletableFuture<@Nullable IFunction> didRenameFiles;
private final CompletableFuture<@Nullable IFunction> selectionRange;
private final CompletableFuture<@Nullable IFunction> prepareCallHierarchy;
private final CompletableFuture<@Nullable IFunction> formatting;

private final CompletableFuture<@Nullable IFunction> callHierarchyService;
private final CompletableFuture<@Nullable IFunction> completion;
private final CompletableFuture<IList> completionTriggerCharacters;
Expand All @@ -119,6 +121,7 @@ public class InterpretedLanguageContributions implements ILanguageContributions
private final CompletableFuture<Boolean> providesSelectionRange;
private final CompletableFuture<Boolean> providesCallHierarchy;
private final CompletableFuture<Boolean> providesCompletion;
private final CompletableFuture<Boolean> providesFormatting;

private final CompletableFuture<Boolean> specialCaseHighlighting;

Expand Down Expand Up @@ -169,6 +172,7 @@ public InterpretedLanguageContributions(LanguageParameter lang, IBaseTextDocumen
this.callHierarchyService = getFunctionFor(contributions, LanguageContributions.CALL_HIERARCHY, 1);
this.completion = getFunctionFor(contributions, LanguageContributions.COMPLETION);
this.completionTriggerCharacters = getContributionParameter(contributions, LanguageContributions.COMPLETION, LanguageContributions.COMPLETION_TRIGGER_CHARACTERS, VF.list(), IList.class);
this.formatting = getFunctionFor(contributions, LanguageContributions.FORMATTING);

// assign boolean properties once instead of wasting futures all the time
this.providesAnalysis = nonNull(this.analysis);
Expand All @@ -187,6 +191,7 @@ public InterpretedLanguageContributions(LanguageParameter lang, IBaseTextDocumen
this.providesSelectionRange = nonNull(this.selectionRange);
this.providesCallHierarchy = nonNull(this.prepareCallHierarchy);
this.providesCompletion = nonNull(this.completion);
this.providesFormatting = nonNull(this.formatting);

this.specialCaseHighlighting = getContributionParameter(contributions,
LanguageContributions.PARSING,
Expand Down Expand Up @@ -486,6 +491,12 @@ public CompletableFuture<IList> completionTriggerCharacters() {
return completionTriggerCharacters;
}

@Override
public InterruptibleFuture<IList> formatting(IList focus, IConstructor formattingOptions) {
debug(LanguageContributions.FORMATTING, focus.size(), formattingOptions);
return execFunction(LanguageContributions.FORMATTING, formatting, VF.list(), focus, formattingOptions);
}

private void debug(String name, Object param) {
logger.debug("{}({})", name, param);
}
Expand Down Expand Up @@ -563,6 +574,11 @@ public CompletableFuture<Boolean> providesCompletion() {
return providesCompletion;
}

@Override
public CompletableFuture<Boolean> providesFormatting() {
return providesFormatting;
}

@Override
public CompletableFuture<Boolean> providesAnalysis() {
return providesAnalysis;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ private static final <T> CompletableFuture<T> failedInitialization() {
private volatile CompletableFuture<ILanguageContributions> selectionRange = failedInitialization();
private volatile CompletableFuture<ILanguageContributions> callHierarchy = failedInitialization();
private volatile CompletableFuture<ILanguageContributions> completion = failedInitialization();
private volatile CompletableFuture<ILanguageContributions> formatting = failedInitialization();

private volatile CompletableFuture<Boolean> providesAnalysis = failedInitialization();
private volatile CompletableFuture<Boolean> providesBuild = failedInitialization();
Expand All @@ -94,6 +95,7 @@ private static final <T> CompletableFuture<T> failedInitialization() {
private volatile CompletableFuture<Boolean> providesSelectionRange = failedInitialization();
private volatile CompletableFuture<Boolean> providesCallHierarchy = failedInitialization();
private volatile CompletableFuture<Boolean> providesCompletion = failedInitialization();
private volatile CompletableFuture<Boolean> providesFormatting = failedInitialization();

private volatile CompletableFuture<Boolean> specialCaseHighlighting = failedInitialization();

Expand Down Expand Up @@ -172,6 +174,7 @@ private synchronized void calculateRouting() {
selectionRange = findFirstOrDefault(ILanguageContributions::providesSelectionRange, "selectionRange");
callHierarchy = findFirstOrDefault(ILanguageContributions::providesCallHierarchy, "callHierarchy");
completion = findFirstOrDefault(ILanguageContributions::providesCompletion, "completion");
formatting = findFirstOrDefault(ILanguageContributions::providesFormatting, "formatting");

providesAnalysis = anyTrue(ILanguageContributions::providesAnalysis);
providesBuild = anyTrue(ILanguageContributions::providesBuild);
Expand All @@ -189,6 +192,7 @@ private synchronized void calculateRouting() {
providesSelectionRange = anyTrue(ILanguageContributions::providesSelectionRange);
providesCallHierarchy = anyTrue(ILanguageContributions::providesCallHierarchy);
providesCompletion = anyTrue(ILanguageContributions::providesCompletion);
providesFormatting = anyTrue(ILanguageContributions::providesFormatting);

// Always use the special-case highlighting status of *the first*
// contribution (possibly using the default value in the Rascal ADT if
Expand Down Expand Up @@ -350,6 +354,11 @@ public InterruptibleFuture<IList> selectionRange(IList focus) {
return flatten(selectionRange, c -> c.selectionRange(focus));
}

@Override
public InterruptibleFuture<IList> formatting(IList focus, IConstructor formattingOptions) {
return flatten(formatting, c -> c.formatting(focus, formattingOptions));
}

@Override
public InterruptibleFuture<IList> completion(IList focus, IInteger cursorOffset, IConstructor trigger) {
return flatten(completion, c -> c.completion(focus, cursorOffset, trigger));
Expand Down Expand Up @@ -449,6 +458,11 @@ public CompletableFuture<Boolean> providesCompletion() {
return providesCompletion;
}

@Override
public CompletableFuture<Boolean> providesFormatting() {
return providesFormatting;
}

@Override
public CompletableFuture<Boolean> specialCaseHighlighting() {
return specialCaseHighlighting;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,11 @@ public CompletableFuture<IList> completionTriggerCharacters() {
return completable(VF.list());
}

@Override
public InterruptibleFuture<IList> formatting(IList input, IConstructor formattingOptions) {
return interruptible(VF.list());
}

@Override
public CompletableFuture<Boolean> providesAnalysis() {
return falsy;
Expand Down Expand Up @@ -279,6 +284,11 @@ public CompletableFuture<Boolean> providesCompletion() {
return falsy;
}

@Override
public CompletableFuture<Boolean> providesFormatting() {
return falsy;
}

@Override
public CompletableFuture<Boolean> specialCaseHighlighting() {
return falsy;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.eclipse.lsp4j.CodeAction;
import org.eclipse.lsp4j.CodeActionParams;
import org.eclipse.lsp4j.CodeLens;
import org.eclipse.lsp4j.CodeLensOptions;
import org.eclipse.lsp4j.CodeLensParams;
import org.eclipse.lsp4j.Command;
import org.eclipse.lsp4j.CompletionItem;
Expand All @@ -75,12 +76,17 @@
import org.eclipse.lsp4j.DidCloseTextDocumentParams;
import org.eclipse.lsp4j.DidOpenTextDocumentParams;
import org.eclipse.lsp4j.DidSaveTextDocumentParams;
import org.eclipse.lsp4j.DocumentFormattingParams;
import org.eclipse.lsp4j.DocumentRangeFormattingParams;
import org.eclipse.lsp4j.DocumentSymbol;
import org.eclipse.lsp4j.DocumentSymbolParams;
import org.eclipse.lsp4j.ExecuteCommandOptions;
import org.eclipse.lsp4j.DocumentSymbolParams;

Check warning on line 84 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/parametric/ParametricTextDocumentService.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this duplicated import.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPda-FpLyuTn8IwiU&open=AaBHPda-FpLyuTn8IwiU&pullRequest=677
import org.eclipse.lsp4j.FileDelete;
import org.eclipse.lsp4j.FileRename;
import org.eclipse.lsp4j.FoldingRange;
import org.eclipse.lsp4j.FoldingRangeRequestParams;
import org.eclipse.lsp4j.FormattingOptions;

Check warning on line 89 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/parametric/ParametricTextDocumentService.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'org.eclipse.lsp4j.FormattingOptions'.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPda-FpLyuTn8IwiV&open=AaBHPda-FpLyuTn8IwiV&pullRequest=677
import org.eclipse.lsp4j.Hover;
import org.eclipse.lsp4j.HoverParams;
import org.eclipse.lsp4j.ImplementationParams;
Expand All @@ -98,6 +104,7 @@
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.ReferenceParams;
import org.eclipse.lsp4j.RenameFilesParams;
import org.eclipse.lsp4j.RenameOptions;
import org.eclipse.lsp4j.RenameParams;
import org.eclipse.lsp4j.SelectionRange;
import org.eclipse.lsp4j.SelectionRangeParams;
Expand All @@ -111,6 +118,8 @@
import org.eclipse.lsp4j.TextDocumentIdentifier;
import org.eclipse.lsp4j.TextDocumentItem;
import org.eclipse.lsp4j.TextDocumentSyncKind;
import org.eclipse.lsp4j.TextEdit;
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier;

Check warning on line 122 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/parametric/ParametricTextDocumentService.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'org.eclipse.lsp4j.VersionedTextDocumentIdentifier'.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPda-FpLyuTn8IwiW&open=AaBHPda-FpLyuTn8IwiW&pullRequest=677
import org.eclipse.lsp4j.WorkspaceEdit;
import org.eclipse.lsp4j.WorkspaceFolder;
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException;
Expand All @@ -120,6 +129,7 @@
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode;
import org.eclipse.lsp4j.services.LanguageClient;
import org.eclipse.lsp4j.services.LanguageClientAware;
import org.eclipse.lsp4j.util.Ranges;
import org.rascalmpl.uri.URIResolverRegistry;
import org.rascalmpl.uri.URIUtil;
import org.rascalmpl.values.IRascalValueFactory;
Expand All @@ -138,6 +148,7 @@
import org.rascalmpl.vscode.lsp.parametric.model.ParametricFileFacts;
import org.rascalmpl.vscode.lsp.parametric.model.ParametricSummary;
import org.rascalmpl.vscode.lsp.parametric.model.ParametricSummary.SummaryLookup;
import org.rascalmpl.vscode.lsp.rascal.RascalLanguageServices;

Check warning on line 151 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/parametric/ParametricTextDocumentService.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'org.rascalmpl.vscode.lsp.rascal.RascalLanguageServices'.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPda-FpLyuTn8IwiX&open=AaBHPda-FpLyuTn8IwiX&pullRequest=677
import org.rascalmpl.vscode.lsp.rascal.conversion.CallHierarchy;
import org.rascalmpl.vscode.lsp.rascal.conversion.CodeActions;
import org.rascalmpl.vscode.lsp.rascal.conversion.Completion;
Expand All @@ -149,6 +160,7 @@
import org.rascalmpl.vscode.lsp.rascal.conversion.SelectionRanges;
import org.rascalmpl.vscode.lsp.rascal.conversion.SemanticTokenizer;
import org.rascalmpl.vscode.lsp.uri.LSPOpenFileRedirector;
import org.rascalmpl.vscode.lsp.util.FormattingOptionsTool;
import org.rascalmpl.vscode.lsp.util.Maps;
import org.rascalmpl.vscode.lsp.util.Versioned;
import org.rascalmpl.vscode.lsp.util.concurrent.CompletableFutureUtils;
Expand Down Expand Up @@ -227,6 +239,23 @@

// Register document sync statically
result.setTextDocumentSync(TextDocumentSyncKind.Full);

// JV: this block came back in a merge conflict. Should it be deleted?
result.setHoverProvider(true);
result.setReferencesProvider(true);
result.setDocumentSymbolProvider(true);
result.setImplementationProvider(true);
result.setSemanticTokensProvider(SemanticTokenizer.options());
result.setCodeActionProvider(true);
result.setCodeLensProvider(new CodeLensOptions(false));
result.setRenameProvider(Either.forRight(new RenameOptions(true)));
result.setExecuteCommandProvider(new ExecuteCommandOptions(Collections.singletonList(getRascalMetaCommandName())));
result.setDocumentFormattingProvider(true);
result.setDocumentRangeFormattingProvider(true);
result.setInlayHintProvider(true);
result.setSelectionRangeProvider(true);
result.setFoldingRangeProvider(true);
result.setCallHierarchyProvider(true);
}

private String getRascalMetaCommandName() {
Expand Down Expand Up @@ -711,6 +740,50 @@
return CodeActions.mergeAndConvertCodeActions(this, dedicatedLanguageName, contribs.getName(), quickfixes, codeActions);
}

@Override
public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormattingParams params) {
logger.debug("Formatting: {}", params);

var uri = Locations.toLoc(params.getTextDocument());
final ILanguageContributions contribs = contributions(uri);

// call the `formatting` implementation of the relevant language contribution
return getFile(uri)
.getCurrentTreeAsync(true)
.thenApply(Versioned::get)
.thenCompose(tree -> {
final var opts = FormattingOptionsTool.translate(params.getOptions());
return contribs.formatting(VF.list(tree), opts).get();
})
.thenApply(l -> DocumentChanges.translateTextEdits(l, getColumnMaps()));
}

@Override
public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRangeFormattingParams params) {
logger.debug("Formatting range: {}", params);

var uri = Locations.toLoc(params.getTextDocument());
Range range = params.getRange();
final ILanguageContributions contribs = contributions(uri);

// call the `formatting` implementation of the relevant language contribution
return getFile(uri)
.getCurrentTreeAsync(true)
.thenApply(Versioned::get)
.thenCompose(tree -> {
var r = Locations.setRange(uri, range, getColumnMaps());
var focus = TreeSearch.computeFocusList(tree, r.getBeginLine(), r.getBeginColumn(), r.getEndLine(), r.getEndColumn());

IConstructor opts = FormattingOptionsTool.translate(params.getOptions());
return contribs.formatting(focus, opts).get();
})
// convert the document changes
.thenApply(l -> DocumentChanges.translateTextEdits(l, getColumnMaps())
.stream()
.filter(e -> Ranges.containsRange(range, e.getRange()))
.collect(Collectors.toList()));
}

private CompletableFuture<IList> computeCodeActions(final ILanguageContributions contribs, final int startLine, final int startColumn, ITree tree) {
IList focus = TreeSearch.computeFocusList(tree, startLine, startColumn);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ private LanguageContributions () {}
public static final String CALL_HIERARCHY = "callHierarchy";
public static final String COMPLETION = "completion";
public static final String COMPLETION_TRIGGER_CHARACTERS = "additionalTriggerCharacters";
public static final String FORMATTING = "formatting";

public static final String RENAME_SERVICE = "renameService";
public static final String PREPARE_RENAME_SERVICE = "prepareRenameService";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.eclipse.lsp4j.FormattingOptions;
import org.eclipse.lsp4j.jsonrpc.ResponseErrorException;
import org.eclipse.lsp4j.jsonrpc.messages.ResponseError;
import org.eclipse.lsp4j.jsonrpc.messages.ResponseErrorCode;
Expand All @@ -73,7 +74,9 @@
import org.rascalmpl.vscode.lsp.uri.LSPOpenFileResolver;
import org.rascalmpl.vscode.lsp.util.EvaluatorUtil;
import org.rascalmpl.vscode.lsp.util.EvaluatorUtil.LSPContext;
import org.rascalmpl.vscode.lsp.util.FormattingOptionsTool;
import org.rascalmpl.vscode.lsp.util.RascalServices;
import org.rascalmpl.vscode.lsp.util.Versioned;

Check warning on line 79 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/rascal/RascalLanguageServices.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'org.rascalmpl.vscode.lsp.util.Versioned'.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPdeFFpLyuTn8IwiZ&open=AaBHPdeFFpLyuTn8IwiZ&pullRequest=677
import org.rascalmpl.vscode.lsp.util.concurrent.InterruptibleFuture;
import org.rascalmpl.vscode.lsp.util.locations.Locations;

Expand Down Expand Up @@ -128,7 +131,7 @@
var context = new LSPContext(exec, docService, workspaceService, client);

shortRunningTaskEvaluator = makeFutureEvaluator(context, "Rascal tasks", monitor, pcfg, "lang::rascal::lsp::DocumentSymbols", "lang::rascal::lsp::Templates", "lang::rascal::lsp::Analyzer");
semanticEvaluator = makeFutureEvaluator(context, "Rascal semantics", monitor, compilerPcfg, "lang::rascalcore::check::Summary", "lang::rascal::lsp::refactor::Rename", "lang::rascal::lsp::Actions");
semanticEvaluator = makeFutureEvaluator(context, "Rascal semantics", monitor, compilerPcfg, "lang::rascalcore::check::Summary", "lang::rascal::lsp::refactor::Rename", "lang::rascal::lsp::Actions", "lang::rascal::lsp::Formatter");

Check failure on line 134 in rascal-lsp/src/main/java/org/rascalmpl/vscode/lsp/rascal/RascalLanguageServices.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Define a constant instead of duplicating this literal "lang::rascal::lsp::Actions" 3 times.

See more on https://sonarcloud.io/project/issues?id=usethesource_rascal-language-servers&issues=AaBHPdeFFpLyuTn8IwiY&open=AaBHPdeFFpLyuTn8IwiY&pullRequest=677
compilerEvaluator = makeFutureEvaluator(context, "Rascal compiler", monitor, compilerPcfg, "lang::rascal::lsp::IDECheckerWrapper");
actionStore = semanticEvaluator.thenApply(e -> ((ModuleEnvironment) e.getModule("lang::rascal::lsp::Actions")).getStore());
rascalTextDocumentService = docService;
Expand Down Expand Up @@ -392,6 +395,18 @@
return result;
}

public CompletableFuture<IList> format(IList focus, FormattingOptions options) {
return runEvaluator(
"Formatting",
semanticEvaluator,
eval -> (IList) eval.call("rascalFormattingService", focus, FormattingOptionsTool.translate(options)),
VF.list(),
exec,
false,
client
).get();
}

public CompletableFuture<IList> parseCodeActions(String command) {
return actionStore.thenApply(commandStore -> {
try {
Expand Down
Loading
Loading