The Byron's EditTools atom package provides a variety of features designed to make developers more productive. These are made to be intuitive and smart, thus doing automatically what you could not have done better manually.
- Expand and Shrink
- allows to grow and shrink your selection around the cursor(s) of your document, moving along its logical hierarchy.
- Where Am I ? (TBD)
- Visualize the scope one is in right now. This helps with white-space sensitive languages where it can become difficult to make out the scope you are currently in, e.g.
myFunc() -> for x in y -> if x -> while x-- -> if x % 2
- Toggle Plugins (TBD)
- Help in pairing situations and allow possibly intrusive plugins to be easily toggled on or off.
- If VMP is used, it might be difficult for anyone not used to vim to operate Atom, and just deactivating the plugin quickly seems like a nice thing to have.
I just starting looking into solving this problem, there is no functionality just yet.
- Syntax-Sensitive
- It tries to get as close as possible to knowing the AST of the document, see this post for an idea.
- Adaptable to all Languages
- It should be easy to adjust it to work with various languages. Depending on how it will work, it will need additional information to help it deal with the syntax information it gets from Atom.
- runtime-costs don't grow with document size
- Its performance is not relative to the documents size, but is only affected by the costs to compute the actual expansion.
- TDD
- Each line of code is motivated by a test, which would fail if it is altered.
- Multi-Cursor Support
- could easily be implemented with single-cursor solution, adding each selection to the existing one.
- Multiple grammars per file
- Especially markdown makes it easy to embed other file formats. We deal with it and treat it as embedded document.
- Atom Expand
- Atom Select Scope
- Sublime Expand Region
- IntelliJ's excellent implementation (it certainly has a complete AST for document traversal)