public List <string> GetCompletionKeywordsAtPosition(LineChr lineChr)
        {
            var analysisResult = GetAnalysis(lineChr);

            if (analysisResult.IsInsideComment || analysisResult.IsAfterAnyErrorLine(lineChr))
            {
                return(new List <string>());
            }

            var typingToken = analysisResult.GetTokenBeingTypedAtCursor(lineChr);

            if (analysisResult.KeywordToken != null && analysisResult.KeywordToken != typingToken)
            {
                var fullAnalysis = GetAnalysis();
                return(fullAnalysis.NonKeywordWords);
            }

            var lastParent    = analysisResult.ConceptContext.LastOrDefault();
            var validConcepts = lastParent == null
                ? rhetosAppContext.ConceptInfoTypes.ToList()
                : conceptQueries.ValidConceptsForParent(lastParent.GetType());

            var keywords = validConcepts
                           .Select(concept => ConceptInfoHelper.GetKeyword(concept))
                           .Where(keyword => keyword != null)
                           .Distinct()
                           .OrderBy(keyword => keyword)
                           .ToList();

            return(keywords);
        }
        public void TestMethod1()
        {
            var ic = new InitializationConcept {
                RhetosVersion = "1.2.3"
            };

            Assert.AreEqual("InitializationConcept '1.2.3'", ic.GetKey());
            Assert.AreEqual("InitializationConcept '1.2.3'", ic.GetShortDescription());
            Assert.AreEqual("InitializationConcept '1.2.3'", ic.GetUserDescription());
            Assert.AreEqual("'1.2.3'", ic.GetKeyProperties());
            Assert.AreEqual("Rhetos.Dsl.InitializationConcept '1.2.3'", ic.GetFullDescription());
            Assert.AreEqual(null, ic.GetKeyword());
            Assert.AreEqual("InitializationConcept", ic.GetKeywordOrTypeName());
            Assert.AreEqual(0, ic.GetDirectDependencies().Count());
            Assert.AreEqual(0, ic.GetAllDependencies().Count());
            Assert.AreEqual("Rhetos.Dsl.InitializationConcept RhetosVersion=1.2.3", ic.GetErrorDescription());

            Assert.AreEqual(null, ConceptInfoHelper.GetKeyword(typeof(InitializationConcept)));
            Assert.AreEqual("InitializationConcept", ConceptInfoHelper.GetKeywordOrTypeName(typeof(InitializationConcept)));
        }
Exemplo n.º 3
0
        private int GetActiveParameterForValidConcept(Type conceptType)
        {
            var activeParameter = 0;

            // we have parsed some members successfully for this concept type
            if (LastTokenParsed.ContainsKey(conceptType))
            {
                activeParameter = ConceptInfoType.IndexOfParameter(conceptType, LastMemberReadAttempt[conceptType]);

                // if we have just typed a keyword OR have stopped typing a parameter (by pressing space, etc.), we need to advance to next parameter
                // keyword scenario is possible in nested concepts, where we already have valid parameters and are just typing a keyword
                var lineChr      = new LineChr(Line, Chr);
                var atLastParsed = GetTokenAtPosition(lineChr) == LastTokenParsed[conceptType] || GetTokenLeftOfPosition(lineChr) == LastTokenParsed[conceptType];
                var atKeyword    = string.Equals(ConceptInfoHelper.GetKeyword(conceptType), LastTokenParsed[conceptType].Value, StringComparison.InvariantCultureIgnoreCase);
                if (atKeyword || !atLastParsed)
                {
                    activeParameter++;
                }
            }

            return(activeParameter);
        }