未验证 提交 41b6ed7c 编写于 作者: F Florian Verdonck 提交者: GitHub

Add VisitValSig to SyntaxVisitorBase. (#15930)

* Add VisitValSig to SyntaxVisitorBase.
上级 4185ee3e
......@@ -25,6 +25,11 @@ type SyntaxNode =
| SynMemberDefn of SynMemberDefn
| SynMatchClause of SynMatchClause
| SynBinding of SynBinding
| SynModuleOrNamespaceSig of SynModuleOrNamespaceSig
| SynModuleSigDecl of SynModuleSigDecl
| SynValSig of SynValSig
| SynTypeDefnSig of SynTypeDefnSig
| SynMemberSig of SynMemberSig
type SyntaxVisitorPath = SyntaxNode list
......@@ -184,6 +189,28 @@ type SyntaxVisitorBase<'T>() =
ignore (path, attributes)
None
/// VisitModuleOrNamespaceSig allows overriding behavior when visiting module or namespaces
abstract VisitModuleOrNamespaceSig: path: SyntaxVisitorPath * synModuleOrNamespaceSig: SynModuleOrNamespaceSig -> 'T option
default _.VisitModuleOrNamespaceSig(path, synModuleOrNamespaceSig) =
ignore (path, synModuleOrNamespaceSig)
None
/// VisitModuleDecl allows overriding signature module declaration behavior
abstract VisitModuleSigDecl:
path: SyntaxVisitorPath * defaultTraverse: (SynModuleSigDecl -> 'T option) * synModuleSigDecl: SynModuleSigDecl -> 'T option
default _.VisitModuleSigDecl(path, defaultTraverse, synModuleSigDecl) =
ignore path
defaultTraverse synModuleSigDecl
/// VisitValSig allows overriding SynValSig behavior
abstract VisitValSig: path: SyntaxVisitorPath * defaultTraverse: (SynValSig -> 'T option) * valSig: SynValSig -> 'T option
default _.VisitValSig(path, defaultTraverse, valSig) =
ignore path
defaultTraverse valSig
/// A range of utility functions to assist with traversing an AST
module SyntaxTraversal =
// treat ranges as though they are half-open: [,)
......@@ -926,6 +953,101 @@ module SyntaxTraversal =
attributes
|> List.map (fun attributes -> dive () attributes.Range (fun () -> visitor.VisitAttributeApplication(origPath, attributes)))
and traverseSynModuleOrNamespaceSig origPath (SynModuleOrNamespaceSig (decls = synModuleSigDecls; range = range) as mors) =
match visitor.VisitModuleOrNamespaceSig(origPath, mors) with
| Some x -> Some x
| None ->
let path = SyntaxNode.SynModuleOrNamespaceSig mors :: origPath
synModuleSigDecls
|> List.map (fun x -> dive x x.Range (traverseSynModuleSigDecl path))
|> pick range mors
and traverseSynModuleSigDecl origPath (decl: SynModuleSigDecl) =
let pick = pick decl.Range
let defaultTraverse m =
let path = SyntaxNode.SynModuleSigDecl m :: origPath
match m with
| SynModuleSigDecl.ModuleAbbrev (_ident, _longIdent, _range) -> None
| SynModuleSigDecl.NestedModule (moduleDecls = synModuleDecls; moduleInfo = SynComponentInfo (attributes = attributes)) ->
synModuleDecls
|> List.map (fun x -> dive x x.Range (traverseSynModuleSigDecl path))
|> List.append (attributeApplicationDives path attributes)
|> pick decl
| SynModuleSigDecl.Val (synValSig, range) -> [ dive synValSig range (traverseSynValSig path) ] |> pick decl
| SynModuleSigDecl.Types (types = types; range = range) ->
types
|> List.map (fun t -> dive t range (traverseSynTypeDefnSig path))
|> pick decl
| SynModuleSigDecl.Exception (_synExceptionDefn, _range) -> None
| SynModuleSigDecl.Open (_target, _range) -> None
| SynModuleSigDecl.HashDirective (parsedHashDirective, range) ->
visitor.VisitHashDirective(path, parsedHashDirective, range)
| SynModuleSigDecl.NamespaceFragment synModuleOrNamespaceSig -> traverseSynModuleOrNamespaceSig path synModuleOrNamespaceSig
visitor.VisitModuleSigDecl(origPath, defaultTraverse, decl)
and traverseSynValSig origPath (valSig: SynValSig) =
let defaultTraverse (SynValSig (synType = t; attributes = attributes; synExpr = expr; range = m)) =
let path = SyntaxNode.SynValSig valSig :: origPath
[
yield! attributeApplicationDives path attributes
yield dive t t.Range (traverseSynType path)
match expr with
| Some expr -> yield dive expr expr.Range (traverseSynExpr path)
| None -> ()
]
|> pick m valSig
visitor.VisitValSig(origPath, defaultTraverse, valSig)
and traverseSynTypeDefnSig origPath (SynTypeDefnSig (synComponentInfo, typeRepr, members, tRange, _) as tydef) =
let path = SyntaxNode.SynTypeDefnSig tydef :: origPath
match visitor.VisitComponentInfo(origPath, synComponentInfo) with
| Some x -> Some x
| None ->
match synComponentInfo with
| SynComponentInfo (attributes = attributes) ->
[
yield! attributeApplicationDives path attributes
match typeRepr with
| SynTypeDefnSigRepr.Exception _ ->
// This node is generated in CheckExpressions.fs, not in the AST.
// But note exception declarations are missing from this tree walk.
()
| SynTypeDefnSigRepr.ObjectModel (memberSigs = memberSigs) ->
yield! memberSigs |> List.map (fun ms -> dive ms ms.Range (traverseSynMemberSig path))
| SynTypeDefnSigRepr.Simple (synTypeDefnSimpleRepr, _range) ->
match synTypeDefnSimpleRepr with
| SynTypeDefnSimpleRepr.Record (_synAccessOption, fields, m) ->
yield dive () typeRepr.Range (fun () -> traverseRecordDefn path fields m)
| SynTypeDefnSimpleRepr.Union (_synAccessOption, cases, m) ->
yield dive () typeRepr.Range (fun () -> traverseUnionDefn path cases m)
| SynTypeDefnSimpleRepr.Enum (cases, m) ->
yield dive () typeRepr.Range (fun () -> traverseEnumDefn path cases m)
| SynTypeDefnSimpleRepr.TypeAbbrev (_, synType, m) ->
yield dive typeRepr typeRepr.Range (fun _ -> visitor.VisitTypeAbbrev(path, synType, m))
| _ -> ()
yield! members |> List.map (fun ms -> dive ms ms.Range (traverseSynMemberSig path))
]
|> pick tRange tydef
and traverseSynMemberSig path (m: SynMemberSig) =
let path = SyntaxNode.SynMemberSig m :: path
match m with
| SynMemberSig.Member (memberSig = memberSig) -> traverseSynValSig path memberSig
| SynMemberSig.Interface (interfaceType = synType) -> traverseSynType path synType
| SynMemberSig.Inherit (inheritedType = synType) -> traverseSynType path synType
| SynMemberSig.ValField(field = SynField (attributes = attributes)) ->
attributeApplicationDives path attributes |> pick m.Range attributes
| SynMemberSig.NestedType (nestedType = nestedType) -> traverseSynTypeDefnSig path nestedType
match parseTree with
| ParsedInput.ImplFile file ->
let l = file.Contents
......@@ -941,4 +1063,17 @@ module SyntaxTraversal =
l
|> List.map (fun x -> dive x x.Range (traverseSynModuleOrNamespace []))
|> pick fileRange l
| ParsedInput.SigFile _sigFile -> None
| ParsedInput.SigFile sigFile ->
let l = sigFile.Contents
let fileRange =
#if DEBUG
match l with
| [] -> range0
| _ -> l |> List.map (fun x -> x.Range) |> List.reduce unionRanges
#else
range0 // only used for asserting, does not matter in non-debug
#endif
l
|> List.map (fun x -> dive x x.Range (traverseSynModuleOrNamespaceSig []))
|> pick fileRange l
......@@ -17,6 +17,11 @@ type SyntaxNode =
| SynMemberDefn of SynMemberDefn
| SynMatchClause of SynMatchClause
| SynBinding of SynBinding
| SynModuleOrNamespaceSig of SynModuleOrNamespaceSig
| SynModuleSigDecl of SynModuleSigDecl
| SynValSig of SynValSig
| SynTypeDefnSig of SynTypeDefnSig
| SynMemberSig of SynMemberSig
type SyntaxVisitorPath = SyntaxNode list
......@@ -151,6 +156,24 @@ type SyntaxVisitorBase<'T> =
abstract VisitAttributeApplication: path: SyntaxVisitorPath * attributes: SynAttributeList -> 'T option
default VisitAttributeApplication: path: SyntaxVisitorPath * attributes: SynAttributeList -> 'T option
abstract VisitModuleOrNamespaceSig:
path: SyntaxVisitorPath * synModuleOrNamespaceSig: SynModuleOrNamespaceSig -> 'T option
default VisitModuleOrNamespaceSig:
path: SyntaxVisitorPath * synModuleOrNamespaceSig: SynModuleOrNamespaceSig -> 'T option
abstract VisitModuleSigDecl:
path: SyntaxVisitorPath * defaultTraverse: (SynModuleSigDecl -> 'T option) * synModuleSigDecl: SynModuleSigDecl ->
'T option
default VisitModuleSigDecl:
path: SyntaxVisitorPath * defaultTraverse: (SynModuleSigDecl -> 'T option) * synModuleSigDecl: SynModuleSigDecl ->
'T option
abstract VisitValSig:
path: SyntaxVisitorPath * defaultTraverse: (SynValSig -> 'T option) * valSig: SynValSig -> 'T option
default VisitValSig:
path: SyntaxVisitorPath * defaultTraverse: (SynValSig -> 'T option) * valSig: SynValSig -> 'T option
module public SyntaxTraversal =
val internal rangeContainsPosLeftEdgeInclusive: m1: range -> p: pos -> bool
......
......@@ -9238,61 +9238,96 @@ FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatc
FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn Item
FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl Item
FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat Item
FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType Item
FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn Item
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynValSig: FSharp.Compiler.Syntax.SynValSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynValSig: FSharp.Compiler.Syntax.SynValSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynBinding
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynExpr
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMatchClause
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModule
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynPat
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynType
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynValSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynBinding
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynExpr
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMatchClause
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModule
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynPat
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynType
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynValSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynBinding()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynExpr()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMatchClause()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberDefn()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModule()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespace()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespaceSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleSigDecl()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynPat()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynType()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefn()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefnSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynValSig()
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynBinding(FSharp.Compiler.Syntax.SynBinding)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynExpr(FSharp.Compiler.Syntax.SynExpr)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMatchClause(FSharp.Compiler.Syntax.SynMatchClause)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberDefn(FSharp.Compiler.Syntax.SynMemberDefn)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberSig(FSharp.Compiler.Syntax.SynMemberSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModule(FSharp.Compiler.Syntax.SynModuleDecl)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespace(FSharp.Compiler.Syntax.SynModuleOrNamespace)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespaceSig(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleSigDecl(FSharp.Compiler.Syntax.SynModuleSigDecl)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynPat(FSharp.Compiler.Syntax.SynPat)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynType(FSharp.Compiler.Syntax.SynType)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefn(FSharp.Compiler.Syntax.SynTypeDefn)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynTypeDefnSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynValSig(FSharp.Compiler.Syntax.SynValSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynBinding
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynExpr
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModule
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynPat
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynType
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynValSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+Tags
FSharp.Compiler.Syntax.SyntaxNode: Int32 Tag
FSharp.Compiler.Syntax.SyntaxNode: Int32 get_Tag()
......@@ -9311,6 +9346,8 @@ FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOptio
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynMatchClause)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleDecl)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespace)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespaceSig)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleSigDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleSigDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleSigDecl)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynPat)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynLongIdent])
......@@ -9318,6 +9355,7 @@ FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOptio
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitUnionDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitValSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynValSig,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynValSig)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Void .ctor()
FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 HeadType
FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 None
......@@ -9238,61 +9238,96 @@ FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatc
FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause: FSharp.Compiler.Syntax.SynMatchClause get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn Item
FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn: FSharp.Compiler.Syntax.SynMemberDefn get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig: FSharp.Compiler.Syntax.SynMemberSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl Item
FSharp.Compiler.Syntax.SyntaxNode+SynModule: FSharp.Compiler.Syntax.SynModuleDecl get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace: FSharp.Compiler.Syntax.SynModuleOrNamespace get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig: FSharp.Compiler.Syntax.SynModuleOrNamespaceSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl Item
FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl: FSharp.Compiler.Syntax.SynModuleSigDecl get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat Item
FSharp.Compiler.Syntax.SyntaxNode+SynPat: FSharp.Compiler.Syntax.SynPat get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType Item
FSharp.Compiler.Syntax.SyntaxNode+SynType: FSharp.Compiler.Syntax.SynType get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn Item
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn: FSharp.Compiler.Syntax.SynTypeDefn get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig: FSharp.Compiler.Syntax.SynTypeDefnSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+SynValSig: FSharp.Compiler.Syntax.SynValSig Item
FSharp.Compiler.Syntax.SyntaxNode+SynValSig: FSharp.Compiler.Syntax.SynValSig get_Item()
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynBinding
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynExpr
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMatchClause
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynMemberSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModule
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynPat
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynType
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode+Tags: Int32 SynValSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynBinding
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynExpr
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMatchClause
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynMemberSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModule
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynPat
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynType
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean IsSynValSig
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynBinding()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynExpr()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMatchClause()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberDefn()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynMemberSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModule()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespace()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleOrNamespaceSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynModuleSigDecl()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynPat()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynType()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefn()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynTypeDefnSig()
FSharp.Compiler.Syntax.SyntaxNode: Boolean get_IsSynValSig()
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynBinding(FSharp.Compiler.Syntax.SynBinding)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynExpr(FSharp.Compiler.Syntax.SynExpr)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMatchClause(FSharp.Compiler.Syntax.SynMatchClause)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberDefn(FSharp.Compiler.Syntax.SynMemberDefn)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynMemberSig(FSharp.Compiler.Syntax.SynMemberSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModule(FSharp.Compiler.Syntax.SynModuleDecl)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespace(FSharp.Compiler.Syntax.SynModuleOrNamespace)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleOrNamespaceSig(FSharp.Compiler.Syntax.SynModuleOrNamespaceSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynModuleSigDecl(FSharp.Compiler.Syntax.SynModuleSigDecl)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynPat(FSharp.Compiler.Syntax.SynPat)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynType(FSharp.Compiler.Syntax.SynType)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefn(FSharp.Compiler.Syntax.SynTypeDefn)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynTypeDefnSig(FSharp.Compiler.Syntax.SynTypeDefnSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode NewSynValSig(FSharp.Compiler.Syntax.SynValSig)
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynBinding
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynExpr
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMatchClause
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberDefn
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynMemberSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModule
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespace
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleOrNamespaceSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynModuleSigDecl
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynPat
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynType
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefn
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynTypeDefnSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+SynValSig
FSharp.Compiler.Syntax.SyntaxNode: FSharp.Compiler.Syntax.SyntaxNode+Tags
FSharp.Compiler.Syntax.SyntaxNode: Int32 Tag
FSharp.Compiler.Syntax.SyntaxNode: Int32 get_Tag()
......@@ -9311,6 +9346,8 @@ FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOptio
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitMatchClause(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynMatchClause,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynMatchClause)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleDecl)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespace(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespace)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespaceSig)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleSigDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleSigDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleSigDecl)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynPat)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynLongIdent])
......@@ -9318,6 +9355,7 @@ FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOptio
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitTypeAbbrev(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitUnionDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase], FSharp.Compiler.Text.Range)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitValSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynValSig,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynValSig)
FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Void .ctor()
FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 HeadType
FSharp.Compiler.Syntax.TyparStaticReq+Tags: Int32 None
......@@ -75,3 +75,95 @@ let ``Visit recursive let binding`` () =
match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with
| Some [ SynBinding(valData = SynValData(valInfo = SynValInfo(curriedArgInfos = [ [ SynArgInfo(ident = Some id) ] ]))) ] when id.idText = "n" -> ()
| _ -> failwith "Did not visit recursive let binding"
[<Fact>]
let ``Visit ValSig`` () =
let visitor =
{ new SyntaxVisitorBase<_>() with
member x.VisitValSig(path, defaultTraverse, SynValSig(ident = SynIdent(ident = valIdent))) =
Some valIdent.idText
}
let source = """
module X
val y: int -> int
"""
let parseTree = parseSourceCode("C:\\test.fsi", source)
match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with
| Some "y" -> ()
| _ -> failwith "Did not visit SynValSig"
[<Fact>]
let ``Visit nested ValSig`` () =
let visitor =
{ new SyntaxVisitorBase<_>() with
member x.VisitValSig(path, defaultTraverse, SynValSig(ident = SynIdent(ident = valIdent))) =
Some valIdent.idText
}
let source = """
module X
module Y =
val z: int -> int
"""
let parseTree = parseSourceCode("C:\\test.fsi", source)
match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with
| Some "z" -> ()
| _ -> failwith "Did not visit SynValSig"
[<Fact>]
let ``Visit Record in SynTypeDefnSig`` () =
let visitor =
{ new SyntaxVisitorBase<_>() with
member x.VisitRecordDefn(path, fields, range) =
fields
|> List.choose (fun (SynField(idOpt = idOpt)) -> idOpt |> Option.map (fun ident -> ident.idText))
|> String.concat ","
|> Some
}
let source = """
module X
type Y =
{
A: int
B: char
C: string
}
"""
let parseTree = parseSourceCode("C:\\test.fsi", source)
match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with
| Some "A,B,C" -> ()
| _ -> failwith "Did not visit SynTypeDefnSimpleRepr.Record in SynTypeDefnSig"
[<Fact>]
let ``Visit SynValSig in SynMemberSig`` () =
let visitor =
{ new SyntaxVisitorBase<_>() with
member x.VisitValSig(path, defaultTraverse, SynValSig(ident = SynIdent(ident = valIdent))) =
Some valIdent.idText
}
let source = """
module Lib
type Meh =
new: unit -> Meh
member Foo: y: int -> int
"""
let parseTree = parseSourceCode("C:\\test.fsi", source)
let pos = mkPos 6 4
match SyntaxTraversal.Traverse(pos, parseTree, visitor) with
| Some "Foo" -> ()
| _ -> failwith "Did not visit SynValSig in SynMemberSig.Member"
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册