| # Implementing a new language feature | |
| When a new language feature is approved, a tracking issue will be created in | |
| order to track the work required in the `analysis_server` package. Separate | |
| issues are created to track the work in the `analyzer`, `dartdoc`, and `linter` | |
| packages. | |
| Below is a template for the list of server features that need to be reviewed to | |
| see whether they need to be enhanced in order to work correctly with the new | |
| feature. In almost all cases new tests will need to be written to ensure that | |
| the feature isn't broken when run over code that uses the new language feature. | |
| In some cases, new support will need to be added. | |
| Separate issues should be created for each of the items in the list. | |
| ## Template | |
| The following is a list of the individual features that need to be considered. | |
| The features are listed in alphabetical order. | |
| - [ ] Call Hierarchy (an IDE feature where you can get a call hierarchy if you | |
| click on a method) | |
| - [ ] Closing Labels (an LSP feature allowing the IDE to show lightly grayed out | |
| comments at the end of the last line of a multi-line invocation, to aid | |
| the user in understanding what invocation is closed by a `)`) | |
| - [ ] Code Completion | |
| - [ ] Code Folding | |
| - [ ] Document Colors (an LSP feature whereby a reference to a color in code can | |
| be associated with a colored swatch and a color picker) | |
| - [ ] Hovers | |
| - [ ] Implemented/override markers (a legacy protocol feature, only available to | |
| IntelliJ and Android Studio) | |
| - [ ] Implemented Markers (allows navigation from a base class method to | |
| methods that override it, or from a base class to classes that | |
| extend/implement it) | |
| - [ ] Override Markers (allows navigation from a method to the base class | |
| method it overrides, or from a class to the class that it | |
| extends/implements) | |
| - [ ] Inlay Hints (an LSP feature allowing extra information to be displayed | |
| using inline hints) | |
| - [ ] Navigation | |
| - [ ] Go to Definition (LSP feature) | |
| - [ ] Go to Type Definition (LSP feature) | |
| - [ ] Go to Super (LSP feature) | |
| - [ ] Legacy protocol (for IntelliJ and Android Studio) | |
| - [ ] Occurrences | |
| - [ ] Legacy protocol (for IntelliJ and Android Studio) | |
| - [ ] Document Highlights (LSP feature) | |
| - [ ] Organize Imports | |
| - [ ] Outline | |
| - [ ] Legacy protocol (for IntelliJ and Android Studio) | |
| - [ ] LSP feature (Document Symbols - used for Outline, Breadcrumbs, Go to | |
| Symbol in Editor) | |
| - [ ] Flutter Outline | |
| - [ ] Legacy protocol (for IntelliJ and Android Studio) | |
| - [ ] LSP feature (custom notification | |
| `dart/textDocument/publishFlutterOutline`) | |
| - [ ] Refactorings and quick assists/fixes (note that in addition to potentially | |
| creating new refactorings and/or quick assists/fixes, part of the work | |
| required to implement a new language feature includes evaluating each existing | |
| refactoring and quick fix/assist to see whether it needs to be improved or | |
| have test cases added to reflect the new feature). | |
| - [ ] Legacy refactorings (for IntelliJ and Android Studio) | |
| - [ ] LSP rename refactoring (note that LSP has a special protocol for | |
| renames) | |
| - [ ] LSP self-describing refactorings | |
| - [ ] Quick Assists | |
| - [ ] Quick Fixes | |
| - [ ] Search | |
| - [ ] Find References | |
| - [ ] Implementations - LSP | |
| - [ ] Member Declarations | |
| - [ ] Member References | |
| - [ ] Top-level Declarations | |
| - [ ] Selection Range (an LSP feature allowing a selection to be expanded to | |
| cover the range of an ancestor AST node) | |
| - [ ] Syntax Highlighting | |
| - [ ] Legacy protocol, a.k.a. Semantic Highlights (for IntelliJ and Android | |
| Studio) | |
| - [ ] Semantic Tokens (LSP feature) | |
| - [ ] Signature Help (an LSP feature that tells the parameters and types needed | |
| for an invocation) | |
| - [ ] Snippets | |
| - [ ] Sort Members | |
| - [ ] Type Hierarchy | |
| - [ ] Legacy protocol (for IntelliJ and Android Studio) | |
| - [ ] LSP feature | |
| - [ ] Workspace Symbols (LSP feature) |