Compare commits
4 Commits
a40956a4cc
...
697c5f2641
| Author | SHA1 | Date | |
|---|---|---|---|
| 697c5f2641 | |||
| babbd01975 | |||
| c014233987 | |||
| aa6604038b |
@@ -23,7 +23,7 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
let serverOptions: ServerOptions
|
||||
if (cmd) {
|
||||
serverOptions = {
|
||||
run: { command: "node", args: [cmd], transport: TransportKind.pipe },
|
||||
run: { command: "node", args: ['--heapsnapshot-signal=SIGUSR2',cmd], transport: TransportKind.pipe },
|
||||
debug: { command: "node", args: [cmd], transport: TransportKind.pipe },
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -16,6 +16,8 @@ import {
|
||||
Location,
|
||||
TextDocumentIdentifier,
|
||||
} from "vscode-languageserver/node";
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { TextDocument } from "vscode-languageserver-textdocument";
|
||||
|
||||
const connection = createConnection(ProposedFeatures.all);
|
||||
@@ -70,16 +72,18 @@ async function runChange() {
|
||||
console.log('STALE result not sent for', uri)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
|
||||
documents.onDidChangeContent(async (change) => {
|
||||
console.log('DIDCHANGE', change.document.uri)
|
||||
const uri = change.document.uri;
|
||||
const text = change.document.getText();
|
||||
// update/invalidate happens now, check happens on quiesce.
|
||||
writeCache(path.basename(uri), text);
|
||||
LSP_updateFile(uri, text);
|
||||
addChange(change.document);
|
||||
});
|
||||
@@ -138,6 +142,21 @@ connection.onInitialize((_params: InitializeParams): InitializeResult => ({
|
||||
},
|
||||
}));
|
||||
|
||||
function writeCache(fn: string, content: string) {
|
||||
const home = process.env.HOME;
|
||||
if (!home) return;
|
||||
const dname = path.join(home, '.cache/newt-lsp');
|
||||
const fname = path.join(dname, fn);
|
||||
try {
|
||||
fs.mkdirSync(dname, {recursive: true});
|
||||
} catch (e) {
|
||||
}
|
||||
try {
|
||||
fs.writeFileSync(fname, content, 'utf8');
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
documents.listen(connection);
|
||||
connection.listen();
|
||||
console.log('STARTED')
|
||||
|
||||
@@ -283,11 +283,8 @@ const language: EditorDelegate = {
|
||||
});
|
||||
}
|
||||
setOutput(res.output)
|
||||
// less flashy version
|
||||
if (state.selected.value === JAVASCRIPT)
|
||||
ipc.sendMessage("compile", [fileName, "javascript"]).then(js => state.javascript.value = bundle(js));
|
||||
if (state.selected.value === SCHEME)
|
||||
ipc.sendMessage("compile", [fileName, "scheme"]).then(scheme=> state.scheme.value = scheme);
|
||||
state.javascript.value = ""
|
||||
state.scheme.value = ""
|
||||
return diags;
|
||||
} catch (e) {
|
||||
console.log("ERR", e);
|
||||
|
||||
@@ -96,7 +96,7 @@ erase env t sp = case t of
|
||||
eraseSpine env (LetRec fc nm ty u' v') sp Nothing
|
||||
(Bnd fc k) => do
|
||||
case getAt (cast k) env of
|
||||
Nothing => error fc "bad index \{show k}"
|
||||
Nothing => error fc "Erase: bad index \{show k}"
|
||||
Just (nm, Zero, ty) => error fc "used erased value \{show nm} (FIXME FC may be wrong here)"
|
||||
Just (nm, Many, ty) => eraseSpine env t sp ty
|
||||
(UU fc) => eraseSpine env t sp (Just $ UU fc)
|
||||
|
||||
@@ -12,7 +12,7 @@ import Data.SortedMap
|
||||
|
||||
eval : Env -> Tm -> M Val
|
||||
|
||||
-- REVIEW everything is evalutated whether it's needed or not
|
||||
-- REVIEW everything is evaluated whether it's needed or not
|
||||
-- It would be nice if the environment were lazy.
|
||||
-- e.g. case is getting evaluated when passed to a function because
|
||||
-- of dependencies in pi-types, even if the dependency isn't used
|
||||
@@ -50,7 +50,7 @@ unlet : Env -> Val -> M Val
|
||||
unlet env t@(VVar fc k sp) = case lookupVar env k of
|
||||
Just tt@(VVar fc' k' sp') => do
|
||||
debug $ \ _ => "lookup \{show k} is \{show tt}"
|
||||
if k' == k then pure t else (vappSpine (VVar fc' k' sp') sp >>= unlet env)
|
||||
if k' == k then pure t else (vappSpine tt sp >>= unlet env)
|
||||
Just t => vappSpine t sp >>= unlet env
|
||||
Nothing => do
|
||||
debug $ \ _ => "lookup \{show k} is Nothing in env \{show env}"
|
||||
|
||||
@@ -310,7 +310,6 @@ processInstance ns instfc ty decls = do
|
||||
vdcty@(VPi _ nm icit rig a b) <- eval Nil dcty
|
||||
| x => error (getFC x) "dcty not Pi"
|
||||
debug $ \ _ => "dcty \{render 90 $ pprint Nil dcty}"
|
||||
let (_,args) = funArgs codomain
|
||||
|
||||
debug $ \ _ => "traverse \{show $ map show args}"
|
||||
-- This is a little painful because we're reverse engineering the
|
||||
|
||||
@@ -165,7 +165,8 @@ rawTokenise ts@(TS sl sc toks chars) = case chars of
|
||||
doChar : Char -> List Char -> Either Error TState
|
||||
doChar c cs = if elem c standalone
|
||||
then rawTokenise (TS sl (sc + 1) (toks :< mktok True sl (sc + 1) Symbol (pack $ c :: Nil)) cs)
|
||||
else let kind = if isDigit c then Number else if isUpper c then UIdent else Ident in
|
||||
else if isDigit c then doRest (TS sl sc toks (c :: cs)) Number isDigit Lin
|
||||
else let kind = if isUpper c then UIdent else Ident in
|
||||
doRest (TS sl sc toks (c :: cs)) kind isIdent Lin
|
||||
|
||||
|
||||
|
||||
@@ -456,8 +456,7 @@ debugLog a = putStrLn (debugStr a)
|
||||
|
||||
pfunc stringToInt : String → Int := `(s) => {
|
||||
let rval = Number(s)
|
||||
if (isNaN(rval)) throw new Error(s + " is NaN")
|
||||
return rval
|
||||
return isNaN(rval) ? 0 : rval
|
||||
}`
|
||||
|
||||
class Foldable (m : U → U) where
|
||||
|
||||
9
tests/Number.newt
Normal file
9
tests/Number.newt
Normal file
@@ -0,0 +1,9 @@
|
||||
module Number
|
||||
|
||||
import Prelude
|
||||
|
||||
add : Int → Int → Int
|
||||
add a b = a + b
|
||||
|
||||
main : IO Unit
|
||||
main = printLn $ add 2$ 40
|
||||
1
tests/Number.newt.golden
Normal file
1
tests/Number.newt.golden
Normal file
@@ -0,0 +1 @@
|
||||
42
|
||||
Reference in New Issue
Block a user