Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }