static bool IsParentNamespaceInContextNamespaces(DataType dataType, ICollection <string> namespaceDeclarations)
        {
            if (dataType.Parent == null || dataType.Parent.NamescopeType != NamescopeType.Namespace)
            {
                return(false);
            }

            return(dataType.Parent.IsRoot ||
                   namespaceDeclarations.Contains(dataType.Parent.FullName) ||
                   TypeAliases.HasAlias(dataType.QualifiedName));
        }
Exemple #2
0
        public string GetFullIndexTitle(IEntity entity)
        {
            var dataType = (DataType)entity;
            var ns       = dataType.FindNamespace();

            var title = TypeAliases.HasAlias(dataType.QualifiedName)
                                ? GetIndexTitleInternal(entity, true)
                                : ns.FullName + "." + GetIndexTitleInternal(entity, true);

            return(title);
        }
 IEnumerable <SuggestItem> ConvertNamescopesToSuggestions(IEnumerable <Namescope> dataTypes)
 {
     return(dataTypes.Select(d =>
     {
         var itemType = SuggestItemType.Class;
         if (d is Namespace)
         {
             itemType = SuggestItemType.Namespace;
         }
         return SuggestionHelper.Suggest(itemType, d, TypeAliases.HasAlias(d.QualifiedName) ? d.FullName : d.Name);
     }));
 }
        public string FindMemberExpression(out TokenType terminatingToken, bool inTypeBody, bool skipToFirstPeriod = true)
        {
            var offset      = _reader.Offset;
            int firstPeriod = skipToFirstPeriod ? -1 : offset;

            Func <string> value = () =>
            {
                _reader.ReadToken();
                if (firstPeriod != -1)
                {
                    var s = _reader.ReadText(firstPeriod - _reader.Offset).Trim();
                    _reader.Offset = offset;
                    return(_memberExpression = s);
                }
                else
                {
                    _reader.Offset = offset;
                    return(_memberExpression = "");
                }
            };

            int scopes         = 0;
            int parens         = 0;
            int triangleParens = 0;

            var tokenHistory = new List <TokenType>();

            while (true)
            {
                var t = _reader.ReadTokenReverse();
                tokenHistory.Add(t);

                switch (t)
                {
                case TokenType.Period:
                {
                    if (firstPeriod == -1)
                    {
                        firstPeriod = _reader.Offset;
                        continue;
                    }
                }
                break;

                case TokenType.RightSquareBrace:
                case TokenType.RightParen:
                {
                    if (parens == 0)
                    {
                        var o2 = _reader.Offset;
                        _reader.ReadToken();
                        var t2 = _reader.ReadToken();
                        _reader.Offset = o2;
                        if (t2 != TokenType.Period && t2 != TokenType.LeftSquareBrace)
                        {
                            terminatingToken = t;
                            return(value());
                        }
                    }
                    parens++;
                }
                    continue;

                case TokenType.LeftSquareBrace:
                case TokenType.LeftParen:
                {
                    if (parens == 0)
                    {
                        terminatingToken = t; return(value());
                    }
                    --parens;
                    continue;
                }

                case TokenType.RightCurlyBrace:
                {
                    if (inTypeBody || parens == 0)
                    {
                        terminatingToken = t; return(value());
                    }
                    scopes++; continue;
                }

                case TokenType.LeftCurlyBrace:
                {
                    if (scopes == 0)
                    {
                        terminatingToken = t; return(value());
                    }
                    scopes--;
                }
                break;

                case TokenType.New:
                case TokenType.Import:
                case TokenType.Static:
                case TokenType.Using:
                case TokenType.Comma:
                case TokenType.Assign:
                case TokenType.Plus:
                case TokenType.Minus:
                case TokenType.Mul:
                case TokenType.Div:
                case TokenType.Mod:
                case TokenType.AddAssign:
                case TokenType.MinusAssign:
                case TokenType.MulAssign:
                case TokenType.DivAssign:
                case TokenType.ModAssign:
                case TokenType.NotEqual:
                case TokenType.Equal:
                case TokenType.LessOrEqual:
                case TokenType.GreaterOrEqual:
                case TokenType.LogAnd:
                case TokenType.LogOr:
                case TokenType.ExclamationMark:
                case TokenType.BitwiseAnd:
                case TokenType.BitwiseOr:
                case TokenType.BitwiseXor:
                case TokenType.BitwiseAndAssign:
                case TokenType.BitwiseOrAssign:
                case TokenType.BitwiseXorAssign:
                {
                    if (scopes == 0 && parens == 0)
                    {
                        terminatingToken = t; return(value());
                    }
                }
                break;

                case TokenType.GreaterThan:
                {
                    if (triangleParens > 0 || (tokenHistory.Count > 1 && tokenHistory[tokenHistory.Count - 2] == TokenType.Period))
                    {
                        ++triangleParens;
                    }
                    else
                    {
                        if (scopes == 0 && parens == 0)
                        {
                            terminatingToken = t; return(value());
                        }
                    }
                }
                break;

                case TokenType.LessThan:
                {
                    if (triangleParens > 0)
                    {
                        triangleParens--;
                    }
                    else
                    {
                        if (scopes == 0 && parens == 0)
                        {
                            terminatingToken = t; return(value());
                        }
                    }
                }
                break;

                case TokenType.Colon:
                case TokenType.Semicolon:
                {
                    if (scopes == 0)
                    {
                        terminatingToken = t; return(value());
                    }
                }
                break;

                case TokenType.EndOfFile:
                    terminatingToken = t;
                    return("");

                case TokenType.This: break;

                case TokenType.Identifier:
                {
                    var w = _reader.PeekTokenReverse();

                    if (scopes == 0 && parens == 0 && w == TokenType.Whitespace)
                    {
                        _reader.ReadTokenReverse();
                        w = _reader.PeekTokenReverse();
                        if (scopes == 0 && parens == 0 && (w == TokenType.Identifier || TypeAliases.HasAlias(w.ToLiteral())))
                        {
                            terminatingToken = t;
                            return(value());
                        }
                        _reader.ReadToken();

                        var o2 = _reader.Offset;
                        t = _reader.ReadToken();
                        var t1 = _reader.PeekToken();
                        _reader.Offset = o2;

                        if (t1 == TokenType.LeftParen)
                        {
                            _reader.ReadTokenReverse();
                            terminatingToken = t;
                            return(value());
                        }
                    }
                }
                break;

                default:
                {
                    if (Tokens.IsReserved(t.ToLiteral()))
                    {
                        if (scopes == 0 && parens == 0)
                        {
                            terminatingToken = t; return(value());
                        }
                    }
                }
                break;
                }
            }
        }