Search in sources :

Example 1 with Import

use of org.python.pydev.parser.jython.ast.Import 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 Import

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

the class AbstractMessage method getStartCol.

/**
 * @return the starting column for the given token (1-based)
 */
public static int getStartCol(IToken generator, IDocument doc, String shortMessage, boolean returnAsName) {
    // not import...
    if (!generator.isImport()) {
        return generator.getColDefinition();
    }
    // ok, it is an import... (can only be a source token)
    SourceToken s = (SourceToken) generator;
    SimpleNode ast = s.getAst();
    if (ast instanceof ImportFrom) {
        ImportFrom i = (ImportFrom) ast;
        // if it is a wild import, it starts on the module name
        if (AbstractVisitor.isWildImport(i)) {
            return i.module.beginColumn;
        } else {
            // no wild import, let's check the 'as name'
            return getNameForRepresentation(i, shortMessage, returnAsName).beginColumn;
        }
    } else if (ast instanceof Import) {
        return getNameForRepresentation(ast, shortMessage, returnAsName).beginColumn;
    } else {
        throw new RuntimeException("It is not an import");
    }
}
Also used : Import(org.python.pydev.parser.jython.ast.Import) ImportFrom(org.python.pydev.parser.jython.ast.ImportFrom) SourceToken(org.python.pydev.ast.codecompletion.revisited.modules.SourceToken) SimpleNode(org.python.pydev.parser.jython.SimpleNode)

Example 3 with Import

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

the class PythonGrammar26 method import_stmt.

// import_stmt: 'import' dotted_name (',' dotted_name)* | 'from' dotted_name 'import' ('*' | NAME (',' NAME)*)
public final void import_stmt() throws ParseException {
    Import imp;
    Object spStr;
    try {
        switch((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
            case IMPORT:
                spStr = jj_consume_token(IMPORT);
                imp = Import();
                if (imp != null) {
                    imp.addSpecial(spStr, false);
                }
                break;
            case FROM:
                temporaryToken = grammarActions.createSpecialStr("from");
                jj_consume_token(FROM);
                grammarActions.addSpecialToken(temporaryToken, STRATEGY_BEFORE_NEXT);
                ImportFrom();
                break;
            default:
                jj_la1[42] = jj_gen;
                jj_consume_token(-1);
                throw new ParseException();
        }
    } catch (ParseException e) {
        handleErrorInImport(e);
    }
}
Also used : Import(org.python.pydev.parser.jython.ast.Import) ParseException(org.python.pydev.parser.jython.ParseException)

Example 4 with Import

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

the class NodeUtils method getLineEnd.

public static int getLineEnd(SimpleNode v) {
    if (v instanceof Expr) {
        Expr expr = (Expr) v;
        v = expr.value;
    }
    if (v instanceof ImportFrom) {
        ImportFrom f = (ImportFrom) v;
        FindLastLineVisitor findLastLineVisitor = new FindLastLineVisitor();
        try {
            f.accept(findLastLineVisitor);
            SimpleNode lastNode = findLastLineVisitor.getLastNode();
            ISpecialStr lastSpecialStr = findLastLineVisitor.getLastSpecialStr();
            if (lastSpecialStr != null && lastSpecialStr.toString().equals(")")) {
                // it was an from xxx import (euheon, utehon)
                return lastSpecialStr.getBeginLine();
            } else {
                return lastNode.beginLine;
            }
        } catch (Exception e) {
            Log.log(e);
        }
    }
    if (v instanceof Import) {
        Import f = (Import) v;
        FindLastLineVisitor findLastLineVisitor = new FindLastLineVisitor();
        try {
            f.accept(findLastLineVisitor);
            SimpleNode lastNode = findLastLineVisitor.getLastNode();
            return lastNode.beginLine;
        } catch (Exception e) {
            Log.log(e);
        }
    }
    if (v instanceof Str) {
        String s = ((Str) v).s;
        int found = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '\n') {
                found += 1;
            }
        }
        return getLineDefinition(v) + found;
    }
    return getLineDefinition(v);
}
Also used : Str(org.python.pydev.parser.jython.ast.Str) ISpecialStr(org.python.pydev.parser.jython.ISpecialStr) Import(org.python.pydev.parser.jython.ast.Import) Expr(org.python.pydev.parser.jython.ast.Expr) ImportFrom(org.python.pydev.parser.jython.ast.ImportFrom) ISpecialStr(org.python.pydev.parser.jython.ISpecialStr) SyntaxErrorException(org.python.pydev.core.docutils.SyntaxErrorException) BadLocationException(org.eclipse.jface.text.BadLocationException) IOException(java.io.IOException) MisconfigurationException(org.python.pydev.core.MisconfigurationException) SimpleNode(org.python.pydev.parser.jython.SimpleNode) ISimpleNode(org.python.pydev.shared_core.model.ISimpleNode)

Example 5 with Import

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

the class NodeUtils method getRepresentationString.

/**
 * @param node this is the node from whom we want to get the representation
 * @return A suitable String representation for some node.
 */
public static String getRepresentationString(SimpleNode node, boolean useTypeRepr) {
    if (node instanceof NameTok) {
        NameTok tok = (NameTok) node;
        return tok.id;
    }
    if (node instanceof Name) {
        Name name = (Name) node;
        return name.id;
    }
    if (node instanceof aliasType) {
        aliasType type = (aliasType) node;
        return ((NameTok) type.name).id;
    }
    if (node instanceof Attribute) {
        Attribute attribute = (Attribute) node;
        return discoverRep(attribute.attr);
    }
    if (node instanceof keywordType) {
        keywordType type = (keywordType) node;
        return discoverRep(type.arg);
    }
    if (node instanceof ClassDef) {
        ClassDef def = (ClassDef) node;
        return ((NameTok) def.name).id;
    }
    if (node instanceof FunctionDef) {
        FunctionDef def = (FunctionDef) node;
        return ((NameTok) def.name).id;
    }
    if (node instanceof Call) {
        Call call = ((Call) node);
        return getRepresentationString(call.func, useTypeRepr);
    }
    if (node instanceof org.python.pydev.parser.jython.ast.List || node instanceof ListComp) {
        String val = "[]";
        if (useTypeRepr) {
            val = getBuiltinType(val);
        }
        return val;
    }
    if (node instanceof org.python.pydev.parser.jython.ast.Dict || node instanceof org.python.pydev.parser.jython.ast.DictComp) {
        String val = "{}";
        if (useTypeRepr) {
            val = getBuiltinType(val);
        }
        return val;
    }
    if (node instanceof BinOp) {
        BinOp binOp = (BinOp) node;
        if (binOp.left instanceof Str && binOp.op == BinOp.Mod) {
            node = binOp.left;
        // Just change the node... the check below will work with the Str already.
        }
    }
    if (node instanceof Str) {
        String val;
        if (useTypeRepr) {
            val = getBuiltinType("''");
        } else {
            val = "'" + ((Str) node).s + "'";
        }
        return val;
    }
    if (node instanceof Tuple) {
        StringBuffer buf = new StringBuffer();
        Tuple t = (Tuple) node;
        for (exprType e : t.elts) {
            buf.append(getRepresentationString(e, useTypeRepr));
            buf.append(", ");
        }
        if (t.elts.length > 0) {
            int l = buf.length();
            buf.deleteCharAt(l - 1);
            buf.deleteCharAt(l - 2);
        }
        String val = "(" + buf + ")";
        if (useTypeRepr) {
            val = getBuiltinType(val);
        }
        return val;
    }
    if (node instanceof Num) {
        String val = ((Num) node).n.toString();
        if (useTypeRepr) {
            val = getBuiltinType(val);
        }
        return val;
    }
    if (node instanceof Import) {
        aliasType[] names = ((Import) node).names;
        for (aliasType n : names) {
            if (n.asname != null) {
                return ((NameTok) n.asname).id;
            }
            return ((NameTok) n.name).id;
        }
    }
    if (node instanceof commentType) {
        commentType type = (commentType) node;
        return type.id;
    }
    if (node instanceof excepthandlerType) {
        excepthandlerType type = (excepthandlerType) node;
        return type.name.toString();
    }
    return null;
}
Also used : org.python.pydev.parser.jython.ast.exprType(org.python.pydev.parser.jython.ast.exprType) Import(org.python.pydev.parser.jython.ast.Import) Attribute(org.python.pydev.parser.jython.ast.Attribute) FunctionDef(org.python.pydev.parser.jython.ast.FunctionDef) DictComp(org.python.pydev.parser.jython.ast.DictComp) Name(org.python.pydev.parser.jython.ast.Name) Str(org.python.pydev.parser.jython.ast.Str) ISpecialStr(org.python.pydev.parser.jython.ISpecialStr) ClassDef(org.python.pydev.parser.jython.ast.ClassDef) org.python.pydev.parser.jython.ast.commentType(org.python.pydev.parser.jython.ast.commentType) org.python.pydev.parser.jython.ast.keywordType(org.python.pydev.parser.jython.ast.keywordType) Call(org.python.pydev.parser.jython.ast.Call) Dict(org.python.pydev.parser.jython.ast.Dict) Num(org.python.pydev.parser.jython.ast.Num) ListComp(org.python.pydev.parser.jython.ast.ListComp) FastStringBuffer(org.python.pydev.shared_core.string.FastStringBuffer) org.python.pydev.parser.jython.ast.aliasType(org.python.pydev.parser.jython.ast.aliasType) org.python.pydev.parser.jython.ast.excepthandlerType(org.python.pydev.parser.jython.ast.excepthandlerType) BinOp(org.python.pydev.parser.jython.ast.BinOp) NameTok(org.python.pydev.parser.jython.ast.NameTok) Tuple(org.python.pydev.parser.jython.ast.Tuple)

Aggregations

Import (org.python.pydev.parser.jython.ast.Import)35 SimpleNode (org.python.pydev.parser.jython.SimpleNode)19 ParseException (org.python.pydev.parser.jython.ParseException)14 ImportFrom (org.python.pydev.parser.jython.ast.ImportFrom)14 NameTok (org.python.pydev.parser.jython.ast.NameTok)13 org.python.pydev.parser.jython.ast.aliasType (org.python.pydev.parser.jython.ast.aliasType)10 Name (org.python.pydev.parser.jython.ast.Name)8 SourceToken (org.python.pydev.ast.codecompletion.revisited.modules.SourceToken)7 TokenMgrError (org.python.pydev.parser.jython.TokenMgrError)7 Attribute (org.python.pydev.parser.jython.ast.Attribute)6 ClassDef (org.python.pydev.parser.jython.ast.ClassDef)6 FunctionDef (org.python.pydev.parser.jython.ast.FunctionDef)6 Str (org.python.pydev.parser.jython.ast.Str)6 IToken (org.python.pydev.core.IToken)5 ArrayList (java.util.ArrayList)4 ISpecialStr (org.python.pydev.parser.jython.ISpecialStr)4 If (org.python.pydev.parser.jython.ast.If)4 org.python.pydev.parser.jython.ast.commentType (org.python.pydev.parser.jython.ast.commentType)4 Found (com.python.pydev.analysis.visitors.Found)3 BadLocationException (org.eclipse.jface.text.BadLocationException)3