Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
5bf11999
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,发现更多精彩内容 >>
未验证
提交
5bf11999
编写于
5月 31, 2022
作者:
F
Florian Verdonck
提交者:
GitHub
5月 31, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add equals token SynValSigTrivia. (#13210)
Include optional expression in the range if present.
上级
5b1a3ae5
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
73 addition
and
12 deletion
+73
-12
src/Compiler/SyntaxTree/SyntaxTrivia.fs
src/Compiler/SyntaxTree/SyntaxTrivia.fs
+3
-2
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
+3
-0
src/Compiler/pars.fsy
src/Compiler/pars.fsy
+21
-9
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
...s/FSharp.CompilerService.SurfaceArea.netstandard.expected
+3
-1
tests/service/Symbols.fs
tests/service/Symbols.fs
+43
-0
未找到文件。
src/Compiler/SyntaxTree/SyntaxTrivia.fs
浏览文件 @
5bf11999
...
...
@@ -161,5 +161,6 @@ type SynModuleOrNamespaceSigTrivia =
[<
NoEquality
;
NoComparison
>]
type
SynValSigTrivia
=
{
ValKeyword
:
range
option
WithKeyword
:
range
option
}
static
member
Zero
:
SynValSigTrivia
=
{
ValKeyword
=
None
;
WithKeyword
=
None
}
WithKeyword
:
range
option
EqualsRange
:
range
option
}
static
member
Zero
:
SynValSigTrivia
=
{
ValKeyword
=
None
;
WithKeyword
=
None
;
EqualsRange
=
None
}
src/Compiler/SyntaxTree/SyntaxTrivia.fsi
浏览文件 @
5bf11999
...
...
@@ -318,6 +318,9 @@ type SynValSigTrivia =
/// The syntax range of the `with` keyword
WithKeyword
:
range
option
/// The syntax range of the `=` token.
EqualsRange
:
range
option
}
static
member
Zero
:
SynValSigTrivia
src/Compiler/pars.fsy
浏览文件 @
5bf11999
...
...
@@ -860,24 +860,32 @@ moduleSpfn:
valSpfn:
| opt_attributes opt_declVisibility VAL opt_attributes opt_inline opt_mutable opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints optLiteralValueSpfn
{ if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2))
let attr1, attr2, isInline, isMutable, vis2, id, doc, explicitValTyparDecls, (ty, arity),
konst
= ($1), ($4), ($5), ($6), ($7), ($8), grabXmlDoc(parseState, $1, 1), ($9), ($11), ($12)
let attr1, attr2, isInline, isMutable, vis2, id, doc, explicitValTyparDecls, (ty, arity),
(mEquals, konst: SynExpr option)
= ($1), ($4), ($5), ($6), ($7), ($8), grabXmlDoc(parseState, $1, 1), ($9), ($11), ($12)
if not (isNil attr2) then errorR(Deprecated(FSComp.SR.parsAttributesMustComeBeforeVal(), rhs parseState 4))
let m = rhs2 parseState 1 11 |> unionRangeWithXmlDoc doc
let m =
rhs2 parseState 1 11
|> unionRangeWithXmlDoc doc
|> fun m ->
match konst with
| None -> m
| Some e -> unionRanges m e.Range
let mVal = rhs parseState 3
let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m, { ValKeyword = Some mVal; WithKeyword = None })
let valSpfn = SynValSig((attr1@attr2), id, explicitValTyparDecls, ty, arity, isInline, isMutable, doc, vis2, konst, m, { ValKeyword = Some mVal; WithKeyword = None
; EqualsRange = mEquals
})
SynModuleSigDecl.Val(valSpfn, m)
}
/* The optional literal value on a literal specification in a signature */
optLiteralValueSpfn:
| /* EMPTY */
{ None }
{ None
, None
}
| EQUALS declExpr
{ Some($2) }
{ let mEquals = rhs parseState 1
Some(mEquals), Some($2) }
| EQUALS OBLOCKBEGIN declExpr oblockend opt_ODECLEND
{ Some($3) }
{ let mEquals = rhs parseState 1
Some(mEquals), Some($3) }
/* A block of definitions in a module in a signature file */
...
...
@@ -1059,7 +1067,7 @@ classSpfnMembersAtLeastOne:
classMemberSpfn:
| opt_attributes opt_declVisibility memberSpecFlags opt_inline opt_access nameop opt_explicitValTyparDecls COLON topTypeWithTypeConstraints classMemberSpfnGetSet optLiteralValueSpfn
{ if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(), rhs parseState 2))
let isInline, doc, vis2, id, explicitValTyparDecls, (ty, arity),
optLiteralValue
= $4, grabXmlDoc(parseState, $1, 1), $5, $6, $7, $9, $11
let isInline, doc, vis2, id, explicitValTyparDecls, (ty, arity),
(mEquals, optLiteralValue)
= $4, grabXmlDoc(parseState, $1, 1), $5, $6, $7, $9, $11
let mWith, getSetRangeOpt, getSet = $10
let getSetAdjuster arity = match arity, getSet with SynValInfo([], _), SynMemberKind.Member -> SynMemberKind.PropertyGet | _ -> getSet
let wholeRange =
...
...
@@ -1069,7 +1077,11 @@ classMemberSpfn:
| Some m2 -> unionRanges m m2
|> fun m -> (m, $1) ||> unionRangeWithListBy (fun (a: SynAttributeList) -> a.Range)
|> unionRangeWithXmlDoc doc
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange, { ValKeyword = None; WithKeyword = mWith })
|> fun m ->
match optLiteralValue with
| None -> m
| Some e -> unionRanges m e.Range
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, vis2, optLiteralValue, wholeRange, { ValKeyword = None; WithKeyword = mWith; EqualsRange = mEquals })
let _, flags = $3
SynMemberSig.Member(valSpfn, flags (getSetAdjuster arity), wholeRange) }
...
...
@@ -2102,7 +2114,7 @@ classDefnMember:
| Some m2 -> unionRanges m m2
|> unionRangeWithXmlDoc doc
if Option.isSome $2 then errorR(Error(FSComp.SR.parsAccessibilityModsIllegalForAbstract(), wholeRange))
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, wholeRange, { ValKeyword = None; WithKeyword = mWith })
let valSpfn = SynValSig($1, id, explicitValTyparDecls, ty, arity, isInline, false, doc, None, None, wholeRange, { ValKeyword = None; WithKeyword = mWith
; EqualsRange = None
})
[ SynMemberDefn.AbstractSlot(valSpfn, AbstractMemberFlags $3 (getSetAdjuster arity), wholeRange) ] }
| opt_attributes opt_declVisibility inheritsDefn
...
...
tests/FSharp.Compiler.Service.Tests/FSharp.CompilerService.SurfaceArea.netstandard.expected
浏览文件 @
5bf11999
...
...
@@ -9462,12 +9462,14 @@ FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia: Void .ctor(Microsoft.FSharp.Cor
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynValSigTrivia Zero
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: FSharp.Compiler.SyntaxTrivia.SynValSigTrivia get_Zero()
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] EqualsRange
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] ValKeyword
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] WithKeyword
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_EqualsRange()
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_ValKeyword()
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_WithKeyword()
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: System.String ToString()
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range])
FSharp.Compiler.SyntaxTrivia.SynValSigTrivia: Void .ctor(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]
, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range]
)
FSharp.Compiler.Text.ISourceText
FSharp.Compiler.Text.ISourceText: Boolean ContentEquals(FSharp.Compiler.Text.ISourceText)
FSharp.Compiler.Text.ISourceText: Boolean SubTextEquals(System.String, Int32)
...
...
tests/service/Symbols.fs
浏览文件 @
5bf11999
...
...
@@ -1930,6 +1930,49 @@ val a : int
assertRange
(
6
,
0
)
(
6
,
3
)
mVal
|
_
->
Assert
.
Fail
"Could not get valid AST"
[<
Test
>]
let
``Equals token is present in SynValSig value``
()
=
let
parseResults
=
getParseResultsOfSignatureFile
"""
module Meh
val a : int = 9
"""
match
parseResults
with
|
ParsedInput
.
SigFile
(
ParsedSigFileInput
(
modules
=[
SynModuleOrNamespaceSig
(
decls
=[
SynModuleSigDecl
.
Val
(
valSig
=
SynValSig
(
trivia
=
{
EqualsRange
=
Some
mEquals
});
range
=
mVal
)
]
)
]))
->
assertRange
(
4
,
12
)
(
4
,
13
)
mEquals
assertRange
(
4
,
0
)
(
4
,
15
)
mVal
|
_
->
Assert
.
Fail
"Could not get valid AST"
[<
Test
>]
let
``Equals token is present in SynValSig member``
()
=
let
parseResults
=
getParseResultsOfSignatureFile
"""
module Meh
type X =
member a : int = 10
"""
match
parseResults
with
|
ParsedInput
.
SigFile
(
ParsedSigFileInput
(
modules
=[
SynModuleOrNamespaceSig
(
decls
=[
SynModuleSigDecl
.
Types
(
types
=
[
SynTypeDefnSig
(
typeRepr
=
SynTypeDefnSigRepr
.
ObjectModel
(
memberSigs
=
[
SynMemberSig
.
Member
(
memberSig
=
SynValSig
(
trivia
=
{
EqualsRange
=
Some
mEquals
});
range
=
mMember
)
]))
])
]
)
]))
->
assertRange
(
5
,
19
)
(
5
,
20
)
mEquals
assertRange
(
5
,
4
)
(
5
,
23
)
mMember
|
_
->
Assert
.
Fail
"Could not get valid AST"
module
SynMatchClause
=
[<
Test
>]
let
``Range of single SynMatchClause``
()
=
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录