예제 #1
0
        internal static string GetPackageName(this Syntax.Document doc)
        {
            string configNs = ConverterContext.Current.Config.Namespace;

            if (!string.IsNullOrEmpty(configNs))
            {
                return(configNs);
            }

            return(doc.RelativePath.Replace(Path.DirectorySeparatorChar, '.'));
        }
        public SyntaxList <UsingDirectiveSyntax> Convert(ImportClause node)
        {
            SyntaxList <UsingDirectiveSyntax> usings = new SyntaxList <UsingDirectiveSyntax>();

            if (node.Name != null) // default
            {
                ImportDeclaration import  = node.Ancestor(NodeKind.ImportDeclaration) as ImportDeclaration;
                Syntax.Document   fromDoc = import?.FromDocument;
                Node definition           = fromDoc?.GetExportDefaultTypeDefinition();
                if (definition != null)
                {
                    string definitionPackage = definition.Document.GetPackageName();
                    string package           = import.Document.GetPackageName();
                    string name         = node.Name.Text;
                    string propertyName = (string)definition.GetValue("NameText");

                    if (package != definitionPackage || name != propertyName)
                    {
                        UsingDirectiveSyntax usingSyntax = SyntaxFactory.UsingDirective(
                            SyntaxFactory.NameEquals(name),
                            SyntaxFactory.ParseName($"{definitionPackage}.{propertyName}"));
                        usings = usings.Add(usingSyntax);
                    }
                }
            }

            if (node.NamedBindings != null)
            {
                switch (node.NamedBindings.Kind)
                {
                case NodeKind.NamespaceImport:
                    UsingDirectiveSyntax usingSyntax = node.NamedBindings.ToCsNode <UsingDirectiveSyntax>();
                    if (usingSyntax != null)
                    {
                        usings = usings.Add(usingSyntax);
                    }
                    break;

                case NodeKind.NamedImports:
                    usings = usings.AddRange(node.NamedBindings.ToCsNode <IEnumerable <UsingDirectiveSyntax> >());
                    break;

                default:
                    break;
                }
            }

            return(usings);
        }
예제 #3
0
        /// <summary>
        /// Gets all type names of the document.
        /// </summary>
        /// <returns></returns>
        public static List <string> GetTypeNames(Syntax.Document doc)
        {
            List <string> ret   = new List <string>();
            List <Node>   types = doc.TypeNodes;

            foreach (Node type in types)
            {
                string name = TypeHelper.GetTypeName(type);
                if (!string.IsNullOrEmpty(name))
                {
                    ret.Add(name);
                }
            }
            return(ret);
        }