Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6b4d0a4

Browse files
vasily-kirichenkoKevinRansom
authored andcommitted
Fix Structure Service for properties (dotnet#2195)
* use ObjectModel's start column as start column for properties guidelines* fix collapse range for whole property* fix match clauses guidelines* remove temporary code* fix compilation* remove tracing
1 parentde2a06e commit6b4d0a4

File tree

3 files changed

+87
-101
lines changed

3 files changed

+87
-101
lines changed

‎src/fsharp/ast.fs‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,24 +1060,24 @@ and
10601060
SynBinding=
10611061
| Bindingof
10621062
accessibility:SynAccess option*
1063-
SynBindingKind*
1063+
kind:SynBindingKind*
10641064
mustInline:bool*
10651065
isMutable:bool*
10661066
attrs:SynAttributes*
10671067
xmlDoc:PreXmlDoc*
1068-
SynValData*
1068+
valData:SynValData*
10691069
headPat:SynPat*
1070-
SynBindingReturnInfo option*
1070+
returnInfo:SynBindingReturnInfo option*
10711071
expr:SynExpr*
10721072
range:range*
1073-
SequencePointInfoForBinding
1073+
seqPoint:SequencePointInfoForBinding
10741074
// no member just named "Range", as that would be confusing:
10751075
// - for everything else, the 'range' member that appears last/second-to-last is the 'full range' of the whole tree construct
10761076
// - but for Binding, the 'range' is only the range of the left-hand-side, the right-hand-side range is in the SynExpr
10771077
// - so we use explicit names to avoid confusion
1078-
memberx.RangeOfBindingSansRhs=let(Binding(_,_,_,_,_,_,_,_,_,_,m,_))= xin m
1079-
memberx.RangeOfBindingAndRhs=let(Binding(_,_,_,_,_,_,_,_,_,e,m,_))= xin unionRanges e.Range m
1080-
memberx.RangeOfHeadPat=let(Binding(_,_,_,_,_,_,_,headPat,_,_,_,_))= xin headPat.Range
1078+
memberx.RangeOfBindingSansRhs=let(Binding(range=m))= xin m
1079+
memberx.RangeOfBindingAndRhs=let(Binding(expr=e; range=m))= xin unionRanges e.Range m
1080+
memberx.RangeOfHeadPat=let(Binding(headPat=headPat))= xin headPat.Range
10811081

10821082
and
10831083
[<NoEquality; NoComparison>]
@@ -1255,21 +1255,21 @@ and
12551255
[<NoEquality; NoComparison>]
12561256
SynValSig=
12571257
| ValSpfnof
1258-
SynAttributes*
1258+
synAttributes:SynAttributes*
12591259
ident:Ident*
12601260
explicitValDecls:SynValTyparDecls*
1261-
SynType*
1261+
synType:SynType*
12621262
arity:SynValInfo*
12631263
isInline:bool*
12641264
isMutable:bool*
12651265
xmlDoc:PreXmlDoc*
12661266
accessibility:SynAccess option*
1267-
SynExpr option*
1267+
synExpr:SynExpr option*
12681268
range:range
12691269

1270-
memberx.RangeOfId=let(ValSpfn(_,id,_,_,_,_,_,_,_,_,_))= xin id.idRange
1271-
memberx.SynInfo=let(ValSpfn(_,_,_,_,v,_,_,_,_,_,_))= xin v
1272-
memberx.SynType=let(ValSpfn(_,_,_,ty,_,_,_,_,_,_,_))= xin ty
1270+
memberx.RangeOfId=let(ValSpfn(ident=id))= xin id.idRange
1271+
memberx.SynInfo=let(ValSpfn(arity=v))= xin v
1272+
memberx.SynType=let(ValSpfn(synType=ty))= xin ty
12731273

12741274
/// The argument names and other metadata for a member or function
12751275
and

‎vsintegration/src/FSharp.Editor/Structure/BlockStructureService.fs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ module internal BlockStructure =
3838
| Scope.Record
3939
| Scope.Interface
4040
| Scope.TypeExtension
41-
| Scope.SimpleType
4241
| Scope.RecordDefn
4342
| Scope.CompExpr
4443
| Scope.ObjExpr

‎vsintegration/src/FSharp.Editor/Structure/Structure.fs‎

Lines changed: 74 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ module internal Structure =
129129
| UnionCase
130130
| EnumCase
131131
| RecordField
132-
| SimpleType
133132
| RecordDefn
134133
| UnionDefn
135134
| Comment
@@ -177,7 +176,6 @@ module internal Structure =
177176
| UnionCase->"UnionCase"
178177
| EnumCase->"EnumCase"
179178
| RecordField->"RecordField"
180-
| SimpleType->"SimpleType"
181179
| RecordDefn->"RecordDefn"
182180
| UnionDefn->"UnionDefn"
183181
| Comment->"Comment"
@@ -247,7 +245,7 @@ module internal Structure =
247245
| SynExpr.ForEach(_,_,_,_,_,e,r)->
248246
yield! rcheck Scope.For Collapse.Below r r
249247
yield! parseExpr e
250-
| SynExpr.LetOrUse(_,_,bindings, body,_r)->
248+
| SynExpr.LetOrUse(_,_,bindings, body,_)->
251249
yield! parseBindings bindings
252250
yield! parseExpr body
253251
| SynExpr.Match(seqPointAtBinding,_expr,clauses,_,r)->
@@ -389,10 +387,15 @@ module internal Structure =
389387
|_->()
390388
}
391389

392-
andprivateparseMatchClause(SynMatchClause. Clause(synPat,_,e,_r,_)as clause)=
390+
andprivateparseMatchClause(SynMatchClause.Clause(synPat,_,e,_r,_)as clause)=
391+
let recgetLastPat=function
392+
| SynPat.Or(_, pat,_)-> getLastPat pat
393+
| x-> x
394+
393395
seq{
396+
letsynPat= getLastPat synPat
394397
letcollapse= Range.endToEnd synPat.Range clause.Range// Collapse the scope starting with `->`
395-
yield! rcheck Scope.MatchClause Collapse.Sameclause.Range collapse
398+
yield! rcheck Scope.MatchClause Collapse.Samee.Range collapse
396399
yield! parseExpr e
397400
}
398401

@@ -450,36 +453,46 @@ module internal Structure =
450453

451454
andprivateparseExprInterfaces(intfs:SynInterfaceImpl list)= Seq.collect parseExprInterface intfs
452455

453-
andprivateparseSynMemberDefn d=
456+
andprivateparseSynMemberDefn(objectModelRange:range)d=
454457
seq{
455458
match dwith
456-
| SynMemberDefn.Member
457-
(SynBinding.Binding(_,_kind,_,_,attrs,_,
458-
SynValData(Some{MemberKind=MemberKind.Constructor},_,_),synPat,_,_e,_lhsr,_)
459-
as binding,_r)as_memb->
460-
letcollapse= Range.endToEnd synPat.Range d.Range
461-
yield! rcheck Scope.New Collapse.Below d.Range collapse
459+
| SynMemberDefn.Member(SynBinding.Binding(attrs=attrs; valData=valData; headPat=synPat; range=bindingRange)as binding,_)->
460+
match valDatawith
461+
| SynValData(Some{ MemberKind=MemberKind.Constructor},_,_)->
462+
letcollapse= Range.endToEnd synPat.Range d.Range
463+
yield! rcheck Scope.New Collapse.Below d.Range collapse
464+
| SynValData(Some{ MemberKind=MemberKind.PropertyGet| MemberKind.PropertySet},_,_)->
465+
letrange=
466+
Range.mkRange
467+
d.Range.FileName
468+
(Range.mkPos d.Range.StartLine objectModelRange.StartColumn)
469+
d.Range.End
470+
471+
letcollapse=
472+
match synPatwith
473+
| SynPat.LongIdent(longDotId=longIdent)->
474+
Range.endToEnd longIdent.Range d.Range
475+
|_-> Range.endToEnd bindingRange d.Range
476+
477+
yield! rcheck Scope.Member Collapse.Below range collapse
478+
|_->
479+
letcollapse= Range.endToEnd bindingRange d.Range
480+
yield! rcheck Scope.Member Collapse.Below d.Range collapse
462481
yield! parseAttributes attrs
463482
yield! parseBinding binding
464-
| SynMemberDefn.Member
465-
(SynBinding.Binding(_,_kind,_,_,attrs,_,SynValData(_memberFlags,_,_),_synPat,_,_e,lhsr,_)as binding,_r)as_memb->
466-
letcollapse= Range.endToEnd lhsr d.Range
467-
yield! rcheck Scope.Member Collapse.Below d.Range collapse
468-
yield! parseAttributes attrs
469-
yield! parseBinding binding
470-
| SynMemberDefn.LetBindings(bindings,_,_,_r)->
483+
| SynMemberDefn.LetBindings(bindings,_,_,_)->
471484
yield! parseBindings bindings
472-
| SynMemberDefn.Interface(tp,iMembers,_)->
485+
| SynMemberDefn.Interface(tp,iMembers, r)->
473486
yield! rcheck Scope.Interface Collapse.Below d.Range<| Range.endToEnd tp.Range d.Range
474487
match iMemberswith
475488
| Some members->
476-
yield! Seq.collect parseSynMemberDefn members
489+
yield! Seq.collect(parseSynMemberDefn r) members
477490
| None->()
478-
| SynMemberDefn.NestedType(td,_,_r)->
491+
| SynMemberDefn.NestedType(td,_,_)->
479492
yield! parseTypeDefn td//d.Range
480-
| SynMemberDefn.AbstractSlot(ValSpfn(_,_,_,synt,_,_,_,_,_,_,_),_, r)->
481-
yield! rcheck Scope.Member Collapse.Below d.Range<|Range.startToEnd synt.Range r
482-
| SynMemberDefn.AutoProperty(_,_,_,_,(*memkind*)_,_,_,_, e,_,r)->
493+
| SynMemberDefn.AbstractSlot(ValSpfn(synType=synt),_, r)->
494+
yield! rcheck Scope.Member Collapse.Below d.Range(Range.startToEnd synt.Range r)
495+
| SynMemberDefn.AutoProperty(synExpr=e; range=r)->
483496
yield! rcheck Scope.Member Collapse.Below d.Range r
484497
yield! parseExpr e
485498
|_->()
@@ -496,63 +509,47 @@ module internal Structure =
496509
| Path of string
497510
*)
498511
andprivateparseSimpleRepr simple=
499-
let_accessRange(opt:SynAccess option)=
500-
match optwith
501-
| None->0
502-
| Some synacc->
503-
match synaccwith
504-
| SynAccess.Public->6
505-
| SynAccess.Private->7
506-
| SynAccess.Internal->8
507512
seq{
508513
match simplewith
509514
| SynTypeDefnSimpleRepr.Enum(cases,_er)->
510-
yield!
511-
cases
512-
|> Seq.collect(fun(SynEnumCase.EnumCase(attrs,_,_,_,cr))->
513-
seq{yield! rcheck Scope.EnumCase Collapse.Below cr cr
514-
yield! parseAttributes attrs})
515-
| SynTypeDefnSimpleRepr.Record(_opt,fields,rr)->
515+
for SynEnumCase.EnumCase(attrs,_,_,_, cr)in casesdo
516+
yield! rcheck Scope.EnumCase Collapse.Below cr cr
517+
yield! parseAttributes attrs
518+
| SynTypeDefnSimpleRepr.Record(_,fields,rr)->
516519
yield! rcheck Scope.RecordDefn Collapse.Same rr rr//<| Range.modBoth rr 1 1
517-
yield! fields
518-
|> Seq.collect(fun(SynField.Field(attrs,_,_,_,_,_,_,fr))->
519-
seq{yield! rcheck Scope.RecordField Collapse.Below fr fr
520-
yield! parseAttributes attrs
521-
})
522-
| SynTypeDefnSimpleRepr.Union(_opt,cases,ur)->
520+
for SynField.Field(attrs,_,_,_,_,_,_,fr)in fieldsdo
521+
yield! rcheck Scope.RecordField Collapse.Below fr fr
522+
yield! parseAttributes attrs
523+
| SynTypeDefnSimpleRepr.Union(_,cases,ur)->
523524
yield! rcheck Scope.UnionDefn Collapse.Same ur ur
524-
yield! cases
525-
|> Seq.collect(fun(SynUnionCase.UnionCase(attrs,_,_,_,_,cr))->
526-
seq{yield! rcheck Scope.UnionCase Collapse.Below cr cr
527-
yield! parseAttributes attrs
528-
})
525+
for SynUnionCase.UnionCase(attrs,_,_,_,_,cr)in casesdo
526+
yield! rcheck Scope.UnionCase Collapse.Below cr cr
527+
yield! parseAttributes attrs
529528
|_->()
530529
}
531530

532-
andprivateparseTypeDefn
533-
(TypeDefn
534-
(SynComponentInfo.ComponentInfo(_attribs,typeArgs,_constraints,_longId,_doc,_b,_access,r)
535-
as _componentInfo,objectModel,members,fullrange))=seq{
536-
letgenericRange= rangeOfTypeArgsElse r typeArgs
537-
letcollapse= Range.endToEnd(Range.modEnd1 genericRange) fullrange
538-
match objectModelwith
539-
| SynTypeDefnRepr.ObjectModel(defnKind, objMembers,_)->
540-
match defnKindwith
541-
| SynTypeDefnKind.TyconAugmentation->
542-
yield! rcheck Scope.TypeExtension Collapse.Below fullrange collapse
543-
|_->
544-
yield! rcheck Scope.Type Collapse.Below fullrange collapse
545-
yield! Seq.collect parseSynMemberDefn objMembers
546-
// visit the members of a type extension
547-
yield! Seq.collect parseSynMemberDefn members
548-
| SynTypeDefnRepr.Simple(simpleRepr,_r)->
549-
yield! rcheck Scope.Type Collapse.Below fullrange collapse
550-
yield! parseSimpleRepr simpleRepr
551-
yield! Seq.collect parseSynMemberDefn members
552-
| SynTypeDefnRepr.Exception_->()
531+
andprivateparseTypeDefn(TypeDefn(SynComponentInfo.ComponentInfo(_,typeArgs,_,_,_,_,_,r),objectModel,members,fullrange))=
532+
seq{
533+
letgenericRange= rangeOfTypeArgsElse r typeArgs
534+
letcollapse= Range.endToEnd(Range.modEnd1 genericRange) fullrange
535+
match objectModelwith
536+
| SynTypeDefnRepr.ObjectModel(defnKind, objMembers, r)->
537+
match defnKindwith
538+
| SynTypeDefnKind.TyconAugmentation->
539+
yield! rcheck Scope.TypeExtension Collapse.Below fullrange collapse
540+
|_->
541+
yield! rcheck Scope.Type Collapse.Below fullrange collapse
542+
yield! Seq.collect(parseSynMemberDefn r) objMembers
543+
// visit the members of a type extension
544+
yield! Seq.collect(parseSynMemberDefn r) members
545+
| SynTypeDefnRepr.Simple(simpleRepr, r)->
546+
yield! rcheck Scope.Type Collapse.Below fullrange collapse
547+
yield! parseSimpleRepr simpleRepr
548+
yield! Seq.collect(parseSynMemberDefn r) members
549+
| SynTypeDefnRepr.Exception_->()
553550
}
554551

555-
letprivategetConsecutiveModuleDecls(predicate:SynModuleDecl->range option)(scope:Scope)(decls:SynModuleDecls)=
552+
letprivategetConsecutiveModuleDecls(predicate:SynModuleDecl->range option)(scope:Scope)(decls:SynModuleDecls)=
556553
letgroupConsecutiveDecls input=
557554
let recloop(input:range list)(res:range list list)currentBulk=
558555
match input, currentBulkwith
@@ -578,7 +575,6 @@ module internal Structure =
578575

579576
decls|>(List.choose predicate>> groupConsecutiveDecls>> List.choose selectRanges)
580577

581-
582578
letcollectOpens= getConsecutiveModuleDecls(function SynModuleDecl.Open(_, r)-> Some r|_-> None) Scope.Open
583579

584580
letcollectHashDirectives=
@@ -589,18 +585,17 @@ module internal Structure =
589585
Some(Range.mkRange""(Range.mkPos r.StartLine prefixLength) r.End)
590586
|_-> None) Scope.HashDirective
591587

592-
593588
let recprivateparseDeclaration(decl:SynModuleDecl)=
594589
seq{
595590
match declwith
596591
| SynModuleDecl.Let(_,bindings,r)->
597-
yield! bindings|> Seq.collect(fun binding->
592+
for bindingin bindingsdo
598593
letcollapse= Range.endToEnd binding.RangeOfBindingSansRhs r
599-
rcheck Scope.LetOrUse Collapse.Below r collapse
600-
)
594+
yield! rcheck Scope.LetOrUse Collapse.Below r collapse
601595
yield! parseBindings bindings
602596
| SynModuleDecl.Types(types,_r)->
603-
yield! Seq.collect(fun t-> parseTypeDefn t) types
597+
for tin typesdo
598+
yield! parseTypeDefn t
604599
// Fold the attributes above a module
605600
| SynModuleDecl.NestedModule(SynComponentInfo.ComponentInfo(attrs,_,_,_,_,_,_,cmpRange),_, decls,_,_)->
606601
// cmpInfo.
@@ -618,12 +613,9 @@ module internal Structure =
618613
|_->()
619614
}
620615

621-
letprivateparseModuleOrNamespacemoduleOrNs=
616+
letprivateparseModuleOrNamespace(SynModuleOrNamespace.SynModuleOrNamespace(longId,_,isModule,decls,_,attribs,_,r))=
622617
seq{
623-
let(SynModuleOrNamespace.SynModuleOrNamespace(longId,_,isModule,decls,_,attribs,_,r))= moduleOrNs
624618
yield! parseAttributes attribs
625-
626-
627619
letfullrange= Range.startToEnd(longIdentRange longId) r
628620
letcollapse= Range.endToEnd(longIdentRange longId) r
629621
if isModulethen
@@ -857,7 +849,6 @@ module internal Structure =
857849
|_->()
858850
}
859851

860-
861852
letprivateparseModuleOrNamespaceSigs moduleOrNamespaceSig=
862853
seq{
863854
let(SynModuleOrNamespaceSig.SynModuleOrNamespaceSig(longId,_,isModule,decls,_,attribs,_,r))= moduleOrNamespaceSig
@@ -874,7 +865,6 @@ module internal Structure =
874865
yield! Seq.collect parseModuleSigDeclaration decls
875866
}
876867

877-
878868
letgetOutliningRanges(sourceLines:string[])(parsedInput:ParsedInput)=
879869
match parsedInputwith
880870
| ParsedInput.ImplFile implFile->
@@ -887,6 +877,3 @@ module internal Structure =
887877
letastBasedRanges= Seq.collect parseModuleOrNamespaceSigs moduleSigs
888878
letcommentRanges= getCommentRanges sourceLines
889879
Seq.append astBasedRanges commentRanges
890-
891-
892-

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp