Skip to content

Commit c091e89

Browse files
committed
fixed a bug in which references invoked from record expressions were not counted
1 parent c37f358 commit c091e89

File tree

3 files changed

+93
-6
lines changed

3 files changed

+93
-6
lines changed

elm/built/elm.js

+16-6
Original file line numberDiff line numberDiff line change
@@ -15220,7 +15220,7 @@ var _user$project$ElmFile_References$refsInExpression = F4(
1522015220
refsInExpression:
1522115221
while (true) {
1522215222
var _p8 = expression;
15223-
_v7_14:
15223+
_v7_15:
1522415224
do {
1522515225
if (_p8.ctor === '_Tuple2') {
1522615226
switch (_p8._1.ctor) {
@@ -15351,17 +15351,27 @@ var _user$project$ElmFile_References$refsInExpression = F4(
1535115351
A2(_user$project$Types_Imports$unaliasedModuleName, _p8._1._0, imports),
1535215352
_user$project$Types_Reference$Reference(_p8._1._1),
1535315353
references);
15354+
case 'RecordAccess':
15355+
var _v20 = $arguments,
15356+
_v21 = imports,
15357+
_v22 = _p8._1._0,
15358+
_v23 = references;
15359+
$arguments = _v20;
15360+
imports = _v21;
15361+
expression = _v22;
15362+
references = _v23;
15363+
continue refsInExpression;
1535415364
case 'RecordUpdateExpression':
1535515365
return A3(
1535615366
_elm_lang$core$List$foldl,
1535715367
A2(_user$project$ElmFile_References$refsInExpression, $arguments, imports),
1535815368
references,
1535915369
A2(_elm_lang$core$List$map, _elm_lang$core$Tuple$second, _p8._1._0.updates));
1536015370
default:
15361-
break _v7_14;
15371+
break _v7_15;
1536215372
}
1536315373
} else {
15364-
break _v7_14;
15374+
break _v7_15;
1536515375
}
1536615376
} while(false);
1536715377
return references;
@@ -15370,7 +15380,7 @@ var _user$project$ElmFile_References$refsInExpression = F4(
1537015380
var _user$project$ElmFile_References$collectRefsFromDeclaration = F3(
1537115381
function (imports, declaration, references) {
1537215382
var _p12 = declaration;
15373-
_v20_5:
15383+
_v24_5:
1537415384
do {
1537515385
if (_p12.ctor === '_Tuple2') {
1537615386
switch (_p12._1.ctor) {
@@ -15397,10 +15407,10 @@ var _user$project$ElmFile_References$collectRefsFromDeclaration = F3(
1539715407
case 'Destructuring':
1539815408
return A4(_user$project$ElmFile_References$refsInExpression, _elm_lang$core$Set$empty, imports, _p12._1._1, references);
1539915409
default:
15400-
break _v20_5;
15410+
break _v24_5;
1540115411
}
1540215412
} else {
15403-
break _v20_5;
15413+
break _v24_5;
1540415414
}
1540515415
} while(false);
1540615416
return references;

elm/src/ElmFile/References.elm

+3
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ refsInExpression arguments imports expression references =
106106
( range, Elm.Syntax.Expression.QualifiedExpr moduleName name ) ->
107107
Types.References.addExternal (Types.Imports.unaliasedModuleName moduleName imports) (Reference name) references
108108

109+
( range, Elm.Syntax.Expression.RecordAccess exp _ ) ->
110+
refsInExpression arguments imports exp references
111+
109112
( range, Elm.Syntax.Expression.RecordUpdateExpression recordUpdate ) ->
110113
List.foldl (refsInExpression arguments imports) references (List.map Tuple.second recordUpdate.updates)
111114

elm/tests/ASTParsing/NestedRecord.elm

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
module ASTParsing.NestedRecord exposing (canParse)
2+
3+
import Dict
4+
import ElmFile
5+
import Expect
6+
import Set
7+
import Test exposing (Test, describe, test)
8+
import Types.Expression
9+
import Types.Reference exposing (Reference)
10+
11+
12+
canParse : Test
13+
canParse =
14+
describe "Nested Record Elm File" <|
15+
let
16+
elmFile =
17+
ElmFile.fromString "Simple.elm" nestedRecordDotElm
18+
in
19+
[ test "has expected module name" <|
20+
\_ ->
21+
Expect.equal elmFile.moduleName [ "NestedRecord" ]
22+
, test "has expected imports" <|
23+
\_ ->
24+
Expect.equal elmFile.imports
25+
{ direct =
26+
Dict.empty
27+
, aliases =
28+
Dict.empty
29+
}
30+
, test "has expected top level expressions" <|
31+
\_ ->
32+
Expect.equal elmFile.topLevelExpressions
33+
{ functions =
34+
Dict.empty
35+
|> Dict.insert "someRecord" (Types.Expression.standardExpression 2)
36+
|> Dict.insert "nested" (Types.Expression.standardExpression 6)
37+
, types =
38+
Dict.empty
39+
, typeAliases =
40+
Dict.empty
41+
}
42+
, test "has expected exposings" <|
43+
\_ ->
44+
Expect.equal elmFile.exposings
45+
{ functions =
46+
Set.empty
47+
|> Set.insert "nested"
48+
, types =
49+
Set.empty
50+
}
51+
, test "has expected references" <|
52+
\_ ->
53+
Expect.equal elmFile.references
54+
{ internal =
55+
[ Reference "someRecord" ]
56+
, external =
57+
Dict.empty
58+
}
59+
]
60+
61+
62+
nestedRecordDotElm : String
63+
nestedRecordDotElm =
64+
"""module NestedRecord exposing (nested)
65+
66+
someRecord : { a : { b : String } }
67+
someRecord =
68+
{ a = { b = "blarg" } }
69+
70+
nested : String
71+
nested =
72+
someRecord.a.b
73+
74+
"""

0 commit comments

Comments
 (0)