- Support removing imports at any level, not just top-level. - Support adding imports inside functions. Guess that an import should be local if there were any other local imports from the same module. - Allow options in .pyflyby files such as __options__ = '--uniform' - Allow an option in .pyflyby files that means "stop processing further database files" - Heuristically guess alignment style from existing code - Grouping: Teach tidy-imports to canonicalize import groups. 3 possiblities: (1) Follow PEP8 standard library imports, then third-party imports, then local app imports. http://legacy.python.org/dev/peps/pep-0008/#imports. Best default. (2) The Eclipse way: for each top-level package, if there is more than one import statement, then make those a group. (3) User-configured grouping. - Use rope? - Allow comments in a file to specify imports that shouldn't be removed, including "*" to mean don't-remove-any. - Allow a comment in the file to specify alignment options. - Guess the module name for relative imports. - Preserve comments on import lines (as much as possible anyway - may need to make them standalone comments). - Preserve line ending style (\r\n). - Merge share/pyflyby/*.py into a single file. - Make sure etc/pyflyby works for both systemwide installation and virtualenv installation - Consider making the default database file more like a sample file that the user is instructed to cp to ~/.pyflyby. What about existing users of older versions? Perhaps have an auto-upgrade feature - Refactor autoimport.py to share more with rest of pyflyby, esp AST parsing. - Consider __mandatory_imports -= [...] instead of __forget_imports__=[...]. - Packaging: - Make 'install' put etc in /etc outside egg (but inside virtualenv is ok). Or think about the right way to do config files otherwise. - Avoid compiling etc files to .pyc. - Make bin/tidy-imports work out of the box after sdist+unpack. Currently sdist doesn't include the bin/pyflyby symlink. - Make zip-safe/PEP308 compliant; use pkg_resources (if possible) instead of __file__. - If fail to import something, remove it (and children) from known imports. - Autopython script - Make naming consistent: auto_importer vs autoimporter - Add pretty-printing parameter --groupimports=manual|pep8|java, new default pep8. - Pep8 grouping: - stdlib, then third-party libs, then first-party libs - guess whether the current file is in the same package as an import by checking if imported_pkg.split(".")[0] in filename.split("/"). - But how do we distinguish some random local module from third-party libraries? Import it and check if path is in sys.path excluding current dir? Not satisfying but can't think of anything better. - stdlib before third-party libs. Need a list of stdlibs. I guess we should include e.g. argparse regardless of the python version, since we don't want the grouping to change depending on python version. Maybe just use a (cogged) hardcoded list of modules. - pyflyby_path importdb: require that components start with "/" or "./" or ".../"; i.e. don't allow "foo/bar"; tell user to use "./foo/bar" if that's what he wants. Test case. - Pyflyby_path: make sure that empty strings are ignored, not treated as ".". Test case. - py --safe: pyflyby_path=":" (not empty string, because that means "use default") - Allow non-imports in import db? Warn or allow silently? Indicate mode somehow? We want to allow setting pyflyby_path to the directory of code and use it without having to maintain an importdb. But don't make regular .pyflyby databases sloppy. - collect-exports: new mode that parses file and enumerates "stores", instead of executing code. - Unify collect-imports/collect-exports/collect-exports-from-stores into a single script with a mode argument. Also parameters for whether to include things imported from submodules (default on) and whether to include things imported from other packages (default off). - Add ability to dynamically enable a file based on py3 or py2 - Add tidy-imports, etc to py - Merge contents of all scripts into modules, and use setup.py entry_points. Keep stub scripts in bin directory only for non-installed usage. - Support pypy. It seems to already work fine in casual tests, but tox and maybe setup.py need tweaking - Transforms: support 'from a import b' => 'from c import d' (plus global replace b=>d) in addition to 'from a import b' => 'from c import d as b' - Make tidy-imports support detecting that print_function is necessary but missing, and add it. - Tidy-imports for notebooks: add all necessary imports to cells (either at the top or per cell) - Fix issue where properties get evaluated by pyflyby and then again by ipython. E.g. repeated print output in test_complete_symbol_nonmodule_1. We can't avoid pyflyby evaluating the property. But is there some way to intercept ipython's subsequent evaluation and reuse the same result? - Spyder: Fix pyflyby output coming during tab completion messing up the display. May need to fix in Spyder itself. - Handle comments between concatenate strings, e.g.: 'myvar = ("xx"\n#blah\n"yy")', e.g. in test_interactive.py. - Function & interactive command to automatically add interactively-typed imports to ~/.pyflyby. - Store all interactively-typed imports to an area that can be consulted to print out but don't automatically use - Integration with search pydoc index for where to get import - but don't use it automatically, just print it out and ask user if he wants to add it to database