예제 #1
0
        IUsing CreateUsing(IProjectContent pc, string @namespace)
        {
            DefaultUsing @using = new DefaultUsing(pc);

            @using.Usings.Add(@namespace);
            return(@using);
        }
예제 #2
0
        public void SetUpFixture()
        {
            resolver = new PythonResolver();
            ParseInformation parseInfo = new ParseInformation();

            mockProjectContent = new MockProjectContent();
            mockProjectContent.NamespacesToAdd.Add("Test");
            myTestClass = new MockClass(mockProjectContent, "MyTestClass");
            ArrayList namespaceItems = new ArrayList();

            namespaceItems.Add(myTestClass);
            mockProjectContent.AddExistingNamespaceContents("MyNamespace", namespaceItems);

            DefaultCompilationUnit cu = new DefaultCompilationUnit(mockProjectContent)
            {
                ErrorsDuringCompile = true
            };

            parseInfo.SetCompilationUnit(cu);

            // Add usings.
            DefaultUsing newUsing = new DefaultUsing(cu.ProjectContent);

            newUsing.Usings.Add("MyNamespace");
            cu.UsingScope.Usings.Add(newUsing);

            results = resolver.CtrlSpace(0, "".Length, parseInfo, "", ExpressionContext.Default);
        }
        public void SetUpFixture()
        {
            resolver           = new PythonResolver();
            mockProjectContent = new ICSharpCode.Scripting.Tests.Utils.MockProjectContent();
            mockProjectContent.NamespacesToAdd.Add("Test");
            myTestClass = new MockClass(mockProjectContent, "MyTestClass");
            List <ICompletionEntry> namespaceItems = new List <ICompletionEntry>();

            namespaceItems.Add(myTestClass);
            mockProjectContent.AddExistingNamespaceContents("MyNamespace", namespaceItems);

            DefaultCompilationUnit cu = new DefaultCompilationUnit(mockProjectContent);

            // Add usings.
            DefaultUsing newUsing = new DefaultUsing(cu.ProjectContent);

            newUsing.Usings.Add("MyNamespace");
            DefaultUsingScope usingScope = new DefaultUsingScope();

            usingScope.Usings.Add(newUsing);
            cu.UsingScope = usingScope;
            ParseInformation parseInfo = new ParseInformation(cu);

            results = resolver.CtrlSpace(0, "".Length, parseInfo, "", ExpressionContext.Default);
        }
예제 #4
0
        public StringBuilder GetUsingBuilder()
        {
            Using(UsingRecoder.Types);
            //如果用户想使用自定义的Using
            if (AssemblyBuilder.CustomUsingShut)
            {
                UsingScript = new StringBuilder();
                foreach (var @using in _usings)
                {
                    UsingScript.AppendLine($"using {@using};");
                }
            }
            else
            {
                //使用全局Using
                UsingScript.Append(DefaultUsing.DefaultScript);

                //把当前域中的using全部加上
                Using(AssemblyBuilder.Compiler.Domain.GetPluginAssemblies());
                foreach (var @using in _usings)
                {
                    //如果全局已经存在using了,就不加了
                    if (!DefaultUsing.HasElement(@using))
                    {
                        UsingScript.AppendLine($"using {@using};");
                    }
                }
            }


            return(UsingScript);
        }
예제 #5
0
 void UpdateDefaultImports(ICollection <ProjectItem> items)
 {
     if (languageDefaultImportCount < 0)
     {
         languageDefaultImportCount = (DefaultImports != null) ? DefaultImports.Usings.Count : 0;
     }
     if (languageDefaultImportCount == 0)
     {
         DefaultImports = null;
     }
     else
     {
         while (DefaultImports.Usings.Count > languageDefaultImportCount)
         {
             DefaultImports.Usings.RemoveAt(languageDefaultImportCount);
         }
     }
     foreach (ProjectItem item in items)
     {
         if (item.ItemType == ItemType.Import)
         {
             if (DefaultImports == null)
             {
                 DefaultImports = new DefaultUsing(this);
             }
             DefaultImports.Usings.Add(item.Include);
         }
     }
 }
예제 #6
0
 internal static IEnumerable <UsingDirectiveSyntax> Handler(CompilationUnitSyntax root, HashSet <string> noUseUsings)
 {
     DefaultUsing.Remove(noUseUsings);
     return(from usingDeclaration in root.Usings
            where noUseUsings.Contains(usingDeclaration.Name.ToFullString())
            select usingDeclaration);
 }
        DefaultUsing CreateUsing(string namespaceName, IProjectContent projectContent)
        {
            var defaultUsing = new DefaultUsing(projectContent);

            defaultUsing.Usings.Add(namespaceName);
            return(defaultUsing);
        }
예제 #8
0
 private void NatashaReferenceDomain_LoadAssemblyReferenceWithStream(Assembly assembly, System.IO.Stream stream)
 {
     References.AddReference(assembly.GetName(), stream);
     if (Name == "Default")
     {
         DefaultUsing.AddUsing(assembly);
     }
     UsingRecorder.Using(assembly);
 }
예제 #9
0
        public StringBuilder GetUsingBuilder()
        {
#if DEBUG
            Stopwatch stopwatch = new();
            stopwatch.Start();
#endif
            var usingScript = new StringBuilder();

            //如果用户想使用自定义的Using
            if (!_useGlobalUsing)
            {
                foreach (var @using in UsingRecorder._usings)
                {
                    usingScript.AppendLine($"using {@using};");
                }
                //使用全局Using
                if (_autoLoadDomainUsing)
                {
                    foreach (var @using in AssemblyBuilder.Domain.UsingRecorder._usings)
                    {
                        if (!UsingRecorder.HasUsing(@using))
                        {
                            usingScript.AppendLine($"using {@using};");
                        }
                    }
                }
            }
            else
            {
                //使用全局Using
                if (_autoLoadDomainUsing && AssemblyBuilder.Domain.Name != "Default")
                {
                    foreach (var @using in AssemblyBuilder.Domain.UsingRecorder._usings)
                    {
                        if (!DefaultUsing.HasElement(@using) && !UsingRecorder.HasUsing(@using))
                        {
                            usingScript.AppendLine($"using {@using};");
                        }
                    }
                }

                //把当前域中的using全部加上
                foreach (var @using in UsingRecorder._usings)
                {
                    //如果全局已经存在using了,就不加了
                    if (!DefaultUsing.HasElement(@using))
                    {
                        usingScript.AppendLine($"using {@using};");
                    }
                }
                usingScript.Append(DefaultUsing.UsingScript);
            }
#if DEBUG
            stopwatch.StopAndShowCategoreInfo("[using]", "using 组合", 3);
#endif
            return(usingScript);
        }
예제 #10
0
 private void NatashaReferenceDomain_LoadAssemblyReferencsWithPath(Assembly assembly, string path)
 {
     References.AddReference(assembly.GetName(), path);
     if (Name == "Default")
     {
         DefaultUsing.AddUsing(assembly);
     }
     UsingRecorder.Using(assembly);
 }
예제 #11
0
        void AddUsing(string requireString)
        {
            string assemblyName = GetAssemblyName(requireString);

            DefaultUsing defaultUsing = new DefaultUsing(compilationUnit.ProjectContent);

            defaultUsing.Usings.Add(assemblyName);
            compilationUnit.UsingScope.Usings.Add(defaultUsing);
        }
예제 #12
0
        public override object VisitUsingDeclaration(AST.UsingDeclaration usingDeclaration, object data)
        {
            DefaultUsing us = new DefaultUsing(cu.ProjectContent, GetRegion(usingDeclaration.StartLocation, usingDeclaration.EndLocation));

            foreach (AST.Using u in usingDeclaration.Usings)
            {
                u.AcceptVisitor(this, us);
            }
            currentNamespace.Usings.Add(us);
            return(data);
        }
예제 #13
0
        public static IEnumerable <UsingDirectiveSyntax> Handler(Diagnostic diagnostic)
        {
            var root   = diagnostic.Location.SourceTree.GetRoot();
            var usings = GetUnableUsing(diagnostic, root.ToFullString());
            var sets   = new HashSet <string>(usings);

            DefaultUsing.Remove(sets);
            return(from usingDeclaration in root.DescendantNodes()
                   .OfType <UsingDirectiveSyntax>()
                   where sets.Contains(usingDeclaration.Name.ToFullString())
                   select usingDeclaration);
        }
        public static void AddUsingDeclaration(ICompilationUnit cu, IDocument document, string newNamespace, bool sortExistingUsings)
        {
            if (cu == null)
            {
                throw new ArgumentNullException("cu");
            }
            if (document == null)
            {
                throw new ArgumentNullException("document");
            }
            if (newNamespace == null)
            {
                throw new ArgumentNullException("newNamespace");
            }

            ParseInformation info = ParserService.ParseFile(cu.FileName, document);

            if (info != null)
            {
                cu = info.CompilationUnit;
            }

            IUsing newUsingDecl = new DefaultUsing(cu.ProjectContent);

            newUsingDecl.Usings.Add(newNamespace);

            List <IUsing> newUsings = new List <IUsing>(cu.UsingScope.Usings);

            if (sortExistingUsings)
            {
                newUsings.Sort(CompareUsings);
            }
            bool inserted = false;

            for (int i = 0; i < newUsings.Count; i++)
            {
                if (CompareUsings(newUsingDecl, newUsings[i]) <= 0)
                {
                    newUsings.Insert(i, newUsingDecl);
                    inserted = true;
                    break;
                }
            }
            if (!inserted)
            {
                newUsings.Add(newUsingDecl);
            }
            if (sortExistingUsings)
            {
                PutEmptyLineAfterLastSystemNamespace(newUsings);
            }
            cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(new RefactoringDocumentAdapter(document), cu.UsingScope.Usings, newUsings);
        }
예제 #15
0
        public static IEnumerable <UsingDirectiveSyntax> Handler(CompilationUnitSyntax root, Diagnostic diagnostic)
        {
            var needToRemove = GetUnableUsing(diagnostic);
            var nodes        = from usingDeclaration in root.Usings
                               where usingDeclaration.Name.ToFullString().StartsWith(needToRemove)
                               select usingDeclaration;

            if (nodes != null)
            {
                DefaultUsing.Remove(nodes.Select(item => item.Name.ToFullString()));
            }
            return(nodes);
        }
        public static void RemoveUsingAndNodesFromStartName(this Diagnostic diagnostic, CompilationUnitSyntax root, HashSet <SyntaxNode> removeCollection)
        {
            var usingNode = GetTypeSyntaxNode <UsingDirectiveSyntax>(diagnostic, root);

            if (usingNode != null)
            {
                var usingNodes = (from usingDeclaration in root.Usings
                                  where usingDeclaration.Name.ToString().StartsWith(usingNode.Name.ToString())
                                  select usingDeclaration).ToList();

                removeCollection.UnionWith(usingNodes);
                DefaultUsing.Remove(usingNodes.Select(item => item.Name.ToString()));
            }
        }
예제 #17
0
        public override void OnImport(AST.Import p)
        {
            DefaultUsing u = new DefaultUsing(_cu.ProjectContent);

            if (p.Alias == null)
            {
                u.Usings.Add(p.Namespace);
            }
            else
            {
                u.AddAlias(p.Alias.Name, new GetClassReturnType(_cu.ProjectContent, p.Namespace, 0));
            }
            _cu.UsingScope.Usings.Add(u);
        }
예제 #18
0
        public static IEnumerable <UsingDirectiveSyntax> Handler(Diagnostic diagnostic)
        {
            var needToRemove = GetUnableUsing(diagnostic);
            var nodes        = from usingDeclaration in diagnostic.Location.SourceTree.GetRoot()
                               .DescendantNodes()
                               .OfType <UsingDirectiveSyntax>()
                               where usingDeclaration.Name.ToFullString().StartsWith(needToRemove)
                               select usingDeclaration;

            if (nodes != null)
            {
                DefaultUsing.Remove(nodes.Select(item => item.Name.ToFullString()));
            }
            return(nodes);
        }
예제 #19
0
        public override object VisitUsing(AST.Using u, object data)
        {
            Debug.Assert(data is DefaultUsing);
            DefaultUsing us = (DefaultUsing)data;

            if (u.IsAlias)
            {
                IReturnType rt = CreateReturnType(u.Alias);
                if (rt != null)
                {
                    us.AddAlias(u.Name, rt);
                }
            }
            else
            {
                us.Usings.Add(u.Name);
            }
            return(data);
        }
		public override object VisitUsingDeclaration(AST.UsingDeclaration usingDeclaration, object data)
		{
			DefaultUsing us = new DefaultUsing(cu.ProjectContent, GetRegion(usingDeclaration.StartLocation, usingDeclaration.EndLocation));
			foreach (AST.Using u in usingDeclaration.Usings) {
				u.AcceptVisitor(this, us);
			}
			currentNamespace.Usings.Add(us);
			return data;
		}
        void AddUsing(string name, ICompilationUnit compilationUnit)
        {
            DefaultUsing defaultUsing = CreateUsing(name, compilationUnit.ProjectContent);

            compilationUnit.UsingScope.Usings.Add(defaultUsing);
        }
 public static void RemoveUsingAndNode(this UsingDirectiveSyntax usingDirectiveSyntax, HashSet <SyntaxNode> removeCollection)
 {
     removeCollection.Add(usingDirectiveSyntax);
     DefaultUsing.Remove(usingDirectiveSyntax.Name.ToString());
 }
예제 #23
0
 public static void AddDefaultReferenceAndUsing(AssemblyName assemblyName, string path)
 {
     DefaultDomain.References.AddReference(assemblyName, path);
     DefaultUsing.AddUsing(assemblyName);
 }