Search in sources :

Example 1 with Pass

use of org.python.pydev.parser.jython.ast.Pass in project Pydev by fabioz.

the class MessagesManager method addUnusedMessage.

/**
 * adds a message for something that was not used
 *
 * @param node the node representing the scope being closed when adding the
 *             unused message
 */
public void addUnusedMessage(SimpleNode node, Found f) {
    List<GenAndTok> all = f.getAll();
    int len = all.size();
    for (int i = 0; i < len; i++) {
        GenAndTok g = all.get(i);
        if (g.generator instanceof SourceToken) {
            SimpleNode ast = ((SourceToken) g.generator).getAst();
            // it can be an unused import
            boolean isFromImport = ast instanceof ImportFrom;
            if (isFromImport || ast instanceof Import) {
                if (isFromImport && AbstractVisitor.isWildImport((ImportFrom) ast)) {
                    addMessage(IAnalysisPreferences.TYPE_UNUSED_WILD_IMPORT, g.generator, g.tok);
                } else if (!(g.generator instanceof ImportPartSourceToken)) {
                    addMessage(IAnalysisPreferences.TYPE_UNUSED_IMPORT, g.generator, g.tok);
                }
                // finish it...
                continue;
            }
        }
        // we have to check if this is a name we should ignore
        if (startsWithNamesToIgnore(g)) {
            int type = IAnalysisPreferences.TYPE_UNUSED_VARIABLE;
            if (g.tok instanceof SourceToken) {
                SourceToken t = (SourceToken) g.tok;
                SimpleNode ast = t.getAst();
                if (ast instanceof NameTok) {
                    NameTok n = (NameTok) ast;
                    if (n.ctx == NameTok.KwArg || n.ctx == NameTok.VarArg || n.ctx == NameTok.KeywordName) {
                        type = IAnalysisPreferences.TYPE_UNUSED_PARAMETER;
                    }
                } else if (ast instanceof Name) {
                    Name n = (Name) ast;
                    if (n.ctx == Name.Param || n.ctx == Name.KwOnlyParam) {
                        type = IAnalysisPreferences.TYPE_UNUSED_PARAMETER;
                    }
                }
            }
            boolean addMessage = true;
            if (type == IAnalysisPreferences.TYPE_UNUSED_PARAMETER) {
                if (node instanceof FunctionDef) {
                    addMessage = false;
                    FunctionDef def = (FunctionDef) node;
                    for (stmtType b : def.body) {
                        if (b instanceof Pass) {
                            continue;
                        }
                        if (b instanceof Expr) {
                            Expr expr = (Expr) b;
                            if (expr.value instanceof Str) {
                                continue;
                            }
                        }
                        addMessage = true;
                        break;
                    }
                }
            }
            if (addMessage) {
                addMessage(type, g.generator, g.tok);
            }
        }
    }
}
Also used : Import(org.python.pydev.parser.jython.ast.Import) ImportPartSourceToken(org.python.pydev.ast.codecompletion.revisited.visitors.AbstractVisitor.ImportPartSourceToken) org.python.pydev.parser.jython.ast.stmtType(org.python.pydev.parser.jython.ast.stmtType) FunctionDef(org.python.pydev.parser.jython.ast.FunctionDef) SimpleNode(org.python.pydev.parser.jython.SimpleNode) Name(org.python.pydev.parser.jython.ast.Name) Str(org.python.pydev.parser.jython.ast.Str) Pass(org.python.pydev.parser.jython.ast.Pass) Expr(org.python.pydev.parser.jython.ast.Expr) ImportFrom(org.python.pydev.parser.jython.ast.ImportFrom) ImportPartSourceToken(org.python.pydev.ast.codecompletion.revisited.visitors.AbstractVisitor.ImportPartSourceToken) SourceToken(org.python.pydev.ast.codecompletion.revisited.modules.SourceToken) NameTok(org.python.pydev.parser.jython.ast.NameTok)

Example 2 with Pass

use of org.python.pydev.parser.jython.ast.Pass in project Pydev by fabioz.

the class MakeAstValidForPrettyPrintingVisitor method visitTryFinally.

@Override
public Object visitTryFinally(TryFinally node) throws Exception {
    if (node.body == null || node.body.length == 0) {
        node.body = new stmtType[] { new Pass() };
    }
    visitTryPart(node, node.body);
    visitOrElsePart(node.finalbody, "finally");
    return null;
}
Also used : Pass(org.python.pydev.parser.jython.ast.Pass)

Example 3 with Pass

use of org.python.pydev.parser.jython.ast.Pass in project Pydev by fabioz.

the class MakeAstValidForPrettyPrintingVisitor method visitFunctionDef.

@Override
public Object visitFunctionDef(FunctionDef node) throws Exception {
    if (node.decs != null) {
        for (decoratorsType n : node.decs) {
            if (n != null) {
                handleDecorator(n);
            }
        }
    }
    fixNode(node);
    node.name.accept(this);
    if (node.args != null) {
        handleArguments(node.args);
    }
    // this is the "['->' test]"
    if (node.returns != null) {
        node.returns.accept(this);
    }
    if (node.body == null || node.body.length == 0) {
        node.body = new stmtType[] { new Pass() };
    }
    int length = node.body.length;
    for (int i = 0; i < length; i++) {
        if (node.body[i] != null) {
            node.body[i].accept(this);
        }
    }
    fixAfterNode(node);
    return null;
}
Also used : Pass(org.python.pydev.parser.jython.ast.Pass) org.python.pydev.parser.jython.ast.decoratorsType(org.python.pydev.parser.jython.ast.decoratorsType) Print(org.python.pydev.parser.jython.ast.Print)

Example 4 with Pass

use of org.python.pydev.parser.jython.ast.Pass in project Pydev by fabioz.

the class MakeAstValidForPrettyPrintingVisitor method visitIfPart.

private void visitIfPart(suiteType orelse, If node, boolean isElif) throws Exception {
    if (orelse != null) {
        fixNode(orelse);
    }
    fixNode(node);
    node.test.accept(this);
    if (node.body == null || node.body.length == 0) {
        node.body = new stmtType[] { new Pass() };
    }
    // write the body and dedent
    for (SimpleNode n : node.body) {
        n.accept(this);
    }
    if (orelse != null) {
        fixAfterNode(orelse);
    }
    if (node.orelse != null && ((Suite) node.orelse).body != null && ((Suite) node.orelse).body.length > 0) {
        stmtType[] body = ((Suite) node.orelse).body;
        if (body.length == 1 && body[0] instanceof If) {
            If if1 = (If) body[0];
            if (if1.test == null) {
                visitOrElsePart(node.orelse, "else");
            } else {
                boolean foundIf = false;
                if (if1.specialsBefore != null) {
                    for (Object o : if1.specialsBefore) {
                        if (o.toString().equals("if")) {
                            foundIf = true;
                            break;
                        }
                    }
                }
                if (foundIf) {
                    visitIfPart(node.orelse, if1, false);
                } else {
                    visitIfPart(node.orelse, if1, true);
                }
            }
        } else {
            visitOrElsePart(node.orelse, "else");
        }
    }
    fixAfterNode(node);
}
Also used : Suite(org.python.pydev.parser.jython.ast.Suite) Pass(org.python.pydev.parser.jython.ast.Pass) org.python.pydev.parser.jython.ast.stmtType(org.python.pydev.parser.jython.ast.stmtType) If(org.python.pydev.parser.jython.ast.If) SimpleNode(org.python.pydev.parser.jython.SimpleNode)

Example 5 with Pass

use of org.python.pydev.parser.jython.ast.Pass in project Pydev by fabioz.

the class MakeAstValidForPrettyPrintingVisitor method visitFor.

@Override
public Object visitFor(For node) throws Exception {
    // for a in b: xxx else: yyy
    // a
    fixNode(node);
    node.target.accept(this);
    // in b
    node.iter.accept(this);
    if (node.body == null || node.body.length == 0) {
        node.body = new stmtType[] { new Pass() };
    }
    for (SimpleNode n : node.body) {
        n.accept(this);
    }
    suiteType orelse = node.orelse;
    endSuiteWithOrElse(orelse);
    fixAfterNode(node);
    return null;
}
Also used : Pass(org.python.pydev.parser.jython.ast.Pass) org.python.pydev.parser.jython.ast.suiteType(org.python.pydev.parser.jython.ast.suiteType) SimpleNode(org.python.pydev.parser.jython.SimpleNode)

Aggregations

Pass (org.python.pydev.parser.jython.ast.Pass)15 SimpleNode (org.python.pydev.parser.jython.SimpleNode)9 org.python.pydev.parser.jython.ast.stmtType (org.python.pydev.parser.jython.ast.stmtType)6 Module (org.python.pydev.parser.jython.ast.Module)4 org.python.pydev.parser.jython.ast.decoratorsType (org.python.pydev.parser.jython.ast.decoratorsType)4 Expr (org.python.pydev.parser.jython.ast.Expr)3 FunctionDef (org.python.pydev.parser.jython.ast.FunctionDef)3 If (org.python.pydev.parser.jython.ast.If)3 Name (org.python.pydev.parser.jython.ast.Name)3 Str (org.python.pydev.parser.jython.ast.Str)3 BadLocationException (org.eclipse.jface.text.BadLocationException)2 PySelection (org.python.pydev.core.docutils.PySelection)2 ISpecialStr (org.python.pydev.parser.jython.ISpecialStr)2 Attribute (org.python.pydev.parser.jython.ast.Attribute)2 AugAssign (org.python.pydev.parser.jython.ast.AugAssign)2 BinOp (org.python.pydev.parser.jython.ast.BinOp)2 Exec (org.python.pydev.parser.jython.ast.Exec)2 For (org.python.pydev.parser.jython.ast.For)2 Import (org.python.pydev.parser.jython.ast.Import)2 NameTok (org.python.pydev.parser.jython.ast.NameTok)2