private IAnalysisSet ProcessTags(Node node, AnalysisUnit unit, IAnalysisSet[] args, NameExpression[] keywordArgNames, Dictionary<string, TagInfo> tags) { if (args.Length >= 3) { // library.filter(name, value) foreach (var name in args[1]) { var constName = name.GetConstantValue(); if (constName == Type.Missing) { if (name.Name != null) { RegisterTag(unit.ProjectEntry, tags, name.Name, name.Documentation); } } else { var strName = name.GetConstantValueAsString(); if (strName != null) { RegisterTag(unit.ProjectEntry, tags, strName); } } } foreach (var func in args[2]) { // TODO: Find a better node var parser = unit.FindAnalysisValueByName(node, "django.template.base.Parser"); if (parser != null) { func.Call(node, unit, new[] { parser, AnalysisSet.Empty }, NameExpression.EmptyArray); } } } else if (args.Length >= 2) { // library.filter(value) foreach (var name in args[1]) { string tagName = name.Name ?? name.GetConstantValueAsString(); if (tagName != null) { RegisterTag(unit.ProjectEntry, tags, tagName, name.Documentation); } if (name.MemberType != PythonMemberType.Constant) { var parser = unit.FindAnalysisValueByName(node, "django.template.base.Parser"); if (parser != null) { name.Call(node, unit, new[] { parser, AnalysisSet.Empty }, NameExpression.EmptyArray); } } } } else if (args.Length == 1) { foreach (var name in args[0]) { if (name.MemberType == PythonMemberType.Constant) { // library.filter('name') DeferredDecorator dec; if (!_decoratorTable.TryGetValue(node, out dec)) { dec = new DeferredDecorator(this, name, tags); _decoratorTable.Add(node, dec); } return dec; } else if (name.Name != null) { // library.filter RegisterTag(unit.ProjectEntry, tags, name.Name, name.Documentation); } } } return AnalysisSet.Empty; }
private IAnalysisSet ProcessTags(Node node, AnalysisUnit unit, IAnalysisSet[] args, NameExpression[] keywordArgNames, Dictionary<string, TagInfo> tags) { if (args.Length >= 3) { // library.filter(name, value) foreach (var name in args[1]) { var constName = name.GetConstantValue(); if (constName == Type.Missing) { if (name.Name != null) { RegisterTag(unit.Project, tags, name.Name, name.Documentation); } } else { var strName = name.GetConstantValueAsString(); if (strName != null) { RegisterTag(unit.Project, tags, strName); } } } foreach (var func in args[2]) { // TODO: Find a better node var parser = unit.FindAnalysisValueByName(node, "django.template.base.Parser"); if (parser != null) { func.Call(node, unit, new[] { parser, AnalysisSet.Empty }, NameExpression.EmptyArray); } } } else if (args.Length >= 2) { // library.filter(value) foreach (var name in args[1]) { string tagName = name.Name ?? name.GetConstantValueAsString(); if (tagName != null) { RegisterTag(unit.Project, tags, tagName, name.Documentation); } if (name.MemberType != PythonMemberType.Constant) { var parser = unit.FindAnalysisValueByName(node, "django.template.base.Parser"); if (parser != null) { name.Call(node, unit, new[] { parser, AnalysisSet.Empty }, NameExpression.EmptyArray); } } } } else if (args.Length == 1) { foreach (var name in args[0]) { if (name.MemberType == PythonMemberType.Constant) { // library.filter('name') DeferredDecorator dec; if (!_decoratorTable.TryGetValue(node, out dec)) { dec = new DeferredDecorator(this, name, tags); _decoratorTable.Add(node, dec); } return dec; } else if (name.Name != null) { // library.filter RegisterTag(unit.Project, tags, name.Name, name.Documentation); } } } return AnalysisSet.Empty; }