public static SourceDetail GetSourceDetail(ISymbol symbol) { // For namespace, definition is meaningless if (symbol == null || symbol.Kind == SymbolKind.Namespace) { return(null); } var syntaxRef = symbol.DeclaringSyntaxReferences.LastOrDefault(); if (symbol.IsExtern || syntaxRef == null) { return(new SourceDetail { IsExternalPath = true, Path = symbol.ContainingAssembly?.Name, }); } var syntaxNode = syntaxRef.GetSyntax(); Debug.Assert(syntaxNode != null); if (syntaxNode != null) { var source = new SourceDetail { StartLine = syntaxNode.SyntaxTree.GetLineSpan(syntaxNode.Span).StartLinePosition.Line, Path = syntaxNode.SyntaxTree.FilePath, Name = symbol.Name }; source.Remote = GitUtility.GetGitDetail(source.Path); if (source.Remote != null) { source.Path = source.Path.FormatPath(UriKind.Relative, source.Remote.LocalWorkingDirectory); } return(source); } return(null); }
public static SourceDetail GetSourceDetail(ISymbol symbol) { if (symbol == null) { return null; } var syntaxRef = symbol.DeclaringSyntaxReferences.LastOrDefault(); if (symbol.IsExtern || syntaxRef == null) { return new SourceDetail { IsExternalPath = true, Path = symbol.ContainingAssembly?.Name, }; } var syntaxNode = syntaxRef.GetSyntax(); Debug.Assert(syntaxNode != null); if (syntaxNode != null) { var source = new SourceDetail { StartLine = syntaxNode.SyntaxTree.GetLineSpan(syntaxNode.Span).StartLinePosition.Line, Path = syntaxNode.SyntaxTree.FilePath, }; source.Remote = GitUtility.GetGitDetail(source.Path); if (source.Remote != null) { source.Path = source.Path.FormatPath(UriKind.Relative, source.Remote.LocalWorkingDirectory); } return source; } return null; }