this interface is for plugins depending on Meta that define extensions that are not in the Meta DSL for the Ide. It allows one to register those extensions and make them available through the Meta DSL, as if the extension is part of it. The data type of those extensions should be a subtype of AdditionalIdePhase, so that overriding AdditionalRegistry allows one to register the aforementioned extension in register.
AnActionExtensionProvider is in charge of the lifecycle of AnAction.
AnAction can be placed, executed and composed into any workflow, throughout the whole application lifecycle.
Whether on-demand by the user or as a standalone workflow.
They’re able to access almost every part of the ide.
In other words, AnAction contains a computation which can be evaluated multiple times at any time.
When a user triggers AnAction the AnAction.actionPerformed function is executed.
AnAction may have starkly different purposes, from changing CompilerConfigurations in the editor to opening UI element’s with media content.
Here are a few Links to the Action System from IntelliJ’s Development Guide
:
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.dsl.utils) |
multi-purpose algebra to interact with the Ide lifecycle through hijacking and replacing existing services or adding lifecycle related extensions that run at their respective phase. Services can be distributed across the ide in three different kinds at application-level, project-level or module-level. The intellij platform distributes an isolated instance depending on the level - isolated in terms of other instances -, that means an application-level service has solely one instance, whereas module-level services have an instance for each module. Though it is possible to register module-level services with Meta it is not advised to do so, due to high memory consumption.
complements the quote service with a cache strategy It aggregates the configs of caching quote transformations
(extensions in package arrow.meta.ide.plugins.quotes.utils) |
ColorSettingsPage goes hand in hand with SyntaxHighlighter’s.
ColorSettingsPage add’s a custom page in the user Settings under “Color Scheme” and is based on a custom SyntaxHighlighter composed with SyntaxHighlighterSyntax.syntaxHighlighter.
Consequently, ColorSettingsPages
not only allow users to customize the colors of SyntaxHighlighter’s for a better ide experience,
More importantly, they provide means, to highlight additional descriptors from the Parser
or Annotator.
One use-case for ColorSettingsPages
, among others, is to use them as a visual template in the ide, before the actual SyntaxHighlighter is created.
Therefore, a ColorSettingsPage visually enhances the underlying SyntaxHighlighter and all descriptors from the Parser
and Annotator.
Additionally, there are other use-cases with Themes
.
(extensions in package arrow.meta.ide.plugins.proofs.psi) |
(extensions in package arrow.meta.ide.plugins.quotes.utils) |
Dialogs are isomorphic to a function (UserInput) -> (AnAction)
.
Therefore Dialogs have the ability to manipulate the editor environment as extensive as AnAction
.
Consequently, we can treat Dialogs
as AnAction
with a display.
DocumentationSyntax registers an extension for documentation support. Check out Documentation
The ExtensionProvider phase sits at the core of the main API in IntelliJ’s Platform for ExtensionPoints.
ExtensionPoints regardless of their nature are means to interact with the ide.
The ExtensionProviderSyntax allows plugin developers to define, compose and manipulate workflow’s in the ide environment explicitly without specifying those changes in the plugin.xml
.
The latter is true for all Jetbrains products, which are based on the IntelliJ Platform API, e.g.: Rider
, MPS
, CLion
, etc.
It’s polymorphic shape facilitates existing and newly created Extensions, for example:
LanguageExtension,
PlatformExtensions,
RefactoringExtensions and many more.
FoldingTestSyntax provides test methods for FoldingBuilder.
(extensions in package arrow.meta.ide.plugins.proofs.psi) |
HeavyTestSyntax utilises common patterns in test environments for fully created ide instances.
Hint’s are generally used with TypeInferenceAlgorithms. HintingSyntax provides means to connect those algorithms to the ide for specified element’s.
IconProvider display Icon’s for Files and the StructureView. StructureViewSyntax provides APIs to create StructureViews. Check out the Docs.
IconProviderTestSyntax provides test methods for IconProvider.
minimal port from arrow-core
IdeListPopupItem resembles one item of a ListPopup Default values are from com.intellij.openapi.ui.popup.util.BaseListPopupStep
entry point of Meta in the Ide
transform defines a valid representation of the test result A, where null stands for a wrong or unexpected representation. ResolutionSyntax facilitates extensions for IdeResolution.
IdeTest eventually completes with a test result A and has F as its plugin context for dependencies and features. test results with A defines what exact test is run based on the code. result describes the expected shape of A with a custom message. F is the plugin context, where dependencies and features can be used to define test and/or result.
This is the entry point for Test classes JUnit initializes the Test Environment and registers your custom ide-plugin.
This empty abstract class is needed, as the underlying TestFramework may change for future versions.
Please note, that this set up is solely for light UI tests, that don’t require a build environment or generated sources.
In those cases, one may supply one of the HeavyIdeaTests
or Testcase
the one in our test directory for gradle.
IdeTestTypeSyntax ensures that each TestType is within an Idea instance and provides Tooling from IntelliJ’s Testing Environment
IdService is a service wrapper over A value and solely allows monomorphic updates. This Service is one way to replace global variables stored in components to their service representation. The value A may either be distributed per project or per application.
Loosely speaking, Inspection's
are easily recognized as “QuickFixes” when the user hit’s a KeyShortCut for missing imports.
Interestingly enough, despite calling Inspection's
proverbially “QuickFixes”, IntelliJ defines a QuickFix
as an aggregation of multiple Intention's
.
Whereas Intention's
analysis your code and users can decide whether they want to apply a suggested Fix,
Inspection’s improve upon that very idea and are capable to block the user to compile code at the first place.
Additionally, we can scope the Fix in applyTo
locally, for each instance per file, or globally to the whole project, assuming it has a universal refactoring task.
There are cases, where an universal Fix, might not be obvious, but that doesn’t stop plugin developer’s to notify and direct user’s to helpful resources about this problem.
IntegrationSyntax servers as an interoperability algebra to register compiler extensions and kotlin extensions regarding the Ide.
The IDE analysis user code and provides IntentionAction’s to either signal error’s to user’s or resolve them if triggered.
(extensions in package arrow.meta.ide.plugins.proofs.psi) |
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.plugins.proofs.markers) |
(extensions in package arrow.meta.ide.plugins.proofs.markers) |
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.plugins.proofs.psi) |
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.plugins.proofs.folding) |
(extensions in package arrow.meta.ide.plugins.proofs.markers) |
LightTestSyntax utilises common patterns in test environments for headless ide instances.
LineMarkerDescription represents the collected slowLinMarker’s and regular lineMarkers.
LineMarker’s serve as visuals, which appear on specified PsiElements. There are several methods to subscribe LineMarkers, the one LineMarkerSyntax provides is derived from Kotlin’s org.jetbrains.kotlin.idea.highlighter.KotlinSuspendCallLineMarkerProvider and org.jetbrains.kotlin.idea.highlighter.KotlinRecursiveCallLineMarkerProvider. In general, subscription techniques differ mainly in performance.
LineMarkerTestSyntax provides test methods for LineMarkerProvider. One example is in ideTest KDoc.
(extensions in package arrow.meta.ide.dsl.utils) |
IntelliJ defines various notification techniques.
Popup’s can be created at any time.
Either in AnActionSyntax, InspectionSyntax or IntentionExtensionProviderSyntax and many other places.
Once the PopUp is created the user needs to call a show()
method like com.intellij.openapi.ui.popup.JBPopup.showUnderneathOf, this is an effectfull operation.
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide.phases.config) |
(extensions in package arrow.meta.ide.plugins.quotes.lifecycle) |
(extensions in package arrow.meta.ide.plugins.proofs.markers) |
(extensions in package arrow.meta.ide.dsl.utils) |
The QuoteCache provides the following functions to manipulate its underlying data structure, that stores and updates quote transformations.
packageFqName and descriptors after quote transformations based on an implicit KtFile.
Whereas the QuoteCache persists quote transformations, the QuoteSystemService is responsible for transforming KtFiles under a given context.
(extensions in package arrow.meta.ide.dsl.utils) |
(extensions in package arrow.meta.ide) |
(extensions in package arrow.meta.ide.testing.env) |
SyntaxHighlighterExtensionProvider provides means to register SyntaxHighlighters for Languages. SyntaxHighlighters solely specify highlighted tokens, which are generated from the Lexer. Check out the Docs on Syntax Highlighting or How to create a Syntax Highlighter.
Tool windows have several use-cases, though there used in two different scenario. Either, to display content resulting from an computation, which ToolWindowSyntax materializes with addToolWindowWithAction and registerToolWindow, or establishing a ‘persistently’ visible tool window the user can interact with at all time. Please refer to this link for the second scenario.
(extensions in package arrow.meta.ide.dsl.utils) |
Do you like Arrow?
✖