コード例 #1
0
        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;
        }
コード例 #2
0
ファイル: DjangoAnalyzer.cs プロジェクト: jsschultz/PTVS
        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;
        }