protected override string GetSnippetFor(ScintillaControl sci, EForeach expr)
        {
            var result = Reflector.SnippetManager.GetSnippet("for", sci.ConfigurationLanguage, sci.Encoding);

            result = TemplateUtils.ReplaceTemplateVariable(result, "EntryPoint", $" in {expr.Collection.Member.Name}.keys()");
            return(result);
        }
예제 #2
0
        string GetBody(ScintillaControl sci, EForeach expr)
        {
            var result      = sci.GetTextRange(sci.MBSafePosition(expr.BodyPosition), sci.MBSafePosition(expr.EndPosition)).Trim();
            var indentation = sci.GetLineIndentation(sci.LineFromPosition(expr.StartPosition)) / sci.Indent;

            if (indentation > 0)
            {
                var s = string.Empty;
                for (var i = 0; i < indentation; i++)
                {
                    s += '\t';
                }
                result = result.Replace(s, string.Empty);
            }
            result = result.Trim('{', '\r', '\n');
            result = result.TrimEnd('}');
            result = result.TrimEnd('\r', '\n');
            var variable = GetSnippetVar(sci, expr);

            if (result.TrimStart('\t', ' ').Length > 0)
            {
                variable += sci.NewLineMarker;
            }
            result = result.Insert(0, $"{'\t'}{variable}");
            return(result);
        }
예제 #3
0
        string GetSnippet(ScintillaControl sci, EForeach expr)
        {
            var result   = GetSnippetFor(sci, expr);
            var parCount = 0;
            var brCount  = 0;

            for (var i = 0; i < result.Length; i++)
            {
                var c = result[i];
                if (c == '(')
                {
                    parCount++;
                }
                else if (c == ')')
                {
                    parCount--;
                }
                else if (parCount == 0 && c == '{')
                {
                    brCount++;
                }
                else if (brCount == 1 && c == '\t')
                {
                    result = InsertBody(result, i, GetBody(sci, expr));
                    break;
                }
            }
            return(result);
        }
        protected override string GetSnippetVar(ScintillaControl sci, EForeach expr)
        {
            var member = expr.Variable.Member;
            var result = TemplateUtils.GetTemplate("AssignVariable");

            result  = TemplateUtils.ReplaceTemplateVariable(result, "Name", member.Name);
            result  = TemplateUtils.ReplaceTemplateVariable(result, "Type", member.Type);
            result  = TemplateUtils.ReplaceTemplateVariable(result, "EntryPoint", string.Empty);
            result += $"{expr.Collection.Member.Name}[key];";
            return(result);
        }
        protected override string GetSnippetFor(ScintillaControl sci, EForeach expr)
        {
            var result = Reflector.SnippetManager.GetSnippet("forin", sci.ConfigurationLanguage, sci.Encoding);

            result = TemplateUtils.ReplaceTemplateVariable(result, "TypClosestListName", $"{expr.Collection.Member.Name}");
            if (IsDictionary(expr.Collection))
            {
                result = result.Replace("name:String in", "key:* in");
            }
            return(result);
        }
        protected override string GetSnippetVar(ScintillaControl sci, EForeach expr)
        {
            var result = TemplateUtils.GetTemplate("AssignVariable");

            result = TemplateUtils.ReplaceTemplateVariable(result, "Name", expr.Variable.Context.Value);
            result = TemplateUtils.ReplaceTemplateVariable(result, "Type", GetVariableType(expr));
            result = TemplateUtils.ReplaceTemplateVariable(result, "EntryPoint", string.Empty);
            var context  = (ASComplete.CurrentResolvedContext.Result ?? new ASResult()).Context;
            var iterator = ASComplete.FindFreeIterator(ASContext.Context, ASContext.Context.CurrentClass, context);

            result += $"{expr.Collection.Member.Name}.get({iterator});";
            return(result);
        }
        static string GetVariableType(EForeach expr)
        {
            var type = expr.Collection.Type.IndexType;

            return(string.IsNullOrEmpty(type) ? string.Empty : type.Substring(type.IndexOf(",") + 1).Trim());
        }