Thread: [Pydev-cvs] org.python.pydev/src_completions/org/python/pydev/editor/codecompletion IASTManagerObs
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2008-08-13 21:12:08
|
Update of /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8061/src_completions/org/python/pydev/editor/codecompletion Modified Files: PyCodeCompletion.java PyContentAssistant.java Added Files: IASTManagerObserver.java Log Message: Synching from mercurial: - Pydev debugger watch working in eclipse 3.4 - Pydev debugger breakpoint properties accept new lines and tabs - Incremental find backspace works correctly - Interactive console Fixed problem when more attempts to connect were needed - Launch icons: Transparent background (thanks to Radim Kubacki) - Creating workbench test for debugger Index: PyCodeCompletion.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/PyCodeCompletion.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PyCodeCompletion.java 31 Jul 2008 01:47:37 -0000 1.6 --- PyCodeCompletion.java 13 Aug 2008 21:12:16 -0000 1.7 *************** *** 35,38 **** --- 35,39 ---- import org.python.pydev.core.log.Log; import org.python.pydev.core.structure.CompletionRecursionException; + import org.python.pydev.core.structure.FastStack; import org.python.pydev.editor.codecompletion.revisited.ASTManager; import org.python.pydev.editor.codecompletion.revisited.AssignAnalysis; *************** *** 45,48 **** --- 46,50 ---- import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.parser.jython.ast.ClassDef; + import org.python.pydev.parser.jython.ast.FunctionDef; import org.python.pydev.parser.jython.ast.Name; import org.python.pydev.parser.jython.ast.NameTok; *************** *** 275,288 **** char[] toks = new char[]{'.', ' '}; List<Object> completions = new ArrayList<Object>(); if (trimmed.equals("self") || FullRepIterable.getFirstPart(trimmed, toks).equals("self")) { ! state.setLookingFor(ICompletionState.LOOKING_FOR_INSTANCED_VARIABLE); ! getSelfOrClsCompletions(request, tokensList, state, false); }else if (trimmed.equals("cls") || FullRepIterable.getFirstPart(trimmed, toks).equals("cls")) { ! state.setLookingFor(ICompletionState.LOOKING_FOR_CLASSMETHOD_VARIABLE); ! getSelfOrClsCompletions(request, tokensList, state, false); ! ! } else { state.setActivationToken(request.activationToken); --- 277,292 ---- char[] toks = new char[]{'.', ' '}; List<Object> completions = new ArrayList<Object>(); + + boolean lookInGlobals = true; + if (trimmed.equals("self") || FullRepIterable.getFirstPart(trimmed, toks).equals("self")) { ! lookInGlobals = !getSelfOrClsCompletions(request, tokensList, state, false, true, "self"); }else if (trimmed.equals("cls") || FullRepIterable.getFirstPart(trimmed, toks).equals("cls")) { ! lookInGlobals = !getSelfOrClsCompletions(request, tokensList, state, false, true, "cls"); + } + + if(lookInGlobals){ state.setActivationToken(request.activationToken); *************** *** 360,382 **** * @param theList OUT - returned completions are added here. (IToken instances) * @param getOnlySupers whether we should only get things from super classes (in this case, we won't get things from the current class) ! * @return the same tokens added in theList */ ! public static void getSelfOrClsCompletions(CompletionRequest request, List theList, ICompletionState state, boolean getOnlySupers) { SimpleNode s = PyParser.reparseDocument(new PyParser.ParserInfo(request.doc, true, request.nature, state.getLine())).o1; - getSelfOrClsCompletions(request, theList, state, getOnlySupers, s); - } - - public static void getSelfOrClsCompletions(CompletionRequest request, List theList, ICompletionState state, boolean getOnlySupers, SimpleNode s) { if(s != null){ ! FindScopeVisitor visitor = new FindScopeVisitor(state.getLine(), 0); ! try { ! s.accept(visitor); ! getSelfOrClsCompletions(visitor.scope, request, theList, state, getOnlySupers); ! } catch (Exception e1) { ! e1.printStackTrace(); ! } ! } } ! /** * Get self completions when you already have a scope --- 364,415 ---- * @param theList OUT - returned completions are added here. (IToken instances) * @param getOnlySupers whether we should only get things from super classes (in this case, we won't get things from the current class) ! * @param checkIfInCorrectScope if true, we'll first check if we're in a scope that actually has a method with 'self' or 'cls' ! * ! * @return true if we actually tried to get the completions for self or cls. */ ! @SuppressWarnings("unchecked") ! public static boolean getSelfOrClsCompletions(CompletionRequest request, List theList, ICompletionState state, ! boolean getOnlySupers, boolean checkIfInCorrectScope, String lookForRep) { ! SimpleNode s = PyParser.reparseDocument(new PyParser.ParserInfo(request.doc, true, request.nature, state.getLine())).o1; if(s != null){ ! FindScopeVisitor visitor = new FindScopeVisitor(state.getLine(), 0); ! try { ! s.accept(visitor); ! if(checkIfInCorrectScope){ ! boolean scopeCorrect = false; ! ! FastStack<SimpleNode> scopeStack = visitor.scope.getScopeStack(); ! for(Iterator<SimpleNode> it=scopeStack.topDownIterator();scopeCorrect == false && it.hasNext();){ ! SimpleNode node = it.next(); ! if (node instanceof FunctionDef) { ! FunctionDef funcDef = (FunctionDef) node; ! if(funcDef.args != null && funcDef.args.args != null || funcDef.args.args.length > 0){ ! //ok, we have some arg, let's check for self or cls ! String rep = NodeUtils.getRepresentationString(funcDef.args.args[0]); ! if(rep != null && (rep.equals("self") || rep.equals("cls"))){ ! scopeCorrect = true; ! } ! } ! } ! } ! if(!scopeCorrect){ ! return false; ! } ! } ! if(lookForRep.equals("self")){ ! state.setLookingFor(ICompletionState.LOOKING_FOR_INSTANCED_VARIABLE); ! }else{ ! state.setLookingFor(ICompletionState.LOOKING_FOR_CLASSMETHOD_VARIABLE); ! } ! getSelfOrClsCompletions(visitor.scope, request, theList, state, getOnlySupers); ! } catch (Exception e1) { ! PydevPlugin.log(e1); ! } ! return true; ! } ! return false; } ! /** * Get self completions when you already have a scope --- NEW FILE: IASTManagerObserver.java --- package org.python.pydev.editor.codecompletion; import org.python.pydev.core.ICodeCompletionASTManager; /** * An extension point notified when ASTManager is created and assigned to * a project. * * @author ra...@ku... (Radim Kubacki) */ public interface IASTManagerObserver { /** * Called when AST manager is created and associated with a project. * * @param manager */ void notifyASTManagerAttached(ICodeCompletionASTManager manager); } Index: PyContentAssistant.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src_completions/org/python/pydev/editor/codecompletion/PyContentAssistant.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** PyContentAssistant.java 12 Apr 2008 13:04:08 -0000 1.6 --- PyContentAssistant.java 13 Aug 2008 21:12:16 -0000 1.7 *************** *** 44,48 **** } ! setRepeatedInvocationTrigger(KeyBindingHelper.getContentAssistProposalBinding()); try{ --- 44,52 ---- } ! try{ ! setRepeatedInvocationTrigger(KeyBindingHelper.getContentAssistProposalBinding()); ! }catch(Exception e){ ! PydevPlugin.log(e); ! } try{ |