How We Work
We build development tools, and we've done the research and legwork to build them better and more efficiently than anyone. Our work stands out because of our careful consideration of often overlooked but critical areas of IDE development.
-
Rapid Development of Scalable Applications
When developing an IDE for a new programming language, it takes us significantly less time because we've developed tools that help automate the creation of IDE-specific algorithms from a language specification. Unlike competitors who claim to offer similar abilities, our tools were designed from the very beginning to support complex general-purpose programming languages, scaling well to projects containing thousands of source files. Our algorithms also scale well to source files containing hundreds of thousands of lines.
-
Responsive User Interfaces
We aggressively prioritize commands which the user expects to have no visible delay. Implicit operations while typing in a document have a target latency of 20ms, with an acceptable ceiling of just 50ms. These operations include:
- Typing plain text
- Automatic indentation and/or code formatting, if enabled
- Automatic code completion dropdowns
While navigation features like Go to Declaration and Find Usages do not fall under the same latency requirements as typing, we understand that features with long latencies become unused features. We are able to implement a wide range of static analysis features in our IDEs with exceptional response times compared to other environments.
-
Highly Responsive Code Completion
Many code completion implementations strive to simply provide the user with a list of possible items if and when they request it. More recent implementations go a step further to prioritize suggestions which are more likely to be correct. Our work additionally focuses on allowing users to reliably type their programs with fewer keystrokes, without forcing them to learn language-specific shortcuts. Our algorithms combine the consistently low latency in our IDEs with several other techniques to provide predictability, accuracy, and resistance to problems caused by spelling errors or other typos.
Our code completion algorithms are based on an exceptionally powerful generalized parser that is capable of operating tightly restricted to small blocks of code. This allows us to maintain exceptional accuracy even in documents containing errors, and consistent performance in documents ranging from 1KB to over 1MB.
The following video is a subset of our video introduction to GoWorks, and gives a walkthrough showing several ways Tunnel Vision Labs' code completion features will work for you.
-
Robust Behavior
Source code is always a work in progress. We consider the following characteristics critical in evaluating the robustness of an IDE, and our tools are designed to preserve desired behavior wherever possible.
- The user can only see the text on the screen. A robust IDE prevents syntax and/or semantic errors which occur off-screen (above or below the current view) from breaking code completion or other features for text on screen.
- Consistency is the key to meeting expectations. If the user performs the same operation twice, the same answer should be provided each time.
-
Feature Tuning
Each programming language has a unique set of strengths and weaknesses. We carefully consider the behavior of each feature in a new IDE, working to encourage the understanding and efficient use of the language's strengths for both new and seasoned developers. In a more subtle manner we work to create features that reduce the overhead and potential frustration associated with weaknesses of a language. To the user of an IDE, feature tuning reduces learning curves and produces intuitive behavior.
-
Extending Concepts to Custom Requirements
Our algorithms and approach accounts for the wide variety of languages in use today. Just as languages vary, we anticipate facing unique situations in our projects and work to ensure our tools will be able to meet the demands of specific language and user requirements. These situations occasionally include the following.
Refactoring Tools
Our refactoring algorithms are powered by the same generalized parsing techniques used for code completion, ensuring that mistakes won't be made even when refactoring tools are used on a project that doesn't currently compile.
Compilers and Source Code Analysis
Our language tools are not restricted to use in an IDE. If a team has a need for specific source analysis tasks, we would love to help design tools to accomplish them.
