Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
c208e5ca
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,发现更多精彩内容 >>
未验证
提交
c208e5ca
编写于
10月 03, 2022
作者:
F
Florian Verdonck
提交者:
GitHub
10月 03, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add SynArgPatsNamePatPairsTrivia to SynArgPats.NamePatPairs. (#14009)
上级
ca85fd8f
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
57 addition
and
12 deletion
+57
-12
src/Compiler/Checking/CheckPatterns.fs
src/Compiler/Checking/CheckPatterns.fs
+3
-3
src/Compiler/Service/ServiceParseTreeWalk.fs
src/Compiler/Service/ServiceParseTreeWalk.fs
+1
-1
src/Compiler/Service/ServiceParsedInputOps.fs
src/Compiler/Service/ServiceParsedInputOps.fs
+2
-2
src/Compiler/SyntaxTree/SyntaxTree.fs
src/Compiler/SyntaxTree/SyntaxTree.fs
+2
-2
src/Compiler/SyntaxTree/SyntaxTree.fsi
src/Compiler/SyntaxTree/SyntaxTree.fsi
+1
-1
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
-1
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
...s/FSharp.CompilerService.SurfaceArea.netstandard.expected
+8
-1
tests/service/SyntaxTreeTests/PatternTests.fs
tests/service/SyntaxTreeTests/PatternTests.fs
+25
-1
未找到文件。
src/Compiler/Checking/CheckPatterns.fs
浏览文件 @
c208e5ca
...
...
@@ -471,13 +471,13 @@ and TcNullPat cenv env patEnv ty m =
and
CheckNoArgsForLiteral
args
m
=
match
args
with
|
SynArgPats
.
Pats
[]
|
SynArgPats
.
NamePatPairs
(
[],
_
)
->
()
|
SynArgPats
.
NamePatPairs
(
pats
=
[]
)
->
()
|
_
->
errorR
(
Error
(
FSComp
.
SR
.
tcLiteralDoesNotTakeArguments
()
,
m
))
and
GetSynArgPatterns
args
=
match
args
with
|
SynArgPats
.
Pats
args
->
args
|
SynArgPats
.
NamePatPairs
(
pa
irs
,
_
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
pairs
|
SynArgPats
.
NamePatPairs
(
pa
ts
=
pairs
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
pairs
and
TcArgPats
warnOnUpper
(
cenv
:
cenv
)
env
vFlags
patEnv
args
=
let
g
=
cenv
.
g
...
...
@@ -600,7 +600,7 @@ and TcPatLongIdentUnionCaseOrExnCase warnOnUpper cenv env ad vFlags patEnv ty (m
let
args
,
extraPatternsFromNames
=
match
args
with
|
SynArgPats
.
Pats
args
->
args
,
[]
|
SynArgPats
.
NamePatPairs
(
pairs
,
m
)
->
|
SynArgPats
.
NamePatPairs
(
pairs
,
m
,
_
)
->
// rewrite patterns from the form (name-N = pat-N; ...) to (..._, pat-N, _...)
// so type T = Case of name: int * value: int
// | Case(value = v)
...
...
src/Compiler/Service/ServiceParseTreeWalk.fs
浏览文件 @
c208e5ca
...
...
@@ -797,7 +797,7 @@ module SyntaxTraversal =
|
SynPat
.
LongIdent
(
argPats
=
args
)
->
match
args
with
|
SynArgPats
.
Pats
ps
->
ps
|>
List
.
tryPick
(
traversePat
path
)
|
SynArgPats
.
NamePatPairs
(
p
s
,
_
)
->
ps
|>
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
|>
List
.
tryPick
(
traversePat
path
)
|
SynArgPats
.
NamePatPairs
(
p
ats
=
ps
)
->
ps
|>
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
|>
List
.
tryPick
(
traversePat
path
)
|
SynPat
.
Typed
(
p
,
ty
,
_)
->
match
traversePat
path
p
with
|
None
->
traverseSynType
path
ty
...
...
src/Compiler/Service/ServiceParsedInputOps.fs
浏览文件 @
c208e5ca
...
...
@@ -556,7 +556,7 @@ module ParsedInput =
let
(|
ConstructorPats
|)
pats
=
match
pats
with
|
SynArgPats
.
Pats
ps
->
ps
|
SynArgPats
.
NamePatPairs
(
xs
,
_
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
xs
|
SynArgPats
.
NamePatPairs
(
pats
=
xs
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
xs
/// A recursive pattern that collect all sequential expressions to avoid StackOverflowException
let
rec
(|
Sequentials
|_|)
expr
=
...
...
@@ -1566,7 +1566,7 @@ module ParsedInput =
let
(|
ConstructorPats
|)
pats
=
match
pats
with
|
SynArgPats
.
Pats
ps
->
ps
|
SynArgPats
.
NamePatPairs
(
xs
,
_
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
xs
|
SynArgPats
.
NamePatPairs
(
pats
=
xs
)
->
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
xs
/// Returns all `Ident`s and `LongIdent`s found in an untyped AST.
let
getLongIdents
(
parsedInput
:
ParsedInput
)
:
IDictionary
<
pos
,
LongIdent
>
=
...
...
src/Compiler/SyntaxTree/SyntaxTree.fs
浏览文件 @
c208e5ca
...
...
@@ -886,12 +886,12 @@ type SynSimplePats =
type
SynArgPats
=
|
Pats
of
pats
:
SynPat
list
|
NamePatPairs
of
pats
:
(
Ident
*
range
*
SynPat
)
list
*
range
:
range
|
NamePatPairs
of
pats
:
(
Ident
*
range
*
SynPat
)
list
*
range
:
range
*
trivia
:
SynArgPatsNamePatPairsTrivia
member
x
.
Patterns
=
match
x
with
|
Pats
pats
->
pats
|
NamePatPairs
(
pats
,
_
)
->
pats
|>
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
|
NamePatPairs
(
pats
=
pats
)
->
pats
|>
List
.
map
(
fun
(_,
_,
pat
)
->
pat
)
[<
NoEquality
;
NoComparison
;
RequireQualifiedAccess
>]
type
SynPat
=
...
...
src/Compiler/SyntaxTree/SyntaxTree.fsi
浏览文件 @
c208e5ca
...
...
@@ -1024,7 +1024,7 @@ type SynSimplePats =
type
SynArgPats
=
|
Pats
of
pats
:
SynPat
list
|
NamePatPairs
of
pats
:
(
Ident
*
range
*
SynPat
)
list
*
range
:
range
|
NamePatPairs
of
pats
:
(
Ident
*
range
*
SynPat
)
list
*
range
:
range
*
trivia
:
SynArgPatsNamePatPairsTrivia
member
Patterns
:
SynPat
list
...
...
src/Compiler/SyntaxTree/SyntaxTrivia.fs
浏览文件 @
c208e5ca
...
...
@@ -257,3 +257,6 @@ type SynMemberGetSetTrivia =
AndKeyword
:
range
option
SetKeyword
:
range
option
}
[<
NoEquality
;
NoComparison
>]
type
SynArgPatsNamePatPairsTrivia
=
{
ParenRange
:
range
}
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
浏览文件 @
c208e5ca
...
...
@@ -365,3 +365,11 @@ type SynMemberGetSetTrivia =
/// The syntax range of the `set` keyword
SetKeyword
:
range
option
}
/// Represents additional information for SynArgPats.NamePatPairs
[<
NoEquality
;
NoComparison
>]
type
SynArgPatsNamePatPairsTrivia
=
{
/// The syntax range from the beginning of the `(` token till the end of the `)` token.
ParenRange
:
range
}
src/Compiler/pars.fsy
浏览文件 @
c208e5ca
...
...
@@ -3237,7 +3237,10 @@ constrPattern:
atomicPatsOrNamePatPairs:
| LPAREN namePatPairs rparen
{ SynArgPats.NamePatPairs $2, snd $2 }
{ let mParen = rhs2 parseState 1 3
let pats, m = $2
let trivia = { ParenRange = mParen }
SynArgPats.NamePatPairs(pats, m, trivia), snd $2 }
| atomicPatterns
{ let mParsed = rhs parseState 1
...
...
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
浏览文件 @
c208e5ca
...
...
@@ -5829,6 +5829,8 @@ FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.C
FSharp.Compiler.Syntax.SynArgInfo: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident] ident
FSharp.Compiler.Syntax.SynArgInfo: System.String ToString()
FSharp.Compiler.Syntax.SynArgPats
FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia get_trivia()
FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia trivia
FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range get_range()
FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: FSharp.Compiler.Text.Range range
FSharp.Compiler.Syntax.SynArgPats+NamePatPairs: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]] get_pats()
...
...
@@ -5841,7 +5843,7 @@ FSharp.Compiler.Syntax.SynArgPats: Boolean IsNamePatPairs
FSharp.Compiler.Syntax.SynArgPats: Boolean IsPats
FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsNamePatPairs()
FSharp.Compiler.Syntax.SynArgPats: Boolean get_IsPats()
FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewNamePatPairs(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.Ident,FSharp.Compiler.Text.Range,FSharp.Compiler.Syntax.SynPat]], FSharp.Compiler.Text.Range
, FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia
)
FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats NewPats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynPat])
FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+NamePatPairs
FSharp.Compiler.Syntax.SynArgPats: FSharp.Compiler.Syntax.SynArgPats+Pats
...
...
@@ -9395,6 +9397,11 @@ FSharp.Compiler.SyntaxTrivia.ParsedSigFileInputTrivia: Microsoft.FSharp.Collecti
FSharp.Compiler.SyntaxTrivia.ParsedSigFileInputTrivia: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia] get_ConditionalDirectives()
FSharp.Compiler.SyntaxTrivia.ParsedSigFileInputTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.ParsedSigFileInputTrivia: Void .ctor(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTrivia.ConditionalDirectiveTrivia], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.SyntaxTrivia.CommentTrivia])
FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia
FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia: FSharp.Compiler.Text.Range ParenRange
FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia: FSharp.Compiler.Text.Range get_ParenRange()
FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynArgPatsNamePatPairsTrivia: Void .ctor(FSharp.Compiler.Text.Range)
FSharp.Compiler.SyntaxTrivia.SynBindingTrivia
FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynBindingTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynBindingTrivia: FSharp.Compiler.SyntaxTrivia.SynBindingTrivia get_Zero()
...
...
tests/service/SyntaxTreeTests/PatternTests.fs
浏览文件 @
c208e5ca
...
...
@@ -97,4 +97,28 @@ match x with
)
])
]))
->
Assert
.
AreEqual
(
"op_ColonColon"
,
opColonColonIdent
.
idText
)
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
\ No newline at end of file
|
_
->
Assert
.
Fail
$
"Could not get valid AST, got {parseResults}"
[<
Test
>]
let
``Parentheses of SynArgPats.NamePatPairs``
()
=
let
parseResults
=
getParseResults
"""
match data with
| OnePartData( // foo
part1 = p1
(* bar *) ) -> p1
| _ -> failwith "
todo
"
"""
match
parseResults
with
|
ParsedInput
.
ImplFile
(
ParsedImplFileInput
(
contents
=
[
SynModuleOrNamespace
.
SynModuleOrNamespace
(
decls
=
[
SynModuleDecl
.
Expr
(
expr
=
SynExpr
.
Match
(
clauses
=
[
SynMatchClause
(
pat
=
SynPat
.
LongIdent
(
argPats
=
SynArgPats
.
NamePatPairs
(
trivia
=
trivia
)))
_
])
)
])
]))
->
assertRange
(
3
,
13
)
(
5
,
13
)
trivia
.
ParenRange
|
_
->
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录