Skip to content

Commit

Permalink
feat: support multiple open frege files (#34)
Browse files Browse the repository at this point in the history
Saves the state of all frege files with a hash map mapping uri ->
global.
  • Loading branch information
tricktron committed Jul 30, 2022
1 parent 473c33d commit 7dee1d7
Show file tree
Hide file tree
Showing 15 changed files with 46 additions and 52 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = 3.2.1-alpha
version = 3.3.0-alpha
gradleVersion = 7.4.2
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package ch.fhnw.thga.fregelanguageserver;

import static frege.prelude.PreludeBase.TST.performUnsafe;

import java.util.concurrent.CompletableFuture;

import org.eclipse.lsp4j.InitializeParams;
Expand All @@ -14,9 +12,6 @@
import org.eclipse.lsp4j.services.TextDocumentService;
import org.eclipse.lsp4j.services.WorkspaceService;

import ch.fhnw.thga.fregelanguageserver.compile.CompileGlobal;
import ch.fhnw.thga.fregelanguageserver.compile.CompileOptions;

public class FregeLanguageServer implements LanguageServer, LanguageClientAware
{
private final FregeTextDocumentService textService;
Expand All @@ -37,14 +32,6 @@ public LanguageClient getClient()
@Override
public CompletableFuture<InitializeResult> initialize(InitializeParams params)
{
textService.setGlobal
(
performUnsafe
(
CompileGlobal
.fromOptions(CompileOptions.standardCompileOptions.call()).call()
).call()
);
final InitializeResult res = new InitializeResult(new ServerCapabilities());
res.getCapabilities().setTextDocumentSync(TextDocumentSyncKind.Full);
res.getCapabilities().setHoverProvider(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static frege.prelude.PreludeBase.TST.performUnsafe;

import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CompletableFuture;

Expand All @@ -24,44 +25,40 @@
public class FregeTextDocumentService implements TextDocumentService
{
public static final String FREGE_LANGUAGE_ID = "frege";
public static final TGlobal STANDARD_GLOBAL = performUnsafe
(CompileGlobal.standardCompileGlobal.call()).call();
private final FregeLanguageServer simpleLanguageServer;
private String currentOpenFileContents;
private TGlobal global;
private HashMap<String, TGlobal> uriGlobals;

public FregeTextDocumentService(FregeLanguageServer server)
{
simpleLanguageServer = server;
currentOpenFileContents = "";
global = performUnsafe
(CompileGlobal.standardCompileGlobal.call()).call();
uriGlobals = new HashMap<>();
}

public void setGlobal(TGlobal global)
{
this.global = global;
}

@Override
public CompletableFuture<Hover> hover(HoverParams params)
{
return HoverService.hover(params, this.global);
TGlobal global = uriGlobals.get(params.getTextDocument().getUri());
return global == null ? null : HoverService.hover(params, global);
}

@Override
public void didOpen(DidOpenTextDocumentParams params)
{
currentOpenFileContents = params.getTextDocument().getText();
global = performUnsafe
String uri = params.getTextDocument().getUri();
TGlobal compiledGlobal = performUnsafe
(
CompileExecutor.compile
(
Thunk.lazy(currentOpenFileContents),
global
Thunk.lazy(params.getTextDocument().getText()),
STANDARD_GLOBAL
)
).call();
uriGlobals.put(uri, compiledGlobal);
DiagnosticService.publishCompilerDiagnostics(
simpleLanguageServer.getClient(),
global,
compiledGlobal,
params.getTextDocument().getUri()
);
}
Expand All @@ -70,14 +67,29 @@ public void didOpen(DidOpenTextDocumentParams params)
public void didChange(DidChangeTextDocumentParams params)
{
List<TextDocumentContentChangeEvent> changes
= params.getContentChanges();
currentOpenFileContents = changes.get(changes.size() - 1).getText();
= params.getContentChanges();
String uri = params.getTextDocument().getUri();
TGlobal compiledGlobal = performUnsafe
(
CompileExecutor.compile
(
Thunk.lazy(changes.get(changes.size() - 1).getText()),
STANDARD_GLOBAL
)
).call();
uriGlobals.put(uri, compiledGlobal);
DiagnosticService.publishCompilerDiagnostics(
simpleLanguageServer.getClient(),
compiledGlobal,
uri
);


}

@Override
public void didClose(DidCloseTextDocumentParams params)
{
currentOpenFileContents = "";
DiagnosticService.cleanCompilerDiagnostics
(
simpleLanguageServer.getClient(),
Expand All @@ -87,11 +99,5 @@ public void didClose(DidCloseTextDocumentParams params)

@Override
public void didSave(DidSaveTextDocumentParams params)
{
DiagnosticService.publishCompilerDiagnostics(
simpleLanguageServer.getClient(),
this.global,
params.getTextDocument().getUri()
);
}
{}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/compile/CompileExecutor.fr",
time=1658948162853L, jmajor=11, jminor=-1,
time=1659200053045L, jmajor=11, jminor=-1,
imps={
"frege.compiler.Classes", "ch.fhnw.thga.fregelanguageserver.compile.CompileGlobal",
"ch.fhnw.thga.fregelanguageserver.compile.CompileOptions", "frege.compiler.common.CompilerOptions",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/compile/CompileGlobal.fr",
time=1658948162095L, jmajor=11, jminor=-1,
time=1659200052355L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.compile.CompileOptions", "frege.compiler.common.CompilerOptions",
"frege.compiler.types.Global", "frege.Prelude", "frege.prelude.PreludeArrays", "frege.prelude.PreludeBase",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/compile/CompileOptions.fr",
time=1658948161221L, jmajor=11, jminor=-1,
time=1659200051382L, jmajor=11, jminor=-1,
imps={
"frege.compiler.enums.Flags", "frege.compiler.types.Global", "frege.Prelude", "frege.prelude.PreludeArrays",
"frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal", "frege.prelude.PreludeIO", "frege.prelude.PreludeList",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/diagnostic/Diagnostic.fr",
time=1658948163560L, jmajor=11, jminor=-1,
time=1659200053722L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.compile.CompileExecutor",
"ch.fhnw.thga.fregelanguageserver.compile.CompileGlobal", "frege.compiler.types.Global",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/diagnostic/DiagnosticLSP.fr",
time=1658948164070L, jmajor=11, jminor=-1,
time=1659200054226L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.diagnostic.Diagnostic", "frege.compiler.types.Global", "frege.Prelude",
"frege.prelude.PreludeArrays", "frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ public static void publishCompilerDiagnostics(
{
CompletableFuture.runAsync(() ->
{
List<Diagnostic> diagnostics = getCompilerDiagnostics(global);
client.publishDiagnostics(new PublishDiagnosticsParams(
documentUri, getCompilerDiagnostics(global)));
documentUri, diagnostics));
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/hover/Hover.fr",
time=1658948163634L, jmajor=11, jminor=-1,
time=1659200053754L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.compile.CompileExecutor",
"ch.fhnw.thga.fregelanguageserver.compile.CompileGlobal", "frege.compiler.types.Global", "frege.data.List",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/hover/HoverLSP.fr",
time=1658948164148L, jmajor=11, jminor=-1,
time=1659200054265L, jmajor=11, jminor=-1,
imps={
"frege.compiler.types.Global", "ch.fhnw.thga.fregelanguageserver.hover.Hover",
"ch.fhnw.thga.fregelanguageserver.lsp4j.PositionLSP4J", "frege.Prelude", "frege.prelude.PreludeArrays",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/lsp4j/PositionLSP4J.fr",
time=1658948162082L, jmajor=11, jminor=-1,
time=1659200052339L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.types.Position", "frege.Prelude", "frege.prelude.PreludeArrays",
"frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal", "frege.prelude.PreludeIO", "frege.prelude.PreludeList",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/lsp4j/RangeLSP4J.fr",
time=1658948162388L, jmajor=11, jminor=-1,
time=1659200052624L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.lsp4j.PositionLSP4J", "frege.Prelude", "frege.prelude.PreludeArrays",
"frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal", "frege.prelude.PreludeIO", "frege.prelude.PreludeList",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/types/Position.fr",
time=1658948161226L, jmajor=11, jminor=-1,
time=1659200051387L, jmajor=11, jminor=-1,
imps={
"frege.Prelude", "frege.prelude.PreludeArrays", "frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal",
"frege.prelude.PreludeIO", "frege.prelude.PreludeList", "frege.prelude.PreludeMonad", "frege.prelude.PreludeText",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
@SuppressWarnings("unused")
@Meta.FregePackage(
source="/Users/tricktron/github/master/frege-lsp-server/src/main/frege/ch/fhnw/thga/fregelanguageserver/types/Range.fr",
time=1658948162051L, jmajor=11, jminor=-1,
time=1659200052366L, jmajor=11, jminor=-1,
imps={
"ch.fhnw.thga.fregelanguageserver.types.Position", "frege.Prelude", "frege.prelude.PreludeArrays",
"frege.prelude.PreludeBase", "frege.prelude.PreludeDecimal", "frege.prelude.PreludeIO", "frege.prelude.PreludeList",
Expand Down

0 comments on commit 7dee1d7

Please sign in to comment.