/// <summary> /// /// </summary> /// <param name="name"></param> /// <param name="span"></param> /// <returns></returns> public Declaration GetDeclaration(string name, ScopeSpan span) { if (_root == null) { return(null); } List <Declaration> foundDeclarations = new List <Declaration>(); Declaration declaration = DeclarationHelper.BuildDeclaration(name, span); GetDeclarationsByName(_root, declaration, foundDeclarations); foundDeclarations.Sort(delegate(Declaration a, Declaration b) { if (a.Scope.StartPosition >= b.Scope.StartPosition && a.Scope.EndPosition <= b.Scope.EndPosition) { return(-1); } else { return(1); } }); if (foundDeclarations.Count > 0) { return(foundDeclarations[0]); } return(null); }
internal static IdentifierSource ParseIdentifier(SnapshotPoint point) { int spanStart, spanEnd; for (spanEnd = point.Position; spanEnd < point.Snapshot.Length; ++spanEnd) { if (!char.IsLetterOrDigit(point.Snapshot[spanEnd])) { break; } } for (spanStart = point.Position; spanStart > 0; --spanStart) { if (!char.IsLetterOrDigit(point.Snapshot[spanStart - 1]) && point.Snapshot[spanStart - 1] != '.' && point.Snapshot[spanStart - 1] != ':') { break; } } string id = point.Snapshot.GetText().Substring(spanStart, spanEnd - spanStart); ScopeSpan span = new ScopeSpan(spanStart, point.GetContainingLine().LineNumber, spanEnd, point.GetContainingLine().LineNumber); return(new IdentifierSource(id, span)); }
public bool IsInScope(int position, ScopeSpan span) { if (position >= span.StartPosition && position <= span.EndPosition) { return(true); } return(false); }
public IdentifierSource(string id, ScopeSpan span) { Identifier = id; Span = span; NameSpaces = null; }
public IdentifierSource(string id, ScopeSpan span, List <IdentifierSource> nameSpaces) { Identifier = id; Span = span; NameSpaces = nameSpaces; }