[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/codecompletion PythonShell.java,1.28,1.29 C
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2005-03-17 17:08:04
|
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31926/src/org/python/pydev/editor/codecompletion Modified Files: PythonShell.java CompletionRequest.java PythonCompletionProcessor.java PyCodeCompletion.java Log Message: some new content assistants Index: CompletionRequest.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/CompletionRequest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CompletionRequest.java 11 Mar 2005 18:56:50 -0000 1.2 --- CompletionRequest.java 17 Mar 2005 17:07:52 -0000 1.3 *************** *** 53,57 **** PyCodeCompletion codeCompletion){ ! String[] strs = codeCompletion.getActivationTokenAndQual(doc, documentOffset); this.activationToken = strs[0]; this.qualifier = strs[1]; --- 53,57 ---- PyCodeCompletion codeCompletion){ ! String[] strs = PyCodeCompletion.getActivationTokenAndQual(doc, documentOffset); this.activationToken = strs[0]; this.qualifier = strs[1]; Index: PythonShell.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonShell.java,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** PythonShell.java 17 Mar 2005 12:07:05 -0000 1.28 --- PythonShell.java 17 Mar 2005 17:07:52 -0000 1.29 *************** *** 500,508 **** String description = URLDecoder.decode(tokenizer.nextToken()); String args = URLDecoder.decode(tokenizer.nextToken()); // System.out.println(token); // System.out.println(description); ! list.add(new String[]{token, description,args}); } return list; --- 500,509 ---- String description = URLDecoder.decode(tokenizer.nextToken()); String args = URLDecoder.decode(tokenizer.nextToken()); + String type = URLDecoder.decode(tokenizer.nextToken()); // System.out.println(token); // System.out.println(description); ! list.add(new String[]{token, description, args, type}); } return list; Index: PyCodeCompletion.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PyCodeCompletion.java,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** PyCodeCompletion.java 17 Mar 2005 12:07:05 -0000 1.36 --- PyCodeCompletion.java 17 Mar 2005 17:07:52 -0000 1.37 *************** *** 17,20 **** --- 17,21 ---- import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.BadLocationException; + import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; *************** *** 23,26 **** --- 24,28 ---- import org.python.parser.SimpleNode; import org.python.parser.ast.ClassDef; + import org.python.parser.ast.Name; import org.python.pydev.editor.codecompletion.revisited.CompletionState; import org.python.pydev.editor.codecompletion.revisited.IASTManager; *************** *** 191,214 **** List completions = new ArrayList(); if (trimmed.equals("self")) { ! SimpleNode s = (SimpleNode) PyParser.reparseDocument(new PyParser.ParserInfo(request.doc, true, pythonNature, line))[0]; ! if(s != null){ ! FindScopeVisitor visitor = new FindScopeVisitor(line, 0); ! try { ! s.accept(visitor); ! ! while(visitor.scope.scope.size() > 0){ ! SimpleNode node = (SimpleNode) visitor.scope.scope.pop(); ! if(node instanceof ClassDef){ ! ClassDef d = (ClassDef) node; ! state.activationToken = d.name; ! IToken[] comps = astManager.getCompletionsForToken(request.editorFile, request.doc, state); ! theList.addAll(Arrays.asList(comps)); ! break; ! } ! } ! } catch (Exception e1) { ! e1.printStackTrace(); ! } ! } } else { --- 193,197 ---- List completions = new ArrayList(); if (trimmed.equals("self")) { ! getSelfCompletions(request, theList, state); } else { *************** *** 242,245 **** --- 225,290 ---- /** * @param request + * @param pythonNature + * @param astManager + * @param theList OUT - returned completions are added here. (IToken instances) + * @param line + * @param state + * @return the same tokens added in theList + */ + public static IToken[] getSelfCompletions(CompletionRequest request, List theList, CompletionState state) { + return getSelfCompletions(request, theList, state, false); + } + + /** + * @param request + * @param pythonNature + * @param astManager + * @param theList OUT - returned completions are added here. (IToken instances) + * @param line + * @param state + * @return the same tokens added in theList + */ + public static IToken[] getSelfCompletions(CompletionRequest request, List theList, CompletionState state, boolean getOnlySupers) { + SimpleNode s = (SimpleNode) PyParser.reparseDocument(new PyParser.ParserInfo(request.doc, true, request.nature, state.line))[0]; + if(s != null){ + FindScopeVisitor visitor = new FindScopeVisitor(state.line, 0); + try { + s.accept(visitor); + + while(visitor.scope.scope.size() > 0){ + SimpleNode node = (SimpleNode) visitor.scope.scope.pop(); + if(node instanceof ClassDef){ + ClassDef d = (ClassDef) node; + IToken[] comps = new IToken[0]; + + if(getOnlySupers){ + List gottenComps = new ArrayList(); + for (int i = 0; i < d.bases.length; i++) { + if(d.bases[i] instanceof Name){ + Name n = (Name) d.bases[i]; + state.activationToken = n.id; + IToken[] completions = request.nature.getAstManager().getCompletionsForToken(request.editorFile, request.doc, state); + theList.addAll(Arrays.asList(completions)); + gottenComps.addAll(Arrays.asList(completions)); + } + } + comps = (IToken[]) gottenComps.toArray(new IToken[0]); + }else{ + state.activationToken = d.name; + comps = request.nature.getAstManager().getCompletionsForToken(request.editorFile, request.doc, state); + theList.addAll(Arrays.asList(comps)); + } + return comps; + } + } + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return new IToken[0]; + } + + /** + * @param request * @param convertedProposals * @param iTokenList *************** *** 315,319 **** --- 360,367 ---- buffer.append(")"); args = buffer.toString(); + } else if (element.getType() == PyCodeCompletion.TYPE_FUNCTION){ + args = "()"; } + return args; } *************** *** 548,552 **** } ! private String extractPrefix(IDocument document, int offset) { int i= offset; if (i > document.getLength()) --- 596,600 ---- } ! private static String extractPrefix(IDocument document, int offset) { int i= offset; if (i > document.getLength()) *************** *** 567,570 **** --- 615,623 ---- } + public static String [] getActivationTokenAndQual(String theDoc, int documentOffset) { + return getActivationTokenAndQual(new Document(theDoc), documentOffset); + + } + /** * Returns the activation token. *************** *** 574,578 **** * @return the activation token and the qualifier. */ ! public String [] getActivationTokenAndQual(IDocument theDoc, int documentOffset) { String activationToken = extractPrefix(theDoc, documentOffset); documentOffset = documentOffset-activationToken.length()-1; --- 627,631 ---- * @return the activation token and the qualifier. */ ! public static String [] getActivationTokenAndQual(IDocument theDoc, int documentOffset) { String activationToken = extractPrefix(theDoc, documentOffset); documentOffset = documentOffset-activationToken.length()-1; *************** *** 645,649 **** * @throws BadLocationException */ ! private int eatFuncCall(IDocument theDoc, int documentOffset) throws BadLocationException { String c = theDoc.get(documentOffset, 1); if(c.equals(")") == false){ --- 698,702 ---- * @throws BadLocationException */ ! private static int eatFuncCall(IDocument theDoc, int documentOffset) throws BadLocationException { String c = theDoc.get(documentOffset, 1); if(c.equals(")") == false){ *************** *** 662,666 **** * Checks if the activationToken ends with some char from cs. */ ! private boolean endsWithSomeChar(char cs[], String activationToken) { for (int i = 0; i < cs.length; i++) { if (activationToken.endsWith(cs[i] + "")) { --- 715,719 ---- * Checks if the activationToken ends with some char from cs. */ ! private static boolean endsWithSomeChar(char cs[], String activationToken) { for (int i = 0; i < cs.length; i++) { if (activationToken.endsWith(cs[i] + "")) { Index: PythonCompletionProcessor.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/codecompletion/PythonCompletionProcessor.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** PythonCompletionProcessor.java 11 Mar 2005 18:56:50 -0000 1.20 --- PythonCompletionProcessor.java 17 Mar 2005 17:07:52 -0000 1.21 *************** *** 103,107 **** ! String[] strs = codeCompletion.getActivationTokenAndQual(doc, documentOffset); String activationToken = strs[0]; --- 103,107 ---- ! String[] strs = PyCodeCompletion.getActivationTokenAndQual(doc, documentOffset); String activationToken = strs[0]; |