Skip to content

Commit 6d3e406

Browse files
Update for PureScript 0.15 and support parsing negative type-level integers (#42)
1 parent 537be45 commit 6d3e406

File tree

12 files changed

+64
-31
lines changed

12 files changed

+64
-31
lines changed

.github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ jobs:
1414

1515
- uses: purescript-contrib/setup-purescript@main
1616
with:
17-
purescript: "0.14.5"
18-
spago: "0.20.3"
17+
purescript: "0.15.0"
18+
spago: "0.20.9"
1919
psa: "0.8.2"
2020
purs-tidy: "latest"
2121

bench/bench.dhall

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ in conf // {
2929
, "ordered-collections"
3030
, "partial"
3131
, "prelude"
32-
, "psci-support"
3332
, "st"
3433
, "strings"
3534
, "strings"

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
"private": true,
33
"scripts": {
44
"parse-package-set": "spago -x parse-package-set/parse-package-set.dhall run",
5-
"bench-file": "spago -x bench/bench.dhall build && node --expose-gc -e \"require('./output/BenchFile/index.js').main()\"",
5+
"bench-file": "spago -x bench/bench.dhall build && node --expose-gc --input-type=\"module\" -e \"import { main } from './output/BenchFile/index.js';main()\"",
66
"format": "purs-tidy format-in-place src test bench parse-package-set",
77
"check": "purs-tidy check src test bench parse-package-set"
88
},
99
"devDependencies": {
10-
"purescript": "^0.14.0",
11-
"purs-tidy": "^0.3.0",
12-
"spago": "^0.19.1"
10+
"purescript": "^0.15.0",
11+
"purs-tidy": "^0.8.0",
12+
"spago": "^0.20.9"
1313
}
1414
}

packages.dhall

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
let upstream =
2-
https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210304/packages.dhall sha256:c88151fe7c05f05290224c9c1ae4a22905060424fb01071b691d3fe2e5bad4ca
2+
https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220507/packages.dhall
3+
sha256:cf54330f3bc1b25a093b69bff8489180c954b43668c81288901a2ec29a08cc64
34

45
in upstream

parse-package-set/Main.js

+17-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
const fs = require("fs");
2-
const os = require("os");
3-
const path = require("path");
4-
const process = require("process");
1+
import { mkdtempSync } from "fs";
2+
import { tmpdir } from "os";
3+
import { join } from "path";
4+
import { hrtime } from "process";
55

6-
exports.tmpdir = (prefix) => () =>
7-
fs.mkdtempSync(path.join(os.tmpdir(), prefix), "utf-8");
8-
9-
exports.hrtime = () => {
10-
const t = process.hrtime()
11-
return { seconds: t[0], nanos: t[1] };
6+
const tmpdirImpl = function (prefix) {
7+
return () => mkdtempSync(join(tmpdir(), prefix), "utf-8");
128
};
9+
export { tmpdirImpl as tmpdir };
1310

14-
exports.hrtimeDiff = (old) => () => {
15-
const t = process.hrtime([old.seconds, old.nanos]);
11+
const hrtimeImpl = function () {
12+
const t = hrtime();
1613
return { seconds: t[0], nanos: t[1] };
1714
};
15+
export { hrtimeImpl as hrtime };
16+
17+
export function hrtimeDiff(old) {
18+
return () => {
19+
const t = hrtime([old.seconds, old.nanos]);
20+
return { seconds: t[0], nanos: t[1] };
21+
};
22+
}

parse-package-set/Main.purs

+1-2
Original file line numberDiff line numberDiff line change
@@ -154,12 +154,11 @@ main = runAff_ (either throwException mempty) do
154154
[ "Error: cycle detected in module graph"
155155
]
156156

157-
-- TODO: Upgrade packages ref to 0.14 package set
158157
defaultSpagoDhall :: String
159158
defaultSpagoDhall = Array.intercalate "\n"
160159
[ "{ name = \"test-parser\""
161160
, ", dependencies = [] : List Text"
162-
, ", packages = https://github.com/purescript/package-sets/releases/download/psc-0.14.0-20210304/packages.dhall sha256:c88151fe7c05f05290224c9c1ae4a22905060424fb01071b691d3fe2e5bad4ca"
161+
, ", packages = https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220507/packages.dhall sha256:cf54330f3bc1b25a093b69bff8489180c954b43668c81288901a2ec29a08cc64"
163162
, ", sources = [] : List Text"
164163
, "}"
165164
]

parse-package-set/parse-package-set.dhall

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ in conf // {
3535
, "parallel"
3636
, "partial"
3737
, "prelude"
38-
, "psci-support"
3938
, "st"
4039
, "strings"
4140
, "transformers"

spago.dhall

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{ name = "language-cst-parser"
2+
, license = "MIT"
3+
, repository = "https://github.com/natefaubion/purescript-language-cst-parser.git"
24
, dependencies =
35
[ "arrays"
46
, "console"

src/PureScript/CST/Parser.purs

+8-3
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,8 @@ parseType3 = defer \_ -> do
423423
Just os -> TypeOp ty os
424424

425425
parseType4 :: Parser (Recovered Type)
426-
parseType4 = defer \_ ->
427-
parseType5
426+
parseType4 = defer \_ -> do
427+
parseTypeNegative <|> parseType5
428428

429429
parseType5 :: Parser (Recovered Type)
430430
parseType5 = defer \_ -> do
@@ -439,7 +439,7 @@ parseTypeAtom = defer \_ ->
439439
TypeVar <$> parseIdent
440440
<|> TypeConstructor <$> parseQualifiedProper
441441
<|> uncurry TypeString <$> parseString
442-
<|> uncurry TypeInt <$> parseInt
442+
<|> uncurry (TypeInt Nothing) <$> parseInt
443443
<|> parseTypeParens
444444
<|> TypeRecord <$> braces parseRow
445445
<|> TypeOpName <$> parseQualifiedSymbol
@@ -456,6 +456,11 @@ parseTypeParens = do
456456
<|> parseTypeParen open
457457
<|> parseEmptyRow open
458458

459+
parseTypeNegative :: Parser (Recovered Type)
460+
parseTypeNegative = do
461+
negative <- tokKeyOperator "-"
462+
uncurry (TypeInt (Just negative)) <$> parseInt
463+
459464
parseRowParen :: SourceToken -> Parser (Recovered Type)
460465
parseRowParen open = do
461466
Tuple label separator <- try $ Tuple <$> parseLabel <*> tokDoubleColon

src/PureScript/CST/Range.purs

+10-4
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,14 @@ instance rangeOfType :: RangeOf e => RangeOf (Type e) where
143143
rangeOf n
144144
TypeString t _ ->
145145
t.range
146-
TypeInt t _ ->
147-
t.range
146+
TypeInt neg t _ ->
147+
case neg of
148+
Nothing ->
149+
t.range
150+
Just n ->
151+
{ start: n.range.start
152+
, end: t.range.end
153+
}
148154
TypeRow w ->
149155
rangeOf w
150156
TypeRecord w ->
@@ -194,8 +200,8 @@ instance tokensOfType :: TokensOf e => TokensOf (Type e) where
194200
tokensOf n
195201
TypeString t _ ->
196202
singleton t
197-
TypeInt t _ ->
198-
singleton t
203+
TypeInt neg t _ ->
204+
foldMap singleton neg <> singleton t
199205
TypeRow w ->
200206
tokensOf w
201207
TypeRecord w ->

src/PureScript/CST/Types.purs

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ data Type e
166166
| TypeWildcard SourceToken
167167
| TypeHole (Name Ident)
168168
| TypeString SourceToken String
169-
| TypeInt SourceToken IntValue
169+
| TypeInt (Maybe SourceToken) SourceToken IntValue
170170
| TypeRow (Wrapped (Row e))
171171
| TypeRecord (Wrapped (Row e))
172172
| TypeForall SourceToken (NonEmptyArray (TypeVarBinding e)) SourceToken (Type e)

test/Main.purs

+17
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,20 @@ main = do
144144
true
145145
_ ->
146146
false
147+
148+
assertParse "Negative type-level integers"
149+
"""
150+
cons
151+
:: forall len len_plus_1 elem
152+
. Add 1 len len_plus_1
153+
=> Compare len (-1) GT
154+
=> elem
155+
-> Vect len elem
156+
-> Vect len_plus_1 elem
157+
cons elem (Vect arr) = Vect (A.cons elem arr)
158+
"""
159+
case _ of
160+
(ParseSucceeded _ :: RecoveredParserResult Declaration) ->
161+
true
162+
_ ->
163+
false

0 commit comments

Comments
 (0)