Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
4247eb9c
F
fsharp
项目概览
dotNET Platform
/
fsharp
10 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
4247eb9c
编写于
2月 16, 2023
作者:
F
Florian Verdonck
提交者:
GitHub
2月 16, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Include end in nested module range. (#14751)
上级
824b4e4a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
75 addition
and
9 deletion
+75
-9
src/Compiler/pars.fsy
src/Compiler/pars.fsy
+17
-9
tests/service/data/SyntaxTree/NestedModule/NestedModuleWithBeginEndAndDecls.fs
...ntaxTree/NestedModule/NestedModuleWithBeginEndAndDecls.fs
+7
-0
tests/service/data/SyntaxTree/NestedModule/NestedModuleWithBeginEndAndDecls.fs.bsl
...Tree/NestedModule/NestedModuleWithBeginEndAndDecls.fs.bsl
+30
-0
tests/service/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs
...s/service/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs
+5
-0
tests/service/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs.bsl
...rvice/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs.bsl
+16
-0
未找到文件。
src/Compiler/pars.fsy
浏览文件 @
4247eb9c
...
...
@@ -1273,12 +1273,17 @@ moduleDefn:
| Some vis -> raiseParseErrorAt (rhs parseState 1) (FSComp.SR.parsIgnoreAttributesOnModuleAbbreviationAlwaysPrivate(vis.ToString()))
| None -> ()
[ SynModuleDecl.ModuleAbbrev(List.head path, eqn, (rhs parseState 3, eqn) ||> unionRangeWithListBy (fun id -> id.idRange) ) ]
| Choice2Of2
def
->
| Choice2Of2
(def, mEndOpt)
->
if not (isSingleton path) then raiseParseErrorAt (rhs parseState 3) (FSComp.SR.parsModuleAbbreviationMustBeSimpleName())
let info = SynComponentInfo(attribs @ attribs2, None, [], path, xmlDoc, false, vis, rhs parseState 3)
let mEquals = rhs parseState 4
let trivia: SynModuleDeclNestedModuleTrivia = { ModuleKeyword = Some mModule; EqualsRange = Some mEquals }
[ SynModuleDecl.NestedModule(info, isRec, def, false, ((rhs2 parseState 1 4, def) ||> unionRangeWithListBy (fun d -> d.Range) |> unionRangeWithXmlDoc xmlDoc), trivia)] }
let m =
(rhs2 parseState 1 4, def)
||> unionRangeWithListBy (fun (d: SynModuleDecl) -> d.Range)
|> unionRangeWithXmlDoc xmlDoc
let m = match mEndOpt with | None -> m | Some mEnd -> unionRanges m mEnd
[ SynModuleDecl.NestedModule(info, isRec, def, false, m, trivia) ] }
/* unattached custom attributes */
| attributes recover
...
...
@@ -1339,17 +1344,18 @@ namedModuleDefnBlock:
match $2 with
| [ SynModuleDecl.Expr (LongOrSingleIdent(false, SynLongIdent(path, _, _), None, _), _) ] ->
Choice1Of2 path
| _ ->
Choice2Of2
$2
| _ ->
Choice2Of2
($2, None)
}
| OBLOCKBEGIN moduleDefnsOrExpr recover
{ // The lex filter ensures we can only get a mismatch in OBLOCKBEGIN/OBLOCKEND tokens if there was some other kind of error, hence we don't need to report this error
// reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnClosedBlockInHashLight())
Choice2Of2
$2
}
Choice2Of2
($2, None)
}
| OBLOCKBEGIN error oblockend
{ Choice2Of2 [] }
{ let mEnd = rhs parseState 3
Choice2Of2 ([], Some mEnd) }
| wrappedNamedModuleDefn
{ Choice2Of2 $1 }
...
...
@@ -1361,14 +1367,16 @@ namedModuleDefnBlock:
/* A module definition that includes a 'begin'...'end' (rarely used in F# with #light syntax) */
wrappedNamedModuleDefn:
| structOrBegin moduleDefnsOrExprPossiblyEmpty END
{ $2 }
{ let mEnd = rhs parseState 3
$2, Some mEnd }
| structOrBegin moduleDefnsOrExprPossiblyEmpty recover
{ reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnmatchedBeginOrStruct())
$2 }
$2
, None
}
| structOrBegin error END
{ [] }
{ let mEnd = rhs parseState 3
[], Some mEnd }
tyconDefnAugmentation:
...
...
tests/service/data/SyntaxTree/NestedModule/NestedModuleWithBeginEndAndDecls.fs
0 → 100644
浏览文件 @
4247eb9c
namespace
X
module
Y
=
begin
let
a
=
0
end
tests/service/data/SyntaxTree/NestedModule/NestedModuleWithBeginEndAndDecls.fs.bsl
0 → 100644
浏览文件 @
4247eb9c
ImplFile
(
ParsedImplFileInput
(
"/root/NestedModule/NestedModuleWithBeginEndAndDecls.fs"
,
false
,
QualifiedNameOfFile
NestedModuleWithBeginEndAndDecls
,
[],
[],
[
SynModuleOrNamespace
([
X
],
false
,
DeclaredNamespace
,
[
NestedModule
(
SynComponentInfo
([],
None
,
[],
[
Y
],
PreXmlDoc
((
3
,
0
),
FSharp
.
Compiler
.
Xml
.
XmlDocCollector
),
false
,
None
,
(
3
,
0
--
3
,
8
)),
false
,
[
Let
(
false
,
[
SynBinding
(
None
,
Normal
,
false
,
false
,
[],
PreXmlDoc
((
5
,
8
),
FSharp
.
Compiler
.
Xml
.
XmlDocCollector
),
SynValData
(
None
,
SynValInfo
([],
SynArgInfo
([],
false
,
None
)),
None
),
Named
(
SynIdent
(
a
,
None
),
false
,
None
,
(
5
,
12
--
5
,
13
)),
None
,
Const
(
Int32
0
,
(
5
,
16
--
5
,
17
)),
(
5
,
12
--
5
,
13
),
Yes
(
5
,
8
--
5
,
17
),
{
LeadingKeyword
=
Let
(
5
,
8
--
5
,
11
)
InlineKeyword
=
None
EqualsRange
=
Some
(
5
,
14
--
5
,
15
)
}
)],
(
5
,
8
--
5
,
17
))],
false
,
(
3
,
0
--
6
,
7
),
{
ModuleKeyword
=
Some
(
3
,
0
--
3
,
6
)
EqualsRange
=
Some
(
3
,
9
--
3
,
10
)
}
)],
PreXmlDocEmpty
,
[],
None
,
(
1
,
0
--
6
,
7
),
{
LeadingKeyword
=
Namespace
(
1
,
0
--
1
,
9
)
}
)],
(
true
,
false
),
{
ConditionalDirectives
=
[]
CodeComments
=
[]
}
,
set
[]))
tests/service/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs
0 → 100644
浏览文件 @
4247eb9c
namespace
X
module
Y
=
begin
end
tests/service/data/SyntaxTree/NestedModule/RangeOfBeginEnd.fs.bsl
0 → 100644
浏览文件 @
4247eb9c
ImplFile
(
ParsedImplFileInput
(
"/root/NestedModule/RangeOfBeginEnd.fs"
,
false
,
QualifiedNameOfFile
RangeOfBeginEnd
,
[],
[],
[
SynModuleOrNamespace
([
X
],
false
,
DeclaredNamespace
,
[
NestedModule
(
SynComponentInfo
([],
None
,
[],
[
Y
],
PreXmlDoc
((
3
,
0
),
FSharp
.
Compiler
.
Xml
.
XmlDocCollector
),
false
,
None
,
(
3
,
0
--
3
,
8
)),
false
,
[],
false
,
(
3
,
0
--
4
,
13
),
{
ModuleKeyword
=
Some
(
3
,
0
--
3
,
6
)
EqualsRange
=
Some
(
3
,
9
--
3
,
10
)
}
)],
PreXmlDocEmpty
,
[],
None
,
(
1
,
0
--
4
,
13
),
{
LeadingKeyword
=
Namespace
(
1
,
0
--
1
,
9
)
}
)],
(
true
,
false
),
{
ConditionalDirectives
=
[]
CodeComments
=
[]
}
,
set
[]))
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录