Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
2d86dbd7
F
fsharp
项目概览
dotNET Platform
/
fsharp
11 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fsharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
2d86dbd7
编写于
10月 05, 2022
作者:
F
Florian Verdonck
提交者:
GitHub
10月 05, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add SynPat.ListCons. (#14010)
上级
d1bf2975
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
71 addition
and
9 deletion
+71
-9
src/Compiler/Checking/CheckPatterns.fs
src/Compiler/Checking/CheckPatterns.fs
+5
-0
src/Compiler/Service/ServiceParseTreeWalk.fs
src/Compiler/Service/ServiceParseTreeWalk.fs
+2
-1
src/Compiler/Service/ServiceParsedInputOps.fs
src/Compiler/Service/ServiceParsedInputOps.fs
+4
-2
src/Compiler/Service/ServiceXmlDocParser.fs
src/Compiler/Service/ServiceXmlDocParser.fs
+1
-0
src/Compiler/SyntaxTree/SyntaxTree.fs
src/Compiler/SyntaxTree/SyntaxTree.fs
+3
-0
src/Compiler/SyntaxTree/SyntaxTree.fsi
src/Compiler/SyntaxTree/SyntaxTree.fsi
+3
-0
src/Compiler/SyntaxTree/SyntaxTrivia.fs
src/Compiler/SyntaxTree/SyntaxTrivia.fs
+3
-0
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
+8
-0
src/Compiler/pars.fsy
src/Compiler/pars.fsy
+4
-2
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
...s/FSharp.CompilerService.SurfaceArea.netstandard.expected
+18
-0
tests/service/SyntaxTreeTests/PatternTests.fs
tests/service/SyntaxTreeTests/PatternTests.fs
+20
-4
未找到文件。
src/Compiler/Checking/CheckPatterns.fs
浏览文件 @
2d86dbd7
...
...
@@ -289,6 +289,11 @@ and TcPat warnOnUpper (cenv: cenv) env valReprInfo vFlags (patEnv: TcPatLinearEn
|
SynPat
.
Or
(
pat1
,
pat2
,
m
,
_)
->
TcPatOr
warnOnUpper
cenv
env
vFlags
patEnv
ty
pat1
pat2
m
|
SynPat
.
ListCons
(
pat1
,
pat2
,
m
,
trivia
)
->
let
longDotId
=
SynLongIdent
((
mkSynCaseName
trivia
.
ColonColonRange
opNameCons
),
[]
,
[
Some
(
FSharp
.
Compiler
.
SyntaxTrivia
.
IdentTrivia
.
OriginalNotation
"::"
)])
let
args
=
SynArgPats
.
Pats
[
SynPat
.
Tuple
(
false
,
[
pat1
;
pat2
],
m
)
]
TcPatLongIdent
warnOnUpper
cenv
env
ad
valReprInfo
vFlags
patEnv
ty
(
longDotId
,
None
,
args
,
None
,
m
)
|
SynPat
.
Ands
(
pats
,
m
)
->
TcPatAnds
warnOnUpper
cenv
env
vFlags
patEnv
ty
pats
m
...
...
src/Compiler/Service/ServiceParseTreeWalk.fs
浏览文件 @
2d86dbd7
...
...
@@ -789,7 +789,8 @@ module SyntaxTraversal =
match
p
with
|
SynPat
.
Paren
(
p
,
_)
->
traversePat
path
p
|
SynPat
.
As
(
p1
,
p2
,
_)
|
SynPat
.
Or
(
p1
,
p2
,
_,
_)
->
[
p1
;
p2
]
|>
List
.
tryPick
(
traversePat
path
)
|
SynPat
.
Or
(
p1
,
p2
,
_,
_)
|
SynPat
.
ListCons
(
p1
,
p2
,
_,
_)
->
[
p1
;
p2
]
|>
List
.
tryPick
(
traversePat
path
)
|
SynPat
.
Ands
(
ps
,
_)
|
SynPat
.
Tuple
(_,
ps
,
_)
|
SynPat
.
ArrayOrList
(_,
ps
,
_)
->
ps
|>
List
.
tryPick
(
traversePat
path
)
...
...
src/Compiler/Service/ServiceParsedInputOps.fs
浏览文件 @
2d86dbd7
...
...
@@ -619,7 +619,8 @@ module ParsedInput =
|
SynPat
.
As
(
pat1
,
pat2
,
_)
->
List
.
tryPick
walkPat
[
pat1
;
pat2
]
|
SynPat
.
Typed
(
pat
,
t
,
_)
->
walkPat
pat
|>
Option
.
orElseWith
(
fun
()
->
walkType
t
)
|
SynPat
.
Attrib
(
pat
,
Attributes
attrs
,
_)
->
walkPat
pat
|>
Option
.
orElseWith
(
fun
()
->
List
.
tryPick
walkAttribute
attrs
)
|
SynPat
.
Or
(
pat1
,
pat2
,
_,
_)
->
List
.
tryPick
walkPat
[
pat1
;
pat2
]
|
SynPat
.
Or
(
pat1
,
pat2
,
_,
_)
|
SynPat
.
ListCons
(
pat1
,
pat2
,
_,
_)
->
List
.
tryPick
walkPat
[
pat1
;
pat2
]
|
SynPat
.
LongIdent
(
typarDecls
=
typars
;
argPats
=
ConstructorPats
pats
;
range
=
r
)
->
ifPosInRange
r
(
fun
_
->
kind
)
|>
Option
.
orElseWith
(
fun
()
->
...
...
@@ -1638,7 +1639,8 @@ module ParsedInput =
walkPat
pat
List
.
iter
walkAttribute
attrs
|
SynPat
.
As
(
pat1
,
pat2
,
_)
|
SynPat
.
Or
(
pat1
,
pat2
,
_,
_)
->
List
.
iter
walkPat
[
pat1
;
pat2
]
|
SynPat
.
Or
(
pat1
,
pat2
,
_,
_)
|
SynPat
.
ListCons
(
pat1
,
pat2
,
_,
_)
->
List
.
iter
walkPat
[
pat1
;
pat2
]
|
SynPat
.
LongIdent
(
longDotId
=
ident
;
typarDecls
=
typars
;
argPats
=
ConstructorPats
pats
)
->
addLongIdentWithDots
ident
...
...
src/Compiler/Service/ServiceXmlDocParser.fs
浏览文件 @
2d86dbd7
...
...
@@ -25,6 +25,7 @@ module XmlDocParsing =
|
SynPat
.
Typed
(
pat
,
_
type
,
_
range
)
->
digNamesFrom
pat
|
SynPat
.
Attrib
(
pat
,
_
attrs
,
_
range
)
->
digNamesFrom
pat
|
SynPat
.
LongIdent
(
argPats
=
ConstructorPats
pats
)
->
pats
|>
List
.
collect
digNamesFrom
|
SynPat
.
ListCons
(
p1
,
p2
,
_,
_)
->
List
.
collect
digNamesFrom
[
p1
;
p2
]
|
SynPat
.
Tuple
(_,
pats
,
_
range
)
->
pats
|>
List
.
collect
digNamesFrom
|
SynPat
.
Paren
(
pat
,
_
range
)
->
digNamesFrom
pat
|
SynPat
.
OptionalVal
(
id
,
_)
->
[
id
.
idText
]
...
...
src/Compiler/SyntaxTree/SyntaxTree.fs
浏览文件 @
2d86dbd7
...
...
@@ -908,6 +908,8 @@ type SynPat =
|
Or
of
lhsPat
:
SynPat
*
rhsPat
:
SynPat
*
range
:
range
*
trivia
:
SynPatOrTrivia
|
ListCons
of
lhsPat
:
SynPat
*
rhsPat
:
SynPat
*
range
:
range
*
trivia
:
SynPatListConsTrivia
|
Ands
of
pats
:
SynPat
list
*
range
:
range
|
As
of
lhsPat
:
SynPat
*
rhsPat
:
SynPat
*
range
:
range
...
...
@@ -953,6 +955,7 @@ type SynPat =
|
SynPat
.
Wild
(
range
=
m
)
|
SynPat
.
Named
(
range
=
m
)
|
SynPat
.
Or
(
range
=
m
)
|
SynPat
.
ListCons
(
range
=
m
)
|
SynPat
.
Ands
(
range
=
m
)
|
SynPat
.
As
(
range
=
m
)
|
SynPat
.
LongIdent
(
range
=
m
)
...
...
src/Compiler/SyntaxTree/SyntaxTree.fsi
浏览文件 @
2d86dbd7
...
...
@@ -1050,6 +1050,9 @@ type SynPat =
/// A disjunctive pattern 'pat1 | pat2'
|
Or
of
lhsPat
:
SynPat
*
rhsPat
:
SynPat
*
range
:
range
*
trivia
:
SynPatOrTrivia
/// A conjunctive pattern 'pat1 :: pat2'
|
ListCons
of
lhsPat
:
SynPat
*
rhsPat
:
SynPat
*
range
:
range
*
trivia
:
SynPatListConsTrivia
/// A conjunctive pattern 'pat1 & pat2'
|
Ands
of
pats
:
SynPat
list
*
range
:
range
...
...
src/Compiler/SyntaxTree/SyntaxTrivia.fs
浏览文件 @
2d86dbd7
...
...
@@ -122,6 +122,9 @@ type SynUnionCaseTrivia = { BarRange: range option }
[<
NoEquality
;
NoComparison
>]
type
SynPatOrTrivia
=
{
BarRange
:
range
}
[<
NoEquality
;
NoComparison
>]
type
SynPatListConsTrivia
=
{
ColonColonRange
:
range
}
[<
NoEquality
;
NoComparison
>]
type
SynTypeDefnTrivia
=
{
...
...
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
浏览文件 @
2d86dbd7
...
...
@@ -199,6 +199,14 @@ type SynPatOrTrivia =
BarRange
:
range
}
/// Represents additional information for SynPat.Cons
[<
NoEquality
;
NoComparison
>]
type
SynPatListConsTrivia
=
{
/// The syntax range of the `::` token.
ColonColonRange
:
range
}
/// Represents additional information for SynTypeDefn
[<
NoEquality
;
NoComparison
>]
type
SynTypeDefnTrivia
=
...
...
src/Compiler/pars.fsy
浏览文件 @
2d86dbd7
...
...
@@ -3124,7 +3124,8 @@ headBindingPattern:
SynPat.Or($1, $3, rhs2 parseState 1 3, { BarRange = mBar }) }
| headBindingPattern COLON_COLON headBindingPattern
{ SynPat.LongIdent (SynLongIdent(mkSynCaseName (rhs parseState 2) opNameCons, [], [ Some (IdentTrivia.OriginalNotation "::") ]), None, None, SynArgPats.Pats [SynPat.Tuple (false, [$1;$3], rhs2 parseState 1 3)], None, lhs parseState) }
{ let mColonColon = rhs parseState 2
SynPat.ListCons($1, $3, rhs2 parseState 1 3, { ColonColonRange = mColonColon }) }
| tuplePatternElements %prec pat_tuple
{ let pats = normalizeTuplePat $1
...
...
@@ -3398,7 +3399,8 @@ parenPattern:
SynPat.Attrib($2, $1, mLhs) }
| parenPattern COLON_COLON parenPattern
{ SynPat.LongIdent (SynLongIdent(mkSynCaseName (rhs parseState 2) opNameCons, [], [ Some (IdentTrivia.OriginalNotation "::") ]), None, None, SynArgPats.Pats [ SynPat.Tuple (false, [$1;$3], rhs2 parseState 1 3) ], None, lhs parseState) }
{ let mColonColon = rhs parseState 2
SynPat.ListCons($1, $3, rhs2 parseState 1 3, { ColonColonRange = mColonColon }) }
| constrPattern { $1 }
...
...
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
浏览文件 @
2d86dbd7
...
...
@@ -8004,6 +8004,14 @@ FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType get_pat()
FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Syntax.SynType pat
FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynPat+IsInst: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Syntax.SynPat get_lhsPat()
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Syntax.SynPat get_rhsPat()
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Syntax.SynPat lhsPat
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Syntax.SynPat rhsPat
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia get_trivia()
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia trivia
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynPat+ListCons: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats argPats
FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynArgPats get_argPats()
FSharp.Compiler.Syntax.SynPat+LongIdent: FSharp.Compiler.Syntax.SynLongIdent get_longDotId()
...
...
@@ -8059,6 +8067,7 @@ FSharp.Compiler.Syntax.SynPat+Tags: Int32 DeprecatedCharRange
FSharp.Compiler.Syntax.SynPat+Tags: Int32 FromParseError
FSharp.Compiler.Syntax.SynPat+Tags: Int32 InstanceMember
FSharp.Compiler.Syntax.SynPat+Tags: Int32 IsInst
FSharp.Compiler.Syntax.SynPat+Tags: Int32 ListCons
FSharp.Compiler.Syntax.SynPat+Tags: Int32 LongIdent
FSharp.Compiler.Syntax.SynPat+Tags: Int32 Named
FSharp.Compiler.Syntax.SynPat+Tags: Int32 Null
...
...
@@ -8093,6 +8102,7 @@ FSharp.Compiler.Syntax.SynPat: Boolean IsDeprecatedCharRange
FSharp.Compiler.Syntax.SynPat: Boolean IsFromParseError
FSharp.Compiler.Syntax.SynPat: Boolean IsInstanceMember
FSharp.Compiler.Syntax.SynPat: Boolean IsIsInst
FSharp.Compiler.Syntax.SynPat: Boolean IsListCons
FSharp.Compiler.Syntax.SynPat: Boolean IsLongIdent
FSharp.Compiler.Syntax.SynPat: Boolean IsNamed
FSharp.Compiler.Syntax.SynPat: Boolean IsNull
...
...
@@ -8113,6 +8123,7 @@ FSharp.Compiler.Syntax.SynPat: Boolean get_IsDeprecatedCharRange()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsFromParseError()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsInstanceMember()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsIsInst()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsListCons()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsLongIdent()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsNamed()
FSharp.Compiler.Syntax.SynPat: Boolean get_IsNull()
...
...
@@ -8133,6 +8144,7 @@ FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewDeprecatedCharRa
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewFromParseError(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewInstanceMember(FSharp.Compiler.Syntax.Ident, FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewIsInst(FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewListCons(FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Syntax.SynPat, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewLongIdent(FSharp.Compiler.Syntax.SynLongIdent, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynValTyparDecls], FSharp.Compiler.Syntax.SynArgPats, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNamed(FSharp.Compiler.Syntax.SynIdent, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat NewNull(FSharp.Compiler.Text.Range)
...
...
@@ -8153,6 +8165,7 @@ FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+DeprecatedCharRange
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+FromParseError
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+InstanceMember
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+IsInst
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+ListCons
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+LongIdent
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Named
FSharp.Compiler.Syntax.SynPat: FSharp.Compiler.Syntax.SynPat+Null
...
...
@@ -9556,6 +9569,11 @@ FSharp.Compiler.SyntaxTrivia.SynModuleSigDeclNestedModuleTrivia: Microsoft.FShar
FSharp.Compiler.SyntaxTrivia.SynModuleSigDeclNestedModuleTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ModuleKeyword()
FSharp.Compiler.SyntaxTrivia.SynModuleSigDeclNestedModuleTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynModuleSigDeclNestedModuleTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia
FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia: FSharp.Compiler.Text.Range ColonColonRange
FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia: FSharp.Compiler.Text.Range get_ColonColonRange()
FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynPatListConsTrivia: Void .ctor(FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: FSharp.Compiler.Text.Range BarRange
FSharp.Compiler.SyntaxTrivia.SynPatOrTrivia: FSharp.Compiler.Text.Range get_BarRange()
...
...
tests/service/SyntaxTreeTests/PatternTests.fs
浏览文件 @
2d86dbd7
...
...
@@ -73,10 +73,10 @@ let (head::tail) = [ 1;2;4]
match
parseResults
with
|
ParsedInput
.
ImplFile
(
ParsedImplFileInput
(
contents
=
[
SynModuleOrNamespace
.
SynModuleOrNamespace
(
decls
=
[
SynModuleDecl
.
Let
(
bindings
=
[
SynBinding
(
headPat
=
SynPat
.
Paren
(
SynPat
.
LongIdent
(
longDotId
=
SynLongIdent
([
opColonColonIdent
],
_,
[
Some
(
IdentTrivia
.
OriginalNotation
"::"
)
])),
_
))
]
bindings
=
[
SynBinding
(
headPat
=
SynPat
.
Paren
(
pat
=
SynPat
.
ListCons
(
trivia
=
trivia
)
))
]
)
])
]))
->
Assert
.
AreEqual
(
"op_ColonColon"
,
opColonColonIdent
.
idText
)
assertRange
(
2
,
9
)
(
2
,
11
)
trivia
.
ColonColonRange
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
[<
Test
>]
...
...
@@ -92,11 +92,11 @@ match x with
|
ParsedInput
.
ImplFile
(
ParsedImplFileInput
(
contents
=
[
SynModuleOrNamespace
.
SynModuleOrNamespace
(
decls
=
[
SynModuleDecl
.
Expr
(
expr
=
SynExpr
.
Match
(
clauses
=
[
SynMatchClause
(
pat
=
SynPat
.
L
ongIdent
(
longDotId
=
SynLongIdent
([
opColonColonIdent
],
_,
[
Some
(
IdentTrivia
.
OriginalNotation
"::"
)
])
))
SynMatchClause
(
pat
=
SynPat
.
L
istCons
(
trivia
=
trivia
))
])
)
])
]))
->
Assert
.
AreEqual
(
"op_ColonColon"
,
opColonColonIdent
.
idText
)
assertRange
(
3
,
9
)
(
3
,
11
)
trivia
.
ColonColonRange
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
[<
Test
>]
...
...
@@ -122,3 +122,19 @@ match data with
])
]))
->
assertRange
(
3
,
13
)
(
5
,
13
)
trivia
.
ParenRange
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
[<
Test
>]
let
``:: in head pattern``
()
=
let
parseResults
=
getParseResults
"""
let 1 :: _ = [ 4; 5; 6 ]
"""
match
parseResults
with
|
ParsedInput
.
ImplFile
(
ParsedImplFileInput
(
contents
=
[
SynModuleOrNamespace
(
decls
=
[
SynModuleDecl
.
Let
(
bindings
=
[
SynBinding
(
headPat
=
SynPat
.
ListCons
(
trivia
=
trivia
))
])
])
]))
->
assertRange
(
2
,
6
)
(
2
,
8
)
trivia
.
ColonColonRange
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录