/** Gets completions for jedi library (https://github.com/davidhalter/jedi) */ public List<CompiledToken> getJediCompletions( File editorFile, PySelection ps, String charset, List<String> pythonpath) throws Exception { FastStringBuffer read = null; String str = StringUtils.join( "|", new String[] { String.valueOf(ps.getCursorLine()), String.valueOf(ps.getCursorColumn()), charset, FileUtils.getFileAbsolutePath(editorFile), StringUtils.replaceNewLines(ps.getDoc().get(), "\n") }); str = URLEncoder.encode(str, ENCODING_UTF_8); try (AutoCloseable permit = acquire("getJediCompletions")) { internalChangePythonPath(pythonpath); read = this.writeAndGetResults("@@MSG_JEDI:", str, "\nEND@@"); } Tuple<String, List<String[]>> theCompletions = ShellConvert.convertStringToCompletions(read); ArrayList<CompiledToken> lst = new ArrayList<>(theCompletions.o2.size()); for (String[] s : theCompletions.o2) { // new CompiledToken(rep, doc, args, parentPackage, type); lst.add(new CompiledToken(s[0], s[1], "", "", Integer.parseInt(s[3]))); } return lst; }
@Override protected Throwable exec(File f) { System.out.println(org.python.pydev.shared_core.string.StringUtils.format("Running: %s", f)); Tuple<String, String> output = new SimpleIronpythonRunner() .runAndGetOutput( new String[] { TestDependent.IRONPYTHON_EXE, "-u", IInterpreterManager.IRONPYTHON_DEFAULT_INTERNAL_SHELL_VM_ARGS, FileUtils.getFileAbsolutePath(f) }, f.getParentFile(), null, null, "utf-8"); System.out.println( org.python.pydev.shared_core.string.StringUtils.format( "stdout:%s\nstderr:%s", output.o1, output.o2)); if (output.o2.toLowerCase().indexOf("failed") != -1 || output.o2.toLowerCase().indexOf("traceback") != -1) { throw new AssertionError(output.toString()); } return null; }
public void run(ItemPointer p, IProject project) { editor = null; Object file = p.file; String zipFilePath = p.zipFilePath; if (zipFilePath != null) { // currently, only open zip file editor = PyOpenEditor.doOpenEditor((File) file, zipFilePath); } else if (file instanceof IFile) { IFile f = (IFile) file; editor = PyOpenEditor.doOpenEditor(f); } else if (file instanceof IPath) { IPath path = (IPath) file; editor = PyOpenEditor.doOpenEditor(path, project); } else if (file instanceof File) { String absPath = FileUtils.getFileAbsolutePath((File) file); IPath path = Path.fromOSString(absPath); editor = PyOpenEditor.doOpenEditor(path, project); } if (editor instanceof ITextEditor && p.start.line >= 0) { EditorUtils.showInEditor((ITextEditor) editor, p.start, p.end); } }
/** * This function creates a module and resolves the module name (use this function if only the file * is available). * * @throws MisconfigurationException */ public static IModule createModuleFromDoc(File file, IDocument doc, IPythonNature pythonNature) throws MisconfigurationException { IModulesManager projModulesManager = pythonNature.getAstManager().getModulesManager(); String moduleName = null; if (file != null) { moduleName = projModulesManager.resolveModule(FileUtils.getFileAbsolutePath(file)); } if (moduleName == null) { moduleName = MODULE_NAME_WHEN_FILE_IS_UNDEFINED; } IModule module = createModuleFromDoc(moduleName, file, doc, pythonNature, false); return module; }
/** * @return true if the given marker is from an external file, and the editor in which this action * is being executed is in this same editor. */ protected static boolean isInSameExternalEditor( IMarker marker, IEditorInput externalFileEditorInput) throws CoreException { if (marker == null || externalFileEditorInput == null) { return false; } String attribute = (String) marker.getAttribute(PyBreakpoint.PY_BREAK_EXTERNAL_PATH_ID); if (attribute != null) { File file = PydevFileEditorInput.getFile(externalFileEditorInput); if (file == null) { return false; } if (attribute.equals(FileUtils.getFileAbsolutePath(file))) { return true; } } return false; }
@Override public String getOutgoing() { if (file != null) { return makeCommand( AbstractDebuggerCommand.CMD_IGNORE_THROWN_EXCEPTION_AT, sequence, StringUtils.join("|", FileUtils.getFileAbsolutePath(file), this.lineNumber)); } else { // Bulk-creation Collection<String> ignoreThrownExceptions = PyExceptionBreakPointManager.getInstance() .ignoreCaughtExceptionsWhenThrownFrom .getIgnoreThrownExceptions(); return makeCommand( AbstractDebuggerCommand.CMD_IGNORE_THROWN_EXCEPTION_AT, sequence, "REPLACE:" + StringUtils.join("||", ignoreThrownExceptions)); } }
/** * @param paths the paths to be added * @return a String suitable to be added to the PYTHONPATH environment variable. */ public static String makePythonPathEnvFromPaths(Collection<String> inPaths) { ArrayList<String> paths = new ArrayList<String>(inPaths); try { // whenever we launch a file from pydev, we must add the sitecustomize to the pythonpath so // that // the default encoding (for the console) can be set. // see: // http://sourceforge.net/tracker/index.php?func=detail&aid=1580766&group_id=85796&atid=577329 paths.add( 0, FileUtils.getFileAbsolutePath(PydevPlugin.getScriptWithinPySrc("pydev_sitecustomize"))); } catch (CoreException e) { Log.log(e); } String separator = getPythonPathSeparator(); return org.python.pydev.shared_core.string.StringUtils.join(separator, paths); }
public static String getRunFilesScript() throws CoreException { return FileUtils.getFileAbsolutePath(PydevDebugPlugin.getScriptWithinPySrc("runfiles.py")); }
/** * @return * @throws CoreException */ public static String getCoverageScript() throws CoreException { return FileUtils.getFileAbsolutePath( PydevDebugPlugin.getScriptWithinPySrc("pydev_coverage.py")); }
public IPath getLocation() { return Path.fromOSString(FileUtils.getFileAbsolutePath(this.projectRoot)); }
/** * @see * org.python.pydev.core.IProjectModulesManager#resolveModule(org.eclipse.core.resources.IResource, * org.eclipse.core.resources.IProject) */ public String resolveModule(IResource member, IProject container) { File inOs = member.getRawLocation().toFile(); return resolveModule(FileUtils.getFileAbsolutePath(inOs)); }
@Override public void addProps( MarkerAnnotationAndPosition markerAnnotation, IAnalysisPreferences analysisPreferences, String line, PySelection ps, int offset, IPythonNature nature, PyEdit edit, List<ICompletionProposal> props) throws BadLocationException, CoreException { if (nature == null) { return; } ICodeCompletionASTManager astManager = nature.getAstManager(); if (astManager == null) { return; } if (markerAnnotation.position == null) { return; } IMarker marker = markerAnnotation.markerAnnotation.getMarker(); Integer id = (Integer) marker.getAttribute(AnalysisRunner.PYDEV_ANALYSIS_TYPE); int start = markerAnnotation.position.offset; int end = start + markerAnnotation.position.length; ps.setSelection(start, end); String markerContents; try { markerContents = ps.getSelectedText(); } catch (Exception e1) { return; // Selection may be wrong. } IDocument doc = ps.getDoc(); List<String> parametersAfterCall = ps.getParametersAfterCall(end); switch (id) { case IAnalysisPreferences.TYPE_UNDEFINED_VARIABLE: addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall); addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall); break; case IAnalysisPreferences.TYPE_UNDEFINED_IMPORT_VARIABLE: // Say we had something as: // import sys // sys.Bar // in which case 'Bar' is undefined // in this situation, the activationTokenAndQual would be "sys." and "Bar" // and we want to get the definition for "sys" String[] activationTokenAndQual = ps.getActivationTokenAndQual(true); if (activationTokenAndQual[0].endsWith(".")) { ArrayList<IDefinition> selected = findDefinitions(nature, edit, start - 2, doc); for (IDefinition iDefinition : selected) { IModule module = iDefinition.getModule(); if (module.getFile() != null) { Definition definition = (Definition) iDefinition; File file = module.getFile(); if (definition.ast == null) { // if we have no ast in the definition, it means the module itself was found (global // scope) // Add option to create class at the given module! addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall, file); addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall, file); } else if (definition.ast instanceof ClassDef) { ClassDef classDef = (ClassDef) definition.ast; // Ok, we should create a field or method in this case (accessing a classmethod or // staticmethod) PyCreateMethodOrField pyCreateMethod = new PyCreateMethodOrField(); String className = NodeUtils.getNameFromNameTok(classDef.name); pyCreateMethod.setCreateInClass(className); pyCreateMethod.setCreateAs(PyCreateMethodOrField.CLASSMETHOD); addCreateClassmethodOption( ps, edit, props, markerContents, parametersAfterCall, pyCreateMethod, file, className); } } } } break; case IAnalysisPreferences.TYPE_UNRESOLVED_IMPORT: // This case is the following: from other_module4 import Foo // with 'Foo' being undefined. // So, we have to suggest creating a Foo class/method in other_module4 PyImportsHandling importsHandling = new PyImportsHandling(ps.getDoc(), false); int offsetLine = ps.getLineOfOffset(start); String selectedText = ps.getSelectedText(); Tuple<IModule, String> found = null; String foundFromImportStr = null; boolean isImportFrom = false; OUT: for (ImportHandle handle : importsHandling) { if (handle.startFoundLine == offsetLine || handle.endFoundLine == offsetLine || (handle.startFoundLine < offsetLine && handle.endFoundLine > offsetLine)) { List<ImportHandleInfo> importInfo = handle.getImportInfo(); for (ImportHandleInfo importHandleInfo : importInfo) { String fromImportStr = importHandleInfo.getFromImportStr(); List<String> importedStr = importHandleInfo.getImportedStr(); for (String imported : importedStr) { if (selectedText.equals(imported)) { if (fromImportStr != null) { foundFromImportStr = fromImportStr + "." + imported; isImportFrom = true; } else { // if fromImportStr == null, it's not a from xxx import yyy (i.e.: simple // import) foundFromImportStr = imported; } try { String currentModule = nature.resolveModule(edit.getEditorFile()); ICompletionState state = CompletionStateFactory.getEmptyCompletionState( nature, new CompletionCache()); found = nature .getAstManager() .findModule( foundFromImportStr, currentModule, state, new SourceModule( currentModule, edit.getEditorFile(), edit.getAST(), null)); } catch (Exception e) { Log.log(e); } break OUT; } } } break OUT; } } boolean addOptionToCreateClassOrMethod = isImportFrom; if (found != null && found.o1 != null) { // Ok, we found a module, now, it may be that we still have to create some intermediary // modules // or just create a class or method at the end. if (found.o1 instanceof SourceModule) { // if all was found, there's nothing left to create. if (found.o2 != null && found.o2.length() > 0) { SourceModule sourceModule = (SourceModule) found.o1; File file = sourceModule.getFile(); if (found.o2.indexOf('.') != -1) { // We have to create some intermediary structure. if (!addOptionToCreateClassOrMethod) { // Cannot create class or method from the info (only the module structure). if (sourceModule.getName().endsWith(".__init__")) { File f = getFileStructure(file.getParentFile(), found.o2); addCreateModuleOption(ps, edit, props, markerContents, f); } } else { // Ok, the leaf may be a class or method. if (sourceModule.getName().endsWith(".__init__")) { String moduleName = FullRepIterable.getWithoutLastPart(sourceModule.getName()); String withoutLastPart = FullRepIterable.getWithoutLastPart(found.o2); moduleName += "." + withoutLastPart; String classOrMethodName = FullRepIterable.getLastPart(found.o2); File f = getFileStructure(file.getParentFile(), withoutLastPart); addCreateClassInNewModuleOption( ps, edit, props, classOrMethodName, moduleName, parametersAfterCall, f); addCreateMethodInNewModuleOption( ps, edit, props, classOrMethodName, moduleName, parametersAfterCall, f); } } } else { // Ok, it's all there, we just have to create the leaf. if (!addOptionToCreateClassOrMethod || sourceModule.getName().endsWith(".__init__")) { // Cannot create class or method from the info (only the module structure). if (sourceModule.getName().endsWith(".__init__")) { File f = new File( file.getParent(), found.o2 + FileTypesPreferencesPage.getDefaultDottedPythonExtension()); addCreateModuleOption(ps, edit, props, markerContents, f); } } else { // Ok, the leaf may be a class or method. addCreateClassOption(ps, edit, props, markerContents, parametersAfterCall, file); addCreateMethodOption(ps, edit, props, markerContents, parametersAfterCall, file); } } } } } else if (foundFromImportStr != null) { // We couldn't find anything there, so, we have to create the modules structure as needed // and // maybe create a class or module at the end (but only if it's an import from). // Ok, it's all there, we just have to create the leaf. // Discover the source folder where we should create the structure. File editorFile = edit.getEditorFile(); String onlyProjectPythonPathStr = nature.getPythonPathNature().getOnlyProjectPythonPathStr(false); List<String> split = StringUtils.splitAndRemoveEmptyTrimmed(onlyProjectPythonPathStr, '|'); for (int i = 0; i < split.size(); i++) { String fullPath = FileUtils.getFileAbsolutePath(split.get(i)); fullPath = PythonPathHelper.getDefaultPathStr(fullPath); split.set(i, fullPath); } HashSet<String> projectSourcePath = new HashSet<String>(split); if (projectSourcePath.size() == 0) { return; // No source folder for editor... this shouldn't happen (code analysis wouldn't // even run on it). } String fullPath = FileUtils.getFileAbsolutePath(editorFile); fullPath = PythonPathHelper.getDefaultPathStr(fullPath); String foundSourceFolderFullPath = null; if (projectSourcePath.size() == 1) { foundSourceFolderFullPath = projectSourcePath.iterator().next(); } else { for (String string : projectSourcePath) { if (fullPath.startsWith(string)) { // Use this as the source folder foundSourceFolderFullPath = string; break; } } } if (foundSourceFolderFullPath != null) { if (!addOptionToCreateClassOrMethod) { // Cannot create class or method from the info (only the module structure). File f = getFileStructure(new File(foundSourceFolderFullPath), foundFromImportStr); addCreateModuleOption(ps, edit, props, foundFromImportStr, f); } else { // Ok, the leaf may be a class or method. String moduleName = FullRepIterable.getWithoutLastPart(foundFromImportStr); File file = getFileStructure(new File(foundSourceFolderFullPath), moduleName); String lastPart = FullRepIterable.getLastPart(foundFromImportStr); addCreateClassInNewModuleOption( ps, edit, props, lastPart, moduleName, parametersAfterCall, file); addCreateMethodInNewModuleOption( ps, edit, props, lastPart, moduleName, parametersAfterCall, file); } } } break; } }