Пример #1
0
        // enumerate all tables in our database and build a table/column hashtable for code completion
        void buildDataHT()
        {
            sqlConnection1.Open();
            DataTable dt = sqlConnection1.GetSchema("Columns");

            sqlConnection1.Close();

            string lasttbl = (string)dt.Rows[0][2];

            ICompletionData[] cd = new ICompletionData[1];
            int i  = 0;
            int rc = 0; // rowcount

            foreach (DataRow dr in dt.Rows)
            {
                if ((string)dr[2] == lasttbl)
                {
                    ICompletionData[] cdtemp = new ICompletionData[rc + 1];
                    cd.CopyTo(cdtemp, 0);
                    cd     = cdtemp;
                    cd[rc] = new DefaultCompletionData((string)dr[3], (string)dr[7] + " " + (string)dr[3], 0);
                }
                else
                {
                    rc = 0;
                    htWordNet.Add(lasttbl, cd);
                    cd      = new ICompletionData[1];
                    cd[rc]  = new DefaultCompletionData((string)dr[3], (string)dr[7] + " " + (string)dr[3], 0);
                    lasttbl = (string)dt.Rows[i][2];
                }

                i++;
                rc++;
            }
        }
Пример #2
0
        public void UpdateCodeCompletion(LiteDatabase db)
        {
            _codeCompletionData = new List <ICompletionData>();

            var item = new DefaultCompletionData(DateTime.Now.Second.ToString(), "segundos", 4)
            {
                Priority = double.MaxValue
            };

            _codeCompletionData.Add(item);


            // getting all BsonExpression methods
            foreach (var m in BsonExpression.Methods.OrderBy(x => x.Name))
            {
                var text        = m.Name;
                var description = $"Method:\n-   {text}({string.Join(", ", m.GetParameters().Select(x => x.Name))})";
                var icon        = 0; // METHOD

                _codeCompletionData.Add(new DefaultCompletionData(text, description, icon));
            }

            // get all keywords
            var words = new List <string>();

            using (var stream =
                       typeof(SqlCodeCompletion).Assembly.GetManifestResourceStream(
                           "LiteDB.Studio.ICSharpCode.TextEditor.Resources.SQL-Mode.xshd"))
            {
                using (var reader = new StreamReader(stream))
                {
                    var content = reader.ReadToEnd();
                    var xml     = new XmlDocument();
                    xml.LoadXml(content);

                    var nodes = xml.DocumentElement.SelectNodes(
                        "/SyntaxDefinition/RuleSets/RuleSet/KeyWords[@name=\"SqlKeywordsNormal\"]/Key");

                    words.AddRange(nodes.Cast <XmlNode>().Select(x => x.Attributes["word"].Value));
                }
            }

            _codeCompletionData.AddRange(words.OrderBy(x => x).Select(x => new DefaultCompletionData(x, null, 3)));

            if (db == null)
            {
                return;
            }

            // collections
            var cols = db.GetCollection("$cols").Query().ToArray();

            _codeCompletionData.AddRange(cols.Select(x => new DefaultCompletionData(x["name"].AsString,
                                                                                    (x["type"] == "user" ? "User collection:\n-   " : "System collection:\n-   ") +
                                                                                    x["name"].AsString,
                                                                                    x["type"] == "user" ? 1 :
                                                                                    x["type"] == "system" ? 5 : 4)));
        }
Пример #3
0

        
 public override ICompletionData[] GenerateCompletionData(string fileName, TextArea textArea, char charTyped)
 {
     ICompletionData[] data = new ICompletionData[texts.Length];
     for (int i = 0; i < data.Length; i++)
     {
         data[i] = new DefaultCompletionData(texts[i], null, ClassBrowserIconService.GotoArrowIndex);
     }
     return(data);
 }
Пример #5
0
        public void UpdateCodeCompletion(TaosConnection db)
        {
            _codeCompletionData = new List <ICompletionData>();

            var item = new DefaultCompletionData(DateTime.Now.Second.ToString(), "segundos", 4);

            item.Priority = double.MaxValue;

            _codeCompletionData.Add(item);


            // getting all BsonExpression methods
            //foreach (var m in BsonExpression.Methods.OrderBy(x => x.Name))
            //{
            //    var text = m.Name;
            //    var description = $"Method:\n-   {text}({string.Join(", ", m.GetParameters().Select(x => x.Name))})";
            //    var icon = 0; // METHOD

            //    _codeCompletionData.Add(new DefaultCompletionData(text, description, icon));
            //}

            // get all keywords
            var words = new List <string>();

            using (var stream = new MemoryStream(ICSharpCode.TextEditor.Properties.Resources.SQL_Mode))
            {
                using (var reader = new StreamReader(stream))
                {
                    var content = reader.ReadToEnd();
                    var xml     = new XmlDocument();
                    xml.LoadXml(content);

                    var nodes = xml.DocumentElement.SelectNodes("/SyntaxDefinition/RuleSets/RuleSet/KeyWords[@name=\"SqlKeywordsNormal\"]/Key");

                    words.AddRange(nodes.Cast <XmlNode>().Select(x => x.Attributes["word"].Value));
                }
            }

            _codeCompletionData.AddRange(words.OrderBy(x => x).Select(x => new DefaultCompletionData(x, null, 3)));

            if (db == null)
            {
                return;
            }

            // collections
            var cols = new string[] { };// db.GetSchema("$cols").ToList().Query().ToArray();

            //_codeCompletionData.AddRange(cols.Select(x => new DefaultCompletionData(x["name"].AsString,
            //    (x["type"] == "user" ? "User collection:\n-   " : "System collection:\n-   ") +
            //    x["name"].AsString,
            //    x["type"] == "user" ? 1 :
            //    x["type"] == "system" ? 5 : 4)));
        }
Пример #6
0
        private void addStaticData(string text, string desc, int imgIndex)
        {
            DefaultCompletionData data = new DefaultCompletionData(text, desc, imgIndex);

            staticData.Add(data);
        }
Пример #7
0
        private void ShowCompletion(string text)
        {
            if (_completionWindow != null)
            {
                return;
            }

            var lineText = GetLineText();
            var dotParts = lineText.Split(new [] { '.' }, StringSplitOptions.None);
            var words    = lineText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                           .Select(p => p.Trim())
                           .ToArray();

            // var word = GetWord(TextArea.Caret.Offset - 1);

            var inCollectionNames = lineText.Equals("db.", StringComparison.OrdinalIgnoreCase);

            var inCollectionCommands = dotParts.Length == 3 && string.IsNullOrEmpty(dotParts.Last()) && _collections.Any(col => col.Equals(dotParts[1], StringComparison.OrdinalIgnoreCase));

            if (inCollectionCommands)
            {
                inCollectionNames = false;
            }

            var inCollectionFilters = dotParts.Length >= 3 && !string.IsNullOrWhiteSpace(dotParts[2]) &&
                                      TextArea.Document.GetCharAt(TextArea.Caret.Offset - 1) == ' ';

            if (inCollectionFilters)
            {
                inCollectionCommands = false;
            }

            var codeCompletionData = new List <ICompletionData>();

            if (string.IsNullOrWhiteSpace(lineText) || lineText.Equals("d") || lineText.Equals("db"))
            {
                var emptyData = new DefaultCompletionData("db", "db", 0).SetIcon(PackIconKind.Database);
                codeCompletionData.Add(emptyData);
            }

            // Complete collection names
            if (inCollectionNames)
            {
                var collectionNamesData = _collections.Select(key =>
                                                              new DefaultCompletionData($"db.{key}", key, inCollectionNames ? 0 : 1).SetIcon(PackIconKind.Table)
                                                              );
                codeCompletionData.AddRange(collectionNamesData);
            }

            // Complete collection commands
            if (inCollectionCommands && dotParts.Length > 0)
            {
                var collectionName = dotParts[1];

                var collectionsCommandsData = _collectionsCommandsKeys.Select(key =>
                                                                              new DefaultCompletionData($"db.{collectionName}.{key}", key, inCollectionCommands ? 0: 2).SetIcon(PackIconKind.AppleKeyboardCommand)
                                                                              );
                codeCompletionData.AddRange(collectionsCommandsData);
            }

            // Complete collection filters
            if (inCollectionFilters)
            {
                var hasFilterExpression = words.Any() && _queryFilterKeys.Any(filterKey => words.Last().Equals(filterKey, StringComparison.OrdinalIgnoreCase));
                if (hasFilterExpression)
                {
                    var logicalOperators = _queryOperatorKeys.Select(key =>

                                                                     new DefaultCompletionData(lineText + key, key, 0).SetIcon(PackIconKind.CodeTags)
                                                                     );
                    codeCompletionData.AddRange(logicalOperators);
                }

                var collectionsFiltersData = _queryFilterKeys.Select(key =>
                                                                     new DefaultCompletionData(lineText + key, key, 2).SetIcon(PackIconKind.FilterOutline)
                                                                     );
                codeCompletionData.AddRange(collectionsFiltersData);

                var collectionName   = dotParts[1];
                var collectionFields = _databaseReference?[collectionName]?.GetDistinctKeys();
                if (collectionFields != null)
                {
                    var fieldsData = collectionFields.Select(key =>
                                                             new DefaultCompletionData(lineText + key, key, 1).SetIcon(PackIconKind.LabelOutline)
                                                             );
                    codeCompletionData.AddRange(fieldsData);
                }
            }

            if (codeCompletionData.Any())
            {
                ShowCodeCompleteWindow(codeCompletionData);
            }
        }