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); }
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); }
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()); }