IntelliJ Platform Plugin SDK Help

Additional Minor Features

A number of commonly used minor features are listed in the following format:

EP: fully.qualified.extensionPointName — Extension Point Name (must be specified in plugin.xml)

com.extensionPoint.class description text — Extension Point class/interface to provide functionality

- Sample 1 - Sample implementation

Brace Matching

EP: com.intellij.lang.braceMatcher

PairedBraceMatcher returns an array of brace pairs (BracePair) specifying the characters for the opening and closing braces and the lexer token types for these characters. (In principle, it is possible to return multi-character tokens, like "begin" and "end", as the start and end tokens of a brace pair. The IDE will match such braces, but the highlighting for such braces will not be entirely correct.)

Certain types of braces can be marked as structural. Structural braces have higher priority than regular braces: they are matched with each other even if there are unmatched braces of different types between them. An opening non-structural brace is not matched with a closing one if one of them is inside a pair of matched structural braces and another is outside. See also Recognizing Complex Multi-Block Expressions.

If the brace matching is "too heavy" and should not be executed in EDT, implement HeavyBraceHighlighter and register in com.intellij.heavyBracesHighlighter EP (2022.3).

Quote Handling

EP: com.intellij.lang.quoteHandler

To support Insert pair quote feature, provide QuoteHandler. In most cases, SimpleTokenSetQuoteHandler base implementation will be suitable.

Comment Code

EP: com.intellij.lang.commenter

Commenter returns the prefix for the line comment, and the prefix and suffix for the block comment if supported by the language. For more complex logic, use SelfManagingCommenter.

Code Folding

EP: com.intellij.lang.foldingBuilder

FoldingBuilder returns the list of foldable text ranges (as an array of FoldingDescriptor objects), the replacement text which is shown for each range when it is folded, and the default state of each folding region (folded or unfolded).

Join Lines

EP: com.intellij.joinLinesHandler

JoinLinesHandlerDelegate allows extending support smart/semantic Edit | Join Lines (e.g., String literal split on multiple lines).

Smart Enter

EP: com.intellij.lang.smartEnterProcessor

SmartEnterProcessor handles Edit | Complete Statement (e.g., autocomplete missing semicolon/parentheses).

Move Element Left/Right

EP: com.intellij.moveLeftRightHandler

Return children of given element from MoveElementLeftRightHandler for Code | Move Element Left|Right, e.g., method call parameters. Alternatively, implement PsiListLikeElement in PSI element.

Naming Suggestions

EP: com.intellij.nameSuggestionProvider

NameSuggestionProvider provides name suggestions for the given element, e.g., for Rename refactoring.

Semantic Highlight Usages

EP: com.intellij.highlightUsagesHandlerFactory

HighlightUsagesHandlerFactory allows highlighting e.g., Exit Points or Exceptions.


ParserDefinition.getCommentTokens() must return the set of tokens treated as comments to populate the TODO tool window.

Additional places

EP: com.intellij.indexPatternSearch

Additional places can be provided via IndexPatternSearch registered in com.intellij.indexPatternSearch extension point.

Context Info

EP: com.intellij.declarationRangeHandler

DeclarationRangeHandler provides View | Context Info for custom languages with structure view implementation based on a TreeBasedStructureViewBuilder.


Moved to Spell Checking.

Reference Injection

EP: com.intellij.referenceInjector

ReferenceInjector allows users to inject pre-defined references (e.g., "Encoding", "File Reference") into PsiLanguageInjectionHost elements (IntelliLang plugin required).

Color Preview/Chooser

EP: com.intellij.colorProvider

ElementColorProvider renders gutter icon for an element containing color information.

File Includes

EP: com.intellij.include.provider

FileIncludeProvider provides information about include statements resolving to files (e.g., <xi:include> in XML). Including/included files can then be obtained via FileIncludeManager.

Recognizing Complex Multi-Block Expressions

EP: com.intellij.codeBlockSupportHandler

CodeBlockSupportHandler allows providing text ranges for more complex code blocks like, e.g., in if/elsif/else blocks. It is used to highlight markers and keywords if one is under the cursor, and for navigation to the beginning/end of blocks. See also Brace Matching.

EP: com.intellij.breadcrumbsInfoProvider

BreadcrumbsProvider allows for language-specific breadcrumbs.

Plain Text Completion

EP: com.intelllij.completion.plainTextSymbol

PlainTextSymbolCompletionContributor provides a simple way to extract lookup elements from a file so that users have completion available in, e.g., plain text editors like VCS commit messages.

Splitting and Joining List Constructs

EP: com.intellij.listSplitJoinContext

ListSplitJoinContext needs to be implemented to define the exact behavior of splitting and joining list-like constructs in a language. The UI will show implementations of this EP as an intention action at appropriate locations. Developers can use the abstract classes in DefaultListSplitJoinContext for their implementation.

Suggesting Rename and Change Signature Refactorings

EP: com.intellij.suggestedRefactoringSupport

SuggestedRefactoringSupport provides functionality for suggesting rename and change signature refactorings for custom languages.

Reader Mode

EP: com.intellij.readerModeMatcher

ReaderModeMatcher provides a way to decide if files are shown in the correct mode: reader mode vs. normal editor mode. Please see the documentation to get familiar with reader mode.

Background Colors for Editors and Project View

EP: com.intellij.editorTabColorProvider

EditorTabColorProvider allows for the modification of the background colors for specific files. If access to indexes is not required, it can be marked dumb aware.

Custom Names and Tooltips for Editor Tabs

EP: com.intellij.editorTabTitleProvider

EditorTabTitleProvider allows for specifying custom names and tooltips displayed in the title of editor tabs. If access to indexes is not required, it can be marked dumb aware.

Please see, e.g., GradleEditorTabTitleProvider which shows how the project name is added to the editor tab for Gradle files.

Prevent Error Highlighting of Files

EP: com.intellij.problemHighlightFilter, com.intellij.problemFileHighlightFilter

ProblemHighlightFilter and the com.intellij.problemFileHighlightFilter EP (which implements Condition<VirtualFile>) are used to filter out files that should not be error-highlighted because they are, e.g., outside the current project scope. Note that these filters should be permissive and only prevent highlighting for files that are absolutely known to be outside the scope.

Provide Fully Qualified Names (FQN) for Elements

EP: com.intellij.ide.actions.QualifiedNameProvider

QualifiedNameProvider provides features like copying and pasting references of FQN for, e.g., classes, functions, or methods. Therefore, the QualifiedNameProvider implementation needs to provide logic to convert from and to FQN.

Label Files as Test Files

EP: com.intellij.openapi.roots.TestSourcesFilter

TestSourcesFilter allows for telling the IDE that a file is a test file, even it's not located in a directory marked as test root. This can be used in situations where test files are located next to source files. If these files can be distinguished either by filename or content from source files, implementing this EP will mark them as test files for the IDE.

Move Statements Up and Down in the Editor

EP: com.intellij.statementUpDownMover

StatementUpDownMover allows for customizing the behavior of moving statements up and down. This can be used to keep code syntactically correct when moving code in the editor, e.g. when moving a variable declaration.

Last modified: 15 April 2024