public static IEnumerable <Usage> FindUsages(this TsProject <TypescriptCompilation> tsProject, TypeAliasDefinition first) { string fileName = (first.Node.Ast.RootNode as SourceFile).FileName; var compilations = tsProject.Compiled.Where(c => c.Imports != null && c.Imports .Where(i => i.IsLocalImport) .Any(i => (i.AbsolutePath.Equals(fileName) && i.ImportedModules.Any(m => m.Name.Equals(first.Name))) || i.AbsolutePath.Equals(fileName) && i.ImportedModules.Any(m => m.Name.Equals("*")) )).ToList(); List <Usage> positions = new List <Usage>(); foreach (var compilation in compilations) { var import = compilation.FindImport(first.Name, fileName); if (import == null) { continue; } if (import.ImportedModules.Count == 1 && import.ImportedModules.First().IsNamespaceImport) { var namespaceImport = import.ImportedModules.First(); var potentialUsages = compilation.Ast.RootNode.GetDescendants().OfType <Identifier>() .Where(i => IsNamespaceImportedClass(first.Name, i, namespaceImport)); var usages = potentialUsages.Where(p => p.Parent is NewExpression || p.Parent.Parent is NewExpression).Select(p => p.Parent is NewExpression ? p.Parent : p.Parent.Parent); positions.AddRange(usages.Select(usage => new Usage { Compilation = compilation, Node = usage, IsNamespaceImport = true })); } else { var potentialUsages = compilation.Ast.RootNode.GetDescendants().OfType <Identifier>() .Where(i => i.IdentifierStr.Equals(first.Name)); var usages = potentialUsages.Where(p => p.Parent is NewExpression || p.Parent.Parent is NewExpression).Select(p => p.Parent is NewExpression ? p.Parent : p.Parent.Parent); positions.AddRange(usages.Select(usage => new Usage { Compilation = compilation, Node = usage })); } } return(positions); }
public static IEnumerable <Usage> FindUsages(this TsProject <TypescriptCompilation> tsProject, ImportedModule first) { var compilations = tsProject.Compiled.Where(c => c.Imports != null && c.Imports.Any(i => i.ImportedModules.Contains(first))).ToList(); List <Usage> positions = new List <Usage>(); foreach (var compilation in compilations) { var potentialUsages = compilation.Ast.RootNode.GetDescendants().OfType <Identifier>() .Where(i => i.IdentifierStr.Equals(first.Name)) .Where(i => !i.GetAncestors().Any(ancestor => ancestor is ImportDeclaration)); positions.AddRange(potentialUsages.Select(usage => new Usage { Compilation = compilation, Node = usage })); } return(positions); }