master c3df8ada78a9 cached
873 files
3.0 MB
830.1k tokens
5705 symbols
1 requests
Download .txt
Showing preview only (3,317K chars total). Download the full file or copy to clipboard to get everything.
Repository: reasonml-editor/reasonml-idea-plugin
Branch: master
Commit: c3df8ada78a9
Files: 873
Total size: 3.0 MB

Directory structure:
gitextract_px5e5xvk/

├── .github/
│   ├── FUNDING.md
│   ├── FUNDING.yml
│   └── workflows/
│       ├── gradle.yml
│       └── website-deploy.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com/
│   │   │   │   └── reason/
│   │   │   │       ├── FileHelper.java
│   │   │   │       ├── comp/
│   │   │   │       │   ├── CliType.java
│   │   │   │       │   ├── CompilerOutputAnalyzer.java
│   │   │   │       │   ├── CompilerOutputListener.java
│   │   │   │       │   ├── ORCompiler.java
│   │   │   │       │   ├── ORCompilerConfigManager.java
│   │   │   │       │   ├── ORCompilerManager.java
│   │   │   │       │   ├── ORCompilerOutputAnalyzer.java
│   │   │   │       │   ├── ORConstants.java
│   │   │   │       │   ├── ORPlatform.java
│   │   │   │       │   ├── ORResolvedCompiler.java
│   │   │   │       │   ├── ProcessFinishedListener.java
│   │   │   │       │   ├── bs/
│   │   │   │       │   │   ├── BsColoredProcessHandler.java
│   │   │   │       │   │   ├── BsCompiler.java
│   │   │   │       │   │   ├── BsConfig.java
│   │   │   │       │   │   ├── BsConfigReader.java
│   │   │   │       │   │   ├── BsFormatProcess.java
│   │   │   │       │   │   ├── BsLineProcessor.java
│   │   │   │       │   │   ├── BsNotification.java
│   │   │   │       │   │   ├── BsPlatform.java
│   │   │   │       │   │   ├── BsProcess.java
│   │   │   │       │   │   ├── BsResolvedCompiler.java
│   │   │   │       │   │   └── Ninja.java
│   │   │   │       │   ├── dune/
│   │   │   │       │   │   ├── DuneCompiler.java
│   │   │   │       │   │   ├── DuneOutputAnalyzer.java
│   │   │   │       │   │   ├── DunePlatform.java
│   │   │   │       │   │   └── DuneProcess.java
│   │   │   │       │   ├── esy/
│   │   │   │       │   │   ├── Esy.java
│   │   │   │       │   │   ├── EsyCompiler.java
│   │   │   │       │   │   ├── EsyConstants.java
│   │   │   │       │   │   ├── EsyNotification.java
│   │   │   │       │   │   ├── EsyPackageJson.java
│   │   │   │       │   │   ├── EsyPlatform.java
│   │   │   │       │   │   └── EsyProcess.java
│   │   │   │       │   ├── ocaml/
│   │   │   │       │   │   ├── OcamlFormatProcess.java
│   │   │   │       │   │   ├── OpamCommandLine.java
│   │   │   │       │   │   ├── OpamEnv.java
│   │   │   │       │   │   └── OpamProcess.java
│   │   │   │       │   └── rescript/
│   │   │   │       │       ├── ResCompiler.java
│   │   │   │       │       ├── ResConfigReader.java
│   │   │   │       │       ├── ResFormatProcess.java
│   │   │   │       │       ├── ResPlatform.java
│   │   │   │       │       ├── ResProcessHandler.java
│   │   │   │       │       ├── ResResolvedCompiler.java
│   │   │   │       │       └── RescriptOutputAnalyzer.java
│   │   │   │       ├── hints/
│   │   │   │       │   ├── InsightManager.java
│   │   │   │       │   ├── Rincewind.java
│   │   │   │       │   ├── RincewindDownloader.java
│   │   │   │       │   └── RincewindProcess.java
│   │   │   │       ├── ide/
│   │   │   │       │   ├── CompileOnSave.java
│   │   │   │       │   ├── EditorPosition.java
│   │   │   │       │   ├── IconProvider.java
│   │   │   │       │   ├── OREditorFactoryListener.java
│   │   │   │       │   ├── OREditorTracker.java
│   │   │   │       │   ├── ORFileDocumentListener.java
│   │   │   │       │   ├── ORFileUtils.java
│   │   │   │       │   ├── ORIcons.java
│   │   │   │       │   ├── ORPostStartupActivity.java
│   │   │   │       │   ├── ORVirtualFileListener.java
│   │   │   │       │   ├── actions/
│   │   │   │       │   │   ├── ConvertAction.java
│   │   │   │       │   │   └── TransformAction.java
│   │   │   │       │   ├── annotations/
│   │   │   │       │   │   ├── BsErrorAnnotator.java
│   │   │   │       │   │   ├── ErrorFileHighlighter.java
│   │   │   │       │   │   ├── ErrorsManager.java
│   │   │   │       │   │   ├── ORErrorAnnotator.java
│   │   │   │       │   │   ├── OutputInfo.java
│   │   │   │       │   │   └── ResErrorAnnotator.java
│   │   │   │       │   ├── comment/
│   │   │   │       │   │   ├── DuneCommenter.java
│   │   │   │       │   │   ├── MlyCommenter.java
│   │   │   │       │   │   ├── OclCommenter.java
│   │   │   │       │   │   └── RmlCommenter.java
│   │   │   │       │   ├── console/
│   │   │   │       │   │   ├── ClearLogAction.java
│   │   │   │       │   │   ├── CompilerAction.java
│   │   │   │       │   │   ├── ORConsoleFilter.java
│   │   │   │       │   │   ├── ORConsoleFilterProvider.java
│   │   │   │       │   │   ├── ORToolWindowFactory.java
│   │   │   │       │   │   ├── ORToolWindowManager.java
│   │   │   │       │   │   ├── bs/
│   │   │   │       │   │   │   ├── BsConsoleView.java
│   │   │   │       │   │   │   ├── BsMakeAction.java
│   │   │   │       │   │   │   ├── BsMakeWorldAction.java
│   │   │   │       │   │   │   └── BsToolWindowFactory.java
│   │   │   │       │   │   ├── dune/
│   │   │   │       │   │   │   ├── DuneBuildAction.java
│   │   │   │       │   │   │   ├── DuneCleanAction.java
│   │   │   │       │   │   │   ├── DuneConsoleView.java
│   │   │   │       │   │   │   ├── DuneToolWindowFactory.java
│   │   │   │       │   │   │   └── OCamlConsoleFilter.java
│   │   │   │       │   │   ├── esy/
│   │   │   │       │   │   │   ├── EsyBuildAction.java
│   │   │   │       │   │   │   ├── EsyConsoleView.java
│   │   │   │       │   │   │   └── EsyToolWindowFactory.java
│   │   │   │       │   │   └── rescript/
│   │   │   │       │   │       ├── RescriptBuildAction.java
│   │   │   │       │   │       ├── RescriptConsoleFilter.java
│   │   │   │       │   │       ├── RescriptConsoleView.java
│   │   │   │       │   │       ├── RescriptResetAction.java
│   │   │   │       │   │       └── RescriptToolWindowFactory.java
│   │   │   │       │   ├── debug/
│   │   │   │       │   │   ├── OCamlApplicationConfiguration.java
│   │   │   │       │   │   ├── OCamlApplicationRunningState.java
│   │   │   │       │   │   ├── OCamlDebugRunner.java
│   │   │   │       │   │   ├── OCamlModuleBasedConfiguration.java
│   │   │   │       │   │   ├── ORLineBreakpointProperties.java
│   │   │   │       │   │   ├── ORLineBreakpointType.java
│   │   │   │       │   │   └── OclDebuggerRunnerSettings.java
│   │   │   │       │   ├── docs/
│   │   │   │       │   │   ├── DocFormatter.java
│   │   │   │       │   │   └── ORDocumentationProvider.java
│   │   │   │       │   ├── editors/
│   │   │   │       │   │   ├── CmtFileEditor.java
│   │   │   │       │   │   ├── CmtFileEditorProvider.java
│   │   │   │       │   │   └── CmtXmlComponent.java
│   │   │   │       │   ├── files/
│   │   │   │       │   │   ├── CmtFileType.java
│   │   │   │       │   │   ├── DuneFile.java
│   │   │   │       │   │   ├── DuneFileType.java
│   │   │   │       │   │   ├── FileBase.java
│   │   │   │       │   │   ├── Ml4File.java
│   │   │   │       │   │   ├── Ml4FileType.java
│   │   │   │       │   │   ├── MlgFile.java
│   │   │   │       │   │   ├── MlgFileType.java
│   │   │   │       │   │   ├── MlgFileViewProvider.java
│   │   │   │       │   │   ├── MlgFileViewProviderFactory.java
│   │   │   │       │   │   ├── MllFile.java
│   │   │   │       │   │   ├── MllFileType.java
│   │   │   │       │   │   ├── MllFileViewProvider.java
│   │   │   │       │   │   ├── MllFileViewProviderFactory.java
│   │   │   │       │   │   ├── MlyFile.java
│   │   │   │       │   │   ├── MlyFileType.java
│   │   │   │       │   │   ├── MlyFileViewProvider.java
│   │   │   │       │   │   ├── MlyFileViewProviderFactory.java
│   │   │   │       │   │   ├── ORConfigJsonFileType.java
│   │   │   │       │   │   ├── ORTargetElementEvaluator.java
│   │   │   │       │   │   ├── OclFile.java
│   │   │   │       │   │   ├── OclFileType.java
│   │   │   │       │   │   ├── OclInterfaceFile.java
│   │   │   │       │   │   ├── OclInterfaceFileType.java
│   │   │   │       │   │   ├── ResFile.java
│   │   │   │       │   │   ├── ResFileType.java
│   │   │   │       │   │   ├── ResInterfaceFile.java
│   │   │   │       │   │   ├── ResInterfaceFileType.java
│   │   │   │       │   │   ├── RmlFile.java
│   │   │   │       │   │   ├── RmlFileType.java
│   │   │   │       │   │   ├── RmlInterfaceFile.java
│   │   │   │       │   │   └── RmlInterfaceFileType.java
│   │   │   │       │   ├── folding/
│   │   │   │       │   │   ├── DuneFoldingBuilder.java
│   │   │   │       │   │   └── ORFoldingBuilder.java
│   │   │   │       │   ├── format/
│   │   │   │       │   │   ├── FormatterProcessor.java
│   │   │   │       │   │   ├── ORPostFormatProcessor.java
│   │   │   │       │   │   └── ReformatOnSave.java
│   │   │   │       │   ├── go/
│   │   │   │       │   │   ├── FileModuleDataModuleRendererFactory.java
│   │   │   │       │   │   ├── ORLineMarkerProvider.java
│   │   │   │       │   │   └── ORModuleContributor.java
│   │   │   │       │   ├── handlers/
│   │   │   │       │   │   ├── ORTypedHandler.java
│   │   │   │       │   │   ├── OclQuoteHandler.java
│   │   │   │       │   │   ├── ResQuoteHandler.java
│   │   │   │       │   │   └── RmlQuoteHandler.java
│   │   │   │       │   ├── highlight/
│   │   │   │       │   │   ├── DuneSyntaxAnnotator.java
│   │   │   │       │   │   ├── DuneSyntaxHighlighter.java
│   │   │   │       │   │   ├── DuneSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── ORSyntaxAnnotator.java
│   │   │   │       │   │   ├── ORSyntaxHighlighter.java
│   │   │   │       │   │   ├── OclGrammarEditorHighlighter.java
│   │   │   │       │   │   ├── OclGrammarSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclLexEditorHighlighter.java
│   │   │   │       │   │   ├── OclLexSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclSyntaxAnnotator.java
│   │   │   │       │   │   ├── OclSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclYaccEditorHighlighter.java
│   │   │   │       │   │   ├── OclYaccSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── ResSyntaxAnnotator.java
│   │   │   │       │   │   ├── ResSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── RmlSyntaxAnnotator.java
│   │   │   │       │   │   └── RmlSyntaxHighlighterFactory.java
│   │   │   │       │   ├── hints/
│   │   │   │       │   │   ├── CodeLens.java
│   │   │   │       │   │   ├── InferredTypes.java
│   │   │   │       │   │   ├── InferredTypesImplementation.java
│   │   │   │       │   │   ├── InferredTypesService.java
│   │   │   │       │   │   ├── OREditorLinePainter.java
│   │   │   │       │   │   ├── ORParameterInfoHandler.java
│   │   │   │       │   │   ├── OclParameterInfoHandler.java
│   │   │   │       │   │   ├── ResParameterInfoHandler.java
│   │   │   │       │   │   ├── RmlParameterInfoHandler.java
│   │   │   │       │   │   ├── RmlTypeProvider.java
│   │   │   │       │   │   └── SignatureProvider.java
│   │   │   │       │   ├── importWizard/
│   │   │   │       │   │   ├── DuneExternalConstants.java
│   │   │   │       │   │   ├── DuneProjectImportBuilder.java
│   │   │   │       │   │   ├── DuneProjectImportProvider.java
│   │   │   │       │   │   ├── DuneProjectOpenProcessor.java
│   │   │   │       │   │   ├── DuneProjectRootStep.form
│   │   │   │       │   │   ├── DuneProjectRootStep.java
│   │   │   │       │   │   └── ImportedDuneBuild.java
│   │   │   │       │   ├── insight/
│   │   │   │       │   │   ├── CompletionUtils.java
│   │   │   │       │   │   ├── KeywordCompletionContributor.java
│   │   │   │       │   │   ├── ORCompletionContributor.java
│   │   │   │       │   │   ├── OclCompletionContributor.java
│   │   │   │       │   │   ├── OclKeywordCompletionContributor.java
│   │   │   │       │   │   ├── ResCompletionContributor.java
│   │   │   │       │   │   ├── ResKeywordCompletionContributor.java
│   │   │   │       │   │   ├── RmlCompletionContributor.java
│   │   │   │       │   │   ├── RmlKeywordCompletionContributor.java
│   │   │   │       │   │   ├── pattern/
│   │   │   │       │   │   │   └── ORElementPatternMatcher.java
│   │   │   │       │   │   └── provider/
│   │   │   │       │   │       ├── DotExpressionCompletionProvider.java
│   │   │   │       │   │       ├── FreeExpressionCompletionProvider.java
│   │   │   │       │   │       ├── JsxAttributeCompletionProvider.java
│   │   │   │       │   │       ├── JsxNameCompletionProvider.java
│   │   │   │       │   │       ├── ModuleCompletionProvider.java
│   │   │   │       │   │       └── ObjectCompletionProvider.java
│   │   │   │       │   ├── intentions/
│   │   │   │       │   │   ├── ExpandLocalOpenIntention.java
│   │   │   │       │   │   └── FunctionBracesIntention.java
│   │   │   │       │   ├── js/
│   │   │   │       │   │   ├── JsIconProvider.java
│   │   │   │       │   │   ├── JsInjector.java
│   │   │   │       │   │   ├── ORIndexableFileNamesProvider.java
│   │   │   │       │   │   └── ORJsLibraryManager.java
│   │   │   │       │   ├── library/
│   │   │   │       │   │   ├── OclLibraryKind.java
│   │   │   │       │   │   ├── OclLibraryRootProvider.java
│   │   │   │       │   │   ├── OclLibraryRootsComponentDescriptor.java
│   │   │   │       │   │   ├── OclLibraryType.java
│   │   │   │       │   │   └── OclSdkSetupValidator.java
│   │   │   │       │   ├── match/
│   │   │   │       │   │   ├── DunePairedBraceMatcher.java
│   │   │   │       │   │   ├── OclPairedBraceMatcher.java
│   │   │   │       │   │   ├── ResPairedBraceMatcher.java
│   │   │   │       │   │   └── RmlPairedBraceMatcher.java
│   │   │   │       │   ├── module/
│   │   │   │       │   │   ├── DuneModuleEditor.form
│   │   │   │       │   │   ├── DuneModuleEditor.java
│   │   │   │       │   │   └── DuneModuleEditorProvider.java
│   │   │   │       │   ├── refactor/
│   │   │   │       │   │   └── ORRefactoringSupportProvider.java
│   │   │   │       │   ├── repl/
│   │   │   │       │   │   ├── PromptConsole.java
│   │   │   │       │   │   ├── PromptConsoleView.java
│   │   │   │       │   │   ├── PromptHistory.java
│   │   │   │       │   │   ├── ReplConfigurationFactory.java
│   │   │   │       │   │   ├── ReplGenericState.java
│   │   │   │       │   │   ├── ReplRunConfiguration.java
│   │   │   │       │   │   ├── ReplRunConfigurationType.java
│   │   │   │       │   │   ├── ReplRunSettingsEditor.form
│   │   │   │       │   │   └── ReplRunSettingsEditor.java
│   │   │   │       │   ├── search/
│   │   │   │       │   │   ├── FileModuleData.java
│   │   │   │       │   │   ├── IndexedFileModule.java
│   │   │   │       │   │   ├── ModuleIndexService.java
│   │   │   │       │   │   ├── ORFindUsagesProvider.java
│   │   │   │       │   │   ├── ORImplementationSearch.java
│   │   │   │       │   │   ├── OclFindUsagesProvider.java
│   │   │   │       │   │   ├── PsiTypeElementProvider.java
│   │   │   │       │   │   ├── ResFindUsagesProvider.java
│   │   │   │       │   │   ├── RmlFindUsagesProvider.java
│   │   │   │       │   │   ├── index/
│   │   │   │       │   │   │   ├── ClassFqnIndex.java
│   │   │   │       │   │   │   ├── ClassMethodFqnIndex.java
│   │   │   │       │   │   │   ├── ExceptionFqnIndex.java
│   │   │   │       │   │   │   ├── ExceptionIndex.java
│   │   │   │       │   │   │   ├── ExternalFqnIndex.java
│   │   │   │       │   │   │   ├── ExternalIndex.java
│   │   │   │       │   │   │   ├── FileModuleIndex.java
│   │   │   │       │   │   │   ├── FileModuleIndexService.java
│   │   │   │       │   │   │   ├── IncludeIndex.java
│   │   │   │       │   │   │   ├── IndexKeys.java
│   │   │   │       │   │   │   ├── LetComponentFqnIndex.java
│   │   │   │       │   │   │   ├── LetFqnIndex.java
│   │   │   │       │   │   │   ├── ModuleFqnIndex.java
│   │   │   │       │   │   │   ├── ModuleIndex.java
│   │   │   │       │   │   │   ├── ModuleSignatureIndex.java
│   │   │   │       │   │   │   ├── NamespaceIndex.java
│   │   │   │       │   │   │   ├── ObjectFieldIndex.java
│   │   │   │       │   │   │   ├── OpenIndex.java
│   │   │   │       │   │   │   ├── ParameterFqnIndex.java
│   │   │   │       │   │   │   ├── ParameterIndex.java
│   │   │   │       │   │   │   ├── RecordFieldIndex.java
│   │   │   │       │   │   │   ├── TypeFqnIndex.java
│   │   │   │       │   │   │   ├── TypeIndex.java
│   │   │   │       │   │   │   ├── ValFqnIndex.java
│   │   │   │       │   │   │   └── VariantFqnIndex.java
│   │   │   │       │   │   └── reference/
│   │   │   │       │   │       ├── ORFakeResolvedElement.java
│   │   │   │       │   │       ├── ORModuleResolutionPsiGist.java
│   │   │   │       │   │       ├── ORMultiSymbolReference.java
│   │   │   │       │   │       ├── ORPsiLiteralStringReference.java
│   │   │   │       │   │       ├── ORPsiLowerSymbolReference.java
│   │   │   │       │   │       ├── ORPsiPropertyNameReference.java
│   │   │   │       │   │       ├── ORPsiUpperSymbolReference.java
│   │   │   │       │   │       └── ORReferenceAnalyzer.java
│   │   │   │       │   ├── settings/
│   │   │   │       │   │   ├── DuneColorSettingsPage.java
│   │   │   │       │   │   ├── ORColorSettingsPage.java
│   │   │   │       │   │   ├── ORSettings.java
│   │   │   │       │   │   ├── ORSettingsConfigurable.form
│   │   │   │       │   │   ├── ORSettingsConfigurable.java
│   │   │   │       │   │   ├── OpamConfigurationTab.form
│   │   │   │       │   │   └── OpamConfigurationTab.java
│   │   │   │       │   ├── spellcheckers/
│   │   │   │       │   │   ├── ORSpellCheckerStrategy.java
│   │   │   │       │   │   ├── OclSpellCheckerStrategy.java
│   │   │   │       │   │   ├── ResSpellCheckerStrategy.java
│   │   │   │       │   │   └── RmlSpellCheckerStrategy.java
│   │   │   │       │   ├── structure/
│   │   │   │       │   │   ├── NestedFunctionsFilter.java
│   │   │   │       │   │   ├── ORStructureViewModel.java
│   │   │   │       │   │   ├── ShowVariableFilter.java
│   │   │   │       │   │   ├── StructureViewElement.java
│   │   │   │       │   │   └── StructureViewFactory.java
│   │   │   │       │   ├── template/
│   │   │   │       │   │   ├── OCamlBaseLiveTemplateContextType.java
│   │   │   │       │   │   ├── OCamlCodeLiveTemplateContextType.java
│   │   │   │       │   │   ├── OCamlCommentLiveTemplateContextType.java
│   │   │   │       │   │   ├── ResBaseLiveTemplateContextType.java
│   │   │   │       │   │   └── RmlBaseLiveTemplateContextType.java
│   │   │   │       │   └── testAssistant/
│   │   │   │       │       ├── GotoTestDataAction.java
│   │   │   │       │       └── TestDataNavigationHandler.java
│   │   │   │       └── lang/
│   │   │   │           ├── CommonPsiParser.java
│   │   │   │           ├── Marker.java
│   │   │   │           ├── ModuleHelper.java
│   │   │   │           ├── ORLanguageParser.java
│   │   │   │           ├── ORLanguageProperties.java
│   │   │   │           ├── ORParser.java
│   │   │   │           ├── core/
│   │   │   │           │   ├── LiteralStringManipulator.java
│   │   │   │           │   ├── ORCodeFactory.java
│   │   │   │           │   ├── ORUtil.java
│   │   │   │           │   ├── psi/
│   │   │   │           │   │   ├── RPsiClass.java
│   │   │   │           │   │   ├── RPsiClassMethod.java
│   │   │   │           │   │   ├── RPsiConditional.java
│   │   │   │           │   │   ├── RPsiException.java
│   │   │   │           │   │   ├── RPsiExternal.java
│   │   │   │           │   │   ├── RPsiField.java
│   │   │   │           │   │   ├── RPsiFunctor.java
│   │   │   │           │   │   ├── RPsiInclude.java
│   │   │   │           │   │   ├── RPsiInferredType.java
│   │   │   │           │   │   ├── RPsiInnerModule.java
│   │   │   │           │   │   ├── RPsiLanguageConverter.java
│   │   │   │           │   │   ├── RPsiLet.java
│   │   │   │           │   │   ├── RPsiModule.java
│   │   │   │           │   │   ├── RPsiOCamlInjection.java
│   │   │   │           │   │   ├── RPsiOpen.java
│   │   │   │           │   │   ├── RPsiParameterDeclaration.java
│   │   │   │           │   │   ├── RPsiQualifiedPathElement.java
│   │   │   │           │   │   ├── RPsiRecordField.java
│   │   │   │           │   │   ├── RPsiSignature.java
│   │   │   │           │   │   ├── RPsiSignatureElement.java
│   │   │   │           │   │   ├── RPsiSignatureItem.java
│   │   │   │           │   │   ├── RPsiSignatureUtil.java
│   │   │   │           │   │   ├── RPsiStructuredElement.java
│   │   │   │           │   │   ├── RPsiType.java
│   │   │   │           │   │   ├── RPsiVal.java
│   │   │   │           │   │   ├── RPsiVar.java
│   │   │   │           │   │   ├── impl/
│   │   │   │           │   │   │   ├── ORASTFactory.java
│   │   │   │           │   │   │   ├── RPsiAnnotation.java
│   │   │   │           │   │   │   ├── RPsiArray.java
│   │   │   │           │   │   │   ├── RPsiAssert.java
│   │   │   │           │   │   │   ├── RPsiBinaryCondition.java
│   │   │   │           │   │   │   ├── RPsiClassConstructor.java
│   │   │   │           │   │   │   ├── RPsiClassField.java
│   │   │   │           │   │   │   ├── RPsiClassImpl.java
│   │   │   │           │   │   │   ├── RPsiClassInitializer.java
│   │   │   │           │   │   │   ├── RPsiClassMethodImpl.java
│   │   │   │           │   │   │   ├── RPsiConstraints.java
│   │   │   │           │   │   │   ├── RPsiDeconstruction.java
│   │   │   │           │   │   │   ├── RPsiDefaultValue.java
│   │   │   │           │   │   │   ├── RPsiDirective.java
│   │   │   │           │   │   │   ├── RPsiDuneField.java
│   │   │   │           │   │   │   ├── RPsiDuneFields.java
│   │   │   │           │   │   │   ├── RPsiDuneSExpr.java
│   │   │   │           │   │   │   ├── RPsiDuneStanza.java
│   │   │   │           │   │   │   ├── RPsiDuneVar.java
│   │   │   │           │   │   │   ├── RPsiExceptionImpl.java
│   │   │   │           │   │   │   ├── RPsiExternalImpl.java
│   │   │   │           │   │   │   ├── RPsiFieldValue.java
│   │   │   │           │   │   │   ├── RPsiFirstClass.java
│   │   │   │           │   │   │   ├── RPsiForLoop.java
│   │   │   │           │   │   │   ├── RPsiFunSwitch.java
│   │   │   │           │   │   │   ├── RPsiFunction.java
│   │   │   │           │   │   │   ├── RPsiFunctionBody.java
│   │   │   │           │   │   │   ├── RPsiFunctionCall.java
│   │   │   │           │   │   │   ├── RPsiFunctorBinding.java
│   │   │   │           │   │   │   ├── RPsiFunctorCall.java
│   │   │   │           │   │   │   ├── RPsiFunctorImpl.java
│   │   │   │           │   │   │   ├── RPsiFunctorResult.java
│   │   │   │           │   │   │   ├── RPsiGuard.java
│   │   │   │           │   │   │   ├── RPsiIfStatement.java
│   │   │   │           │   │   │   ├── RPsiIncludeImpl.java
│   │   │   │           │   │   │   ├── RPsiInherit.java
│   │   │   │           │   │   │   ├── RPsiInnerModuleImpl.java
│   │   │   │           │   │   │   ├── RPsiInterpolation.java
│   │   │   │           │   │   │   ├── RPsiInterpolationReference.java
│   │   │   │           │   │   │   ├── RPsiJsObject.java
│   │   │   │           │   │   │   ├── RPsiLeafPropertyName.java
│   │   │   │           │   │   │   ├── RPsiLetAttribute.java
│   │   │   │           │   │   │   ├── RPsiLetBinding.java
│   │   │   │           │   │   │   ├── RPsiLetImpl.java
│   │   │   │           │   │   │   ├── RPsiLiteralString.java
│   │   │   │           │   │   │   ├── RPsiLocalOpen.java
│   │   │   │           │   │   │   ├── RPsiLowerName.java
│   │   │   │           │   │   │   ├── RPsiLowerSymbol.java
│   │   │   │           │   │   │   ├── RPsiMacro.java
│   │   │   │           │   │   │   ├── RPsiMacroBody.java
│   │   │   │           │   │   │   ├── RPsiMacroName.java
│   │   │   │           │   │   │   ├── RPsiMethodCall.java
│   │   │   │           │   │   │   ├── RPsiMixinField.java
│   │   │   │           │   │   │   ├── RPsiModuleBinding.java
│   │   │   │           │   │   │   ├── RPsiModuleSignature.java
│   │   │   │           │   │   │   ├── RPsiMultiLineInterpolator.java
│   │   │   │           │   │   │   ├── RPsiObject.java
│   │   │   │           │   │   │   ├── RPsiObjectField.java
│   │   │   │           │   │   │   ├── RPsiOpenImpl.java
│   │   │   │           │   │   │   ├── RPsiOption.java
│   │   │   │           │   │   │   ├── RPsiOptionValue.java
│   │   │   │           │   │   │   ├── RPsiParameterDeclarationImpl.java
│   │   │   │           │   │   │   ├── RPsiParameterReference.java
│   │   │   │           │   │   │   ├── RPsiParameters.java
│   │   │   │           │   │   │   ├── RPsiPatternMatch.java
│   │   │   │           │   │   │   ├── RPsiPatternMatchBody.java
│   │   │   │           │   │   │   ├── RPsiPolyVariantConstraint.java
│   │   │   │           │   │   │   ├── RPsiRecord.java
│   │   │   │           │   │   │   ├── RPsiRecordFieldImpl.java
│   │   │   │           │   │   │   ├── RPsiScopedExpr.java
│   │   │   │           │   │   │   ├── RPsiSignatureImpl.java
│   │   │   │           │   │   │   ├── RPsiSignatureItemImpl.java
│   │   │   │           │   │   │   ├── RPsiStruct.java
│   │   │   │           │   │   │   ├── RPsiSwitch.java
│   │   │   │           │   │   │   ├── RPsiSwitchBody.java
│   │   │   │           │   │   │   ├── RPsiTag.java
│   │   │   │           │   │   │   ├── RPsiTagBody.java
│   │   │   │           │   │   │   ├── RPsiTagClose.java
│   │   │   │           │   │   │   ├── RPsiTagProperty.java
│   │   │   │           │   │   │   ├── RPsiTagPropertyValue.java
│   │   │   │           │   │   │   ├── RPsiTagStart.java
│   │   │   │           │   │   │   ├── RPsiTernary.java
│   │   │   │           │   │   │   ├── RPsiTokenStub.java
│   │   │   │           │   │   │   ├── RPsiTry.java
│   │   │   │           │   │   │   ├── RPsiTryBody.java
│   │   │   │           │   │   │   ├── RPsiTryHandler.java
│   │   │   │           │   │   │   ├── RPsiTryHandlerBody.java
│   │   │   │           │   │   │   ├── RPsiTuple.java
│   │   │   │           │   │   │   ├── RPsiTypeBinding.java
│   │   │   │           │   │   │   ├── RPsiTypeConstraint.java
│   │   │   │           │   │   │   ├── RPsiTypeImpl.java
│   │   │   │           │   │   │   ├── RPsiUnit.java
│   │   │   │           │   │   │   ├── RPsiUnpack.java
│   │   │   │           │   │   │   ├── RPsiUpperSymbol.java
│   │   │   │           │   │   │   ├── RPsiUpperTagName.java
│   │   │   │           │   │   │   ├── RPsiValImpl.java
│   │   │   │           │   │   │   ├── RPsiVariantDeclaration.java
│   │   │   │           │   │   │   └── RPsiWhile.java
│   │   │   │           │   │   ├── ocamlgrammar/
│   │   │   │           │   │   │   ├── RPsiGrammarArgument.java
│   │   │   │           │   │   │   ├── RPsiGrammarGrammar.java
│   │   │   │           │   │   │   ├── RPsiGrammarTactic.java
│   │   │   │           │   │   │   └── RPsiGrammarVernac.java
│   │   │   │           │   │   ├── ocamllex/
│   │   │   │           │   │   │   ├── RPsiLexLet.java
│   │   │   │           │   │   │   ├── RPsiLexPattern.java
│   │   │   │           │   │   │   └── RPsiLexRule.java
│   │   │   │           │   │   └── ocamlyacc/
│   │   │   │           │   │       ├── RPsiYaccDeclaration.java
│   │   │   │           │   │       ├── RPsiYaccHeader.java
│   │   │   │           │   │       ├── RPsiYaccRule.java
│   │   │   │           │   │       └── RPsiYaccRuleBody.java
│   │   │   │           │   ├── stub/
│   │   │   │           │   │   ├── OclFileStub.java
│   │   │   │           │   │   ├── OclStubBasedElementTypes.java
│   │   │   │           │   │   ├── PsiExceptionStub.java
│   │   │   │           │   │   ├── PsiExternalStub.java
│   │   │   │           │   │   ├── PsiIncludeStub.java
│   │   │   │           │   │   ├── PsiLetStub.java
│   │   │   │           │   │   ├── PsiModuleStub.java
│   │   │   │           │   │   ├── PsiObjectFieldStub.java
│   │   │   │           │   │   ├── PsiOpenStub.java
│   │   │   │           │   │   ├── PsiParameterDeclarationStub.java
│   │   │   │           │   │   ├── PsiQualifiedNameStub.java
│   │   │   │           │   │   ├── PsiTypeStub.java
│   │   │   │           │   │   ├── PsiValStub.java
│   │   │   │           │   │   ├── PsiVariantDeclarationStub.java
│   │   │   │           │   │   ├── ResFileStub.java
│   │   │   │           │   │   ├── ResStubBasedElementTypes.java
│   │   │   │           │   │   ├── RmlFileStub.java
│   │   │   │           │   │   ├── RmlStubBasedElementTypes.java
│   │   │   │           │   │   ├── RsiClassMethodStub.java
│   │   │   │           │   │   ├── RsiClassStub.java
│   │   │   │           │   │   ├── RsiRecordFieldStub.java
│   │   │   │           │   │   └── type/
│   │   │   │           │   │       ├── ORStubElementType.java
│   │   │   │           │   │       ├── ORStubVersions.java
│   │   │   │           │   │       ├── OclFileStubElementType.java
│   │   │   │           │   │       ├── PsiExceptionStubElementType.java
│   │   │   │           │   │       ├── PsiExternalStubElementType.java
│   │   │   │           │   │       ├── PsiFunctorModuleStubElementType.java
│   │   │   │           │   │       ├── PsiIncludeStubElementType.java
│   │   │   │           │   │       ├── PsiInnerModuleStubElementType.java
│   │   │   │           │   │       ├── PsiLetStubElementType.java
│   │   │   │           │   │       ├── PsiModuleStubElementType.java
│   │   │   │           │   │       ├── PsiObjectFieldStubElementType.java
│   │   │   │           │   │       ├── PsiOpenStubElementType.java
│   │   │   │           │   │       ├── PsiParameterDeclarationStubElementType.java
│   │   │   │           │   │       ├── PsiTypeStubElementType.java
│   │   │   │           │   │       ├── PsiValStubElementType.java
│   │   │   │           │   │       ├── PsiVariantStubElementType.java
│   │   │   │           │   │       ├── RPsiClassMethodStubElementType.java
│   │   │   │           │   │       ├── RPsiClassStubElementType.java
│   │   │   │           │   │       ├── RPsiRecordFieldStubElementType.java
│   │   │   │           │   │       ├── ResFileStubElementType.java
│   │   │   │           │   │       ├── RmlFileStubElementType.java
│   │   │   │           │   │       └── SerializerUtil.java
│   │   │   │           │   └── type/
│   │   │   │           │       ├── ORCompositeElementType.java
│   │   │   │           │       ├── ORCompositePsiElement.java
│   │   │   │           │       ├── ORCompositeType.java
│   │   │   │           │       ├── ORLangTypes.java
│   │   │   │           │       ├── ORTokenElementType.java
│   │   │   │           │       ├── ORTypes.java
│   │   │   │           │       └── ORTypesUtil.java
│   │   │   │           ├── doc/
│   │   │   │           │   ├── ORDocConverter.java
│   │   │   │           │   ├── ocaml/
│   │   │   │           │   │   ├── ODocLexer.java
│   │   │   │           │   │   ├── OclDocConverter.java
│   │   │   │           │   │   ├── OclDocLanguage.java
│   │   │   │           │   │   ├── OclDocTypes.java
│   │   │   │           │   │   └── odoc.flex
│   │   │   │           │   └── reason/
│   │   │   │           │       ├── RDocLexer.java
│   │   │   │           │       ├── RmlDocConverter.java
│   │   │   │           │       ├── RmlDocLanguage.java
│   │   │   │           │       ├── RmlDocTypes.java
│   │   │   │           │       └── rdoc.flex
│   │   │   │           ├── dune/
│   │   │   │           │   ├── Dune.flex
│   │   │   │           │   ├── DuneASTFactory.java
│   │   │   │           │   ├── DuneLanguage.java
│   │   │   │           │   ├── DuneLexer.java
│   │   │   │           │   ├── DuneParser.java
│   │   │   │           │   ├── DuneParserDefinition.java
│   │   │   │           │   └── DuneTypes.java
│   │   │   │           ├── extra/
│   │   │   │           │   ├── OclP4Language.java
│   │   │   │           │   └── OclP4ParserDefinition.java
│   │   │   │           ├── ocaml/
│   │   │   │           │   ├── OCaml.flex
│   │   │   │           │   ├── OCamlLexer.java
│   │   │   │           │   ├── OclASTFactory.java
│   │   │   │           │   ├── OclLanguage.java
│   │   │   │           │   ├── OclLexer.java
│   │   │   │           │   ├── OclParser.java
│   │   │   │           │   ├── OclParserDefinition.java
│   │   │   │           │   ├── OclSafeParserDefinition.java
│   │   │   │           │   └── OclTypes.java
│   │   │   │           ├── ocamlgrammar/
│   │   │   │           │   ├── OclGrammarAstFactory.java
│   │   │   │           │   ├── OclGrammarElementType.java
│   │   │   │           │   ├── OclGrammarLanguage.java
│   │   │   │           │   ├── OclGrammarLexer.java
│   │   │   │           │   ├── OclGrammarParser.java
│   │   │   │           │   ├── OclGrammarParserDefinition.java
│   │   │   │           │   ├── OclGrammarTypes.java
│   │   │   │           │   └── mlg.flex
│   │   │   │           ├── ocamllex/
│   │   │   │           │   ├── OclLexAstFactory.java
│   │   │   │           │   ├── OclLexElementType.java
│   │   │   │           │   ├── OclLexLanguage.java
│   │   │   │           │   ├── OclLexLexer.java
│   │   │   │           │   ├── OclLexParser.java
│   │   │   │           │   ├── OclLexParserDefinition.java
│   │   │   │           │   ├── OclLexTypes.java
│   │   │   │           │   └── mll.flex
│   │   │   │           ├── ocamlyacc/
│   │   │   │           │   ├── OclYaccAstFactory.java
│   │   │   │           │   ├── OclYaccElementType.java
│   │   │   │           │   ├── OclYaccLanguage.java
│   │   │   │           │   ├── OclYaccLexer.java
│   │   │   │           │   ├── OclYaccParser.java
│   │   │   │           │   ├── OclYaccParserDefinition.java
│   │   │   │           │   ├── OclYaccTypes.java
│   │   │   │           │   └── mly.flex
│   │   │   │           ├── reason/
│   │   │   │           │   ├── ReasonML.flex
│   │   │   │           │   ├── ReasonMLLexer.java
│   │   │   │           │   ├── RmlASTFactory.java
│   │   │   │           │   ├── RmlLanguage.java
│   │   │   │           │   ├── RmlLexer.java
│   │   │   │           │   ├── RmlParser.java
│   │   │   │           │   ├── RmlParserDefinition.java
│   │   │   │           │   ├── RmlSafeParserDefinition.java
│   │   │   │           │   └── RmlTypes.java
│   │   │   │           └── rescript/
│   │   │   │               ├── ResASTFactory.java
│   │   │   │               ├── ResFlexLexer.java
│   │   │   │               ├── ResLanguage.java
│   │   │   │               ├── ResLexer.java
│   │   │   │               ├── ResParser.java
│   │   │   │               ├── ResParserDefinition.java
│   │   │   │               ├── ResSafeParserDefinition.java
│   │   │   │               ├── ResTypes.java
│   │   │   │               └── Rescript.flex
│   │   │   └── jpsplugin/
│   │   │       └── com/
│   │   │           └── reason/
│   │   │               ├── AutoDeletingTempFile.java
│   │   │               ├── FileUtil.java
│   │   │               ├── Interrupted.java
│   │   │               ├── Joiner.java
│   │   │               ├── Log.java
│   │   │               ├── OCamlExecutable.java
│   │   │               ├── OClSourcesOrderRootTypeUIFactory.java
│   │   │               ├── ORNotification.java
│   │   │               ├── ORProcessTerminated.java
│   │   │               ├── OclSourcesOrderRootType.java
│   │   │               ├── Platform.java
│   │   │               ├── Streams.java
│   │   │               ├── StringUtil.java
│   │   │               ├── WGet.java
│   │   │               ├── sdk/
│   │   │               │   └── SdkDownloader.java
│   │   │               └── wizard/
│   │   │                   ├── OCamlModuleWizardStep.java
│   │   │                   └── WizardStepForm.form
│   │   └── resources/
│   │       ├── META-INF/
│   │       │   ├── java-deps.xml
│   │       │   ├── js-deps.xml
│   │       │   └── plugin.xml
│   │       ├── fileTemplates/
│   │       │   ├── OCaml Interface.mli.ft
│   │       │   ├── OCaml Module.ml.ft
│   │       │   ├── Reason Interface.rei.ft
│   │       │   ├── Reason Module.re.ft
│   │       │   ├── Rescript Interface.resi.ft
│   │       │   └── Rescript Module.res.ft
│   │       ├── icons/
│   │       │   ├── reasonml-icon-file.xcf
│   │       │   └── reasonml-icon.xcf
│   │       ├── intentionDescriptions/
│   │       │   ├── ExpandLocalOpenIntention/
│   │       │   │   ├── after.re.template
│   │       │   │   ├── before.re.template
│   │       │   │   └── description.html
│   │       │   └── FunctionBracesIntention/
│   │       │       ├── after.re.template
│   │       │       ├── before.re.template
│   │       │       └── description.html
│   │       └── liveTemplates/
│   │           ├── OCaml.xml
│   │           ├── Reason.xml
│   │           └── Rescript.xml
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── reason/
│       │           ├── FileHelperTest.java
│       │           ├── comp/
│       │           │   ├── bs/
│       │           │   │   ├── BsConfigReaderTest.java
│       │           │   │   ├── BsLineProcessorTest.java
│       │           │   │   ├── NinjaTest.java
│       │           │   │   └── ResConfigReaderTest.java
│       │           │   ├── dune/
│       │           │   │   └── DuneOutputAnalyzerTest.java
│       │           │   ├── esy/
│       │           │   │   └── EsyPackageJsonTest.java
│       │           │   ├── ocaml/
│       │           │   │   └── OpamProcessTest.java
│       │           │   └── rescript/
│       │           │       ├── RescriptOutputAnalyzerTest.java
│       │           │       └── error-syntax.txt
│       │           ├── hints/
│       │           │   └── RincewindTest.java
│       │           ├── ide/
│       │           │   ├── ORBasePlatformTestCase.java
│       │           │   ├── ORFileUtilsTest.java
│       │           │   ├── RenameLowerTest.java
│       │           │   ├── RenameUpper_OCL_Test.java
│       │           │   ├── RenameUpper_RES_Test.java
│       │           │   ├── RenameUpper_RML_Test.java
│       │           │   ├── TypeConversionOclTest.java
│       │           │   ├── comment/
│       │           │   │   └── OclCommenterTest.java
│       │           │   ├── completion/
│       │           │   │   ├── CommentCompletion_OCL_Test.java
│       │           │   │   ├── CommentCompletion_RES_Test.java
│       │           │   │   ├── CommentCompletion_RML_Test.java
│       │           │   │   ├── DotCompletion_OCL_Test.java
│       │           │   │   ├── DotCompletion_RES_Test.java
│       │           │   │   ├── DotCompletion_RML_Test.java
│       │           │   │   ├── FreeCompletion_OCL_Test.java
│       │           │   │   ├── FreeCompletion_RES_Test.java
│       │           │   │   ├── FreeCompletion_RML_Test.java
│       │           │   │   ├── JsObjectCompletion_RES_Test.java
│       │           │   │   ├── JsObjectCompletion_RML_Test.java
│       │           │   │   ├── Jsx3NameCompletion_RES_Test.java
│       │           │   │   ├── Jsx3NameCompletion_RML_Test.java
│       │           │   │   ├── Jsx3PropertyCompletion_RES_Test.java
│       │           │   │   ├── Jsx3PropertyCompletion_RML_Test.java
│       │           │   │   ├── Jsx4PropertyCompletion_RES_Test.java
│       │           │   │   ├── KeywordCompletion_OCL_Test.java
│       │           │   │   ├── KeywordCompletion_RES_Test.java
│       │           │   │   ├── KeywordCompletion_RML_Test.java
│       │           │   │   ├── ModuleCompletion_OCL_Test.java
│       │           │   │   ├── ModuleCompletion_RES_Test.java
│       │           │   │   ├── ModuleCompletion_RML_Test.java
│       │           │   │   ├── RecordCompletion_OCL_Test.java
│       │           │   │   ├── RecordCompletion_RES_Test.java
│       │           │   │   └── RecordCompletion_RML_Test.java
│       │           │   ├── console/
│       │           │   │   ├── OCamlMessages.java
│       │           │   │   ├── ocaml/
│       │           │   │   │   └── OCamlConsoleFilterTest.java
│       │           │   │   └── rescript/
│       │           │   │       └── RescriptConsoleFilterTest.java
│       │           │   ├── docs/
│       │           │   │   ├── ORDocumentationProviderTest.java
│       │           │   │   ├── QuickDocRESTest.java
│       │           │   │   ├── QuickDocRMLTest.java
│       │           │   │   ├── ShowDocOCLTest.java
│       │           │   │   ├── ShowDocRESTest.java
│       │           │   │   └── ShowDocRMLTest.java
│       │           │   ├── go/
│       │           │   │   ├── GotoImplementationOCLTest.java
│       │           │   │   ├── GotoImplementationRESTest.java
│       │           │   │   ├── GotoImplementationRMLTest.java
│       │           │   │   ├── LineMarkerProviderOCLTest.java
│       │           │   │   ├── LineMarkerProviderRESTest.java
│       │           │   │   └── LineMarkerProviderRMLTest.java
│       │           │   ├── hints/
│       │           │   │   ├── OclParameterInfoHandlerTest.java
│       │           │   │   ├── ResParameterInfoHandlerTest.java
│       │           │   │   └── RmlParameterInfoHandlerTest.java
│       │           │   ├── intention/
│       │           │   │   ├── ExpandLocalOpenIntentionRMLTest.java
│       │           │   │   ├── FunctionBracesIntentionRESTest.java
│       │           │   │   └── FunctionBracesIntentionRMLTest.java
│       │           │   ├── search/
│       │           │   │   └── reference/
│       │           │   │       ├── FindLIdentUsagesOCLTest.java
│       │           │   │       ├── FindLIdentUsagesRESTest.java
│       │           │   │       ├── FindLIdentUsagesRMLTest.java
│       │           │   │       ├── FindUIdentUsagesOCLTest.java
│       │           │   │       ├── FindUIdentUsagesRESTest.java
│       │           │   │       ├── FindUIdentUsagesRMLTest.java
│       │           │   │       ├── ORModuleResolutionPsiGist_OCL_Test.java
│       │           │   │       ├── ORModuleResolutionPsiGist_RES_Test.java
│       │           │   │       ├── ORModuleResolutionPsiGist_RML_Test.java
│       │           │   │       ├── ResolveJsxPropertyElementRESTest.java
│       │           │   │       ├── ResolveJsxPropertyElementRMLTest.java
│       │           │   │       ├── ResolveJsxTagElementRESTest.java
│       │           │   │       ├── ResolveJsxTagElementRMLTest.java
│       │           │   │       ├── ResolveLowerElement_OCL_Test.java
│       │           │   │       ├── ResolveLowerElement_RES_Test.java
│       │           │   │       ├── ResolveLowerElement_RML_Test.java
│       │           │   │       ├── ResolveUpperElement_OCL_Test.java
│       │           │   │       ├── ResolveUpperElement_RES_Test.java
│       │           │   │       └── ResolveUpperElement_RML_Test.java
│       │           │   └── structure/
│       │           │       ├── ProjectStructure_DUNE_Test.java
│       │           │       ├── ProjectStructure_OCL_Test.java
│       │           │       └── ValPresentation_OCL_Test.java
│       │           └── lang/
│       │               ├── BaseParsingTestCase.java
│       │               ├── core/
│       │               │   ├── FileBaseTest.java
│       │               │   ├── ORSignatureTest.java
│       │               │   └── ORUtilTest.java
│       │               ├── doc/
│       │               │   ├── ocaml/
│       │               │   │   └── OclDocConverterTest.java
│       │               │   └── reason/
│       │               │       └── RmlDocConverterTest.java
│       │               ├── dune/
│       │               │   ├── CommentParsingTest.java
│       │               │   ├── DuneParsingTestCase.java
│       │               │   ├── DuneStanzaParsingTest.java
│       │               │   ├── DuneVarParsingTest.java
│       │               │   └── SExprParsingTest.java
│       │               ├── ocaml/
│       │               │   ├── AndParsingTest.java
│       │               │   ├── AnnotationParsingTest.java
│       │               │   ├── AssertParsingTest.java
│       │               │   ├── BeginParsingTest.java
│       │               │   ├── ChainingParsingTest.java
│       │               │   ├── ClassParsingTest.java
│       │               │   ├── CommentParsingTest.java
│       │               │   ├── DirectiveParsingTest.java
│       │               │   ├── ExceptionParsingTest.java
│       │               │   ├── ExpressionsParsingTest.java
│       │               │   ├── ExternalParsingTest.java
│       │               │   ├── FirstClassModuleParsingTest.java
│       │               │   ├── FunctionCallParsingTest.java
│       │               │   ├── FunctionParsingTest.java
│       │               │   ├── FunctorCallParsingTest.java
│       │               │   ├── FunctorParsingTest.java
│       │               │   ├── IfParsingTest.java
│       │               │   ├── ImmediateObjectParsingTest.java
│       │               │   ├── IncludeParsingTest.java
│       │               │   ├── LetParsingTest.java
│       │               │   ├── LocalOpenParsingTest.java
│       │               │   ├── LoopParsingTest.java
│       │               │   ├── MatchParsingTest.java
│       │               │   ├── ModuleParsingTest.java
│       │               │   ├── OclParsingTestCase.java
│       │               │   ├── OpenParsingTest.java
│       │               │   ├── OperatorParsingTest.java
│       │               │   ├── PolyVariantParsingTest.java
│       │               │   ├── RecordParsingTest.java
│       │               │   ├── SamplesParsingTest.java
│       │               │   ├── SignatureParsingTest.java
│       │               │   ├── TryWithParsingTest.java
│       │               │   ├── TypeParsingTest.java
│       │               │   ├── ValParsingTest.java
│       │               │   ├── VariantCallParsingTest.java
│       │               │   └── VariantDeclarationParsingTest.java
│       │               ├── reason/
│       │               │   ├── AndParsingTest.java
│       │               │   ├── AnnotationParsingTest.java
│       │               │   ├── AssertParsingTest.java
│       │               │   ├── ClassParsingTest.java
│       │               │   ├── CommentTest.java
│       │               │   ├── ComponentJsx3ParsingTest.java
│       │               │   ├── ExceptionParsingTest.java
│       │               │   ├── ExternalParsingTest.java
│       │               │   ├── FirstClassModuleParsingTest.java
│       │               │   ├── FunParsingTest.java
│       │               │   ├── FunctionCallParsingTest.java
│       │               │   ├── FunctionParsingTest.java
│       │               │   ├── FunctorCallParsingTest.java
│       │               │   ├── FunctorParsingTest.java
│       │               │   ├── IfParsingTest.java
│       │               │   ├── IncludeParsingTest.java
│       │               │   ├── JsObjectParsingTest.java
│       │               │   ├── JsxParsingTest.java
│       │               │   ├── LetParsingTest.java
│       │               │   ├── LocalOpenParsingTest.java
│       │               │   ├── MacroParsingTest.java
│       │               │   ├── ModuleParsingTest.java
│       │               │   ├── OpenParsingTest.java
│       │               │   ├── PolyVariantParsingTest.java
│       │               │   ├── PolyVariantTest.java
│       │               │   ├── RecordParsingTest.java
│       │               │   ├── RmlParsingTestCase.java
│       │               │   ├── SamplesParsingTest.java
│       │               │   ├── SignatureParsingTest.java
│       │               │   ├── StringTemplateParsingTest.java
│       │               │   ├── SwitchParsingTest.java
│       │               │   ├── TryParsingTest.java
│       │               │   ├── TypeParsingTest.java
│       │               │   ├── VariantCallParsingTest.java
│       │               │   └── VariantDeclarationParsingTest.java
│       │               └── rescript/
│       │                   ├── AndParsingTest.java
│       │                   ├── AnnotationParsingTest.java
│       │                   ├── AssertParsingTest.java
│       │                   ├── ChainingParsingTest.java
│       │                   ├── CommentTest.java
│       │                   ├── ComponentJsx3ParsingTest.java
│       │                   ├── ExceptionParsingTest.java
│       │                   ├── ExpressionChainingParsingTest.java
│       │                   ├── ExternalParsingTest.java
│       │                   ├── FileFromJarTest.java
│       │                   ├── FirstClassModuleParsingTest.java
│       │                   ├── FunctionCallParsingTest.java
│       │                   ├── FunctionParsingTest.java
│       │                   ├── FunctorCallParsingTest.java
│       │                   ├── FunctorParsingTest.java
│       │                   ├── IfParsingTest.java
│       │                   ├── IncludeParsingTest.java
│       │                   ├── JsObjectParsingTest.java
│       │                   ├── JsxParsingTest.java
│       │                   ├── LetParsingTest.java
│       │                   ├── LocalOpenParsingTest.java
│       │                   ├── MacroParsingTest.java
│       │                   ├── ModuleParsingTest.java
│       │                   ├── OpenParsingTest.java
│       │                   ├── PolyVariantParsingTest.java
│       │                   ├── RecordParsingTest.java
│       │                   ├── ResParsingTestCase.java
│       │                   ├── SignatureParsingTest.java
│       │                   ├── StringTemplateParsingTest.java
│       │                   ├── SwitchParsingTest.java
│       │                   ├── TryParsingTest.java
│       │                   ├── TypeParsingTest.java
│       │                   ├── VariantCallParsingTest.java
│       │                   └── VariantDeclarationParsingTest.java
│       └── testData/
│           ├── com/
│           │   └── reason/
│           │       ├── bs/
│           │       │   ├── bsplatform.json
│           │       │   ├── comments.json
│           │       │   ├── deps.json
│           │       │   ├── issue_214.json
│           │       │   ├── ninja-rescript.build
│           │       │   ├── src_array.json
│           │       │   ├── src_object.json
│           │       │   └── src_string.json
│           │       ├── esy/
│           │       │   └── package.json
│           │       └── lang/
│           │           ├── ReactDOM.res
│           │           ├── component/
│           │           │   ├── AnotherComp.re
│           │           │   ├── CompMessage.res
│           │           │   ├── Component.re
│           │           │   ├── Inner.re
│           │           │   └── Inner.res
│           │           ├── jsxDOMU.res
│           │           ├── pervasives.ml
│           │           └── samples/
│           │               ├── belt_Map.ml
│           │               ├── stream.ml
│           │               └── toto.re
│           ├── icu4j/
│           │   └── mt.res
│           └── ns/
│               └── bsconfig.json
└── website/
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── docs/
    │   ├── Other/
    │   │   ├── faq.md
    │   │   └── live-templates.md
    │   ├── build-tools/
    │   │   ├── _category_.json
    │   │   ├── bucklescript.md
    │   │   ├── dune.md
    │   │   └── esy.md
    │   ├── contributing/
    │   │   ├── _category_.json
    │   │   ├── how-to-contribute.md
    │   │   ├── plugin-architecture.md
    │   │   ├── plugin-development.md
    │   │   └── resources.md
    │   ├── intro.md
    │   ├── language-support/
    │   │   ├── _category_.json
    │   │   ├── ocaml.md
    │   │   ├── reason.md
    │   │   └── rescript.md
    │   └── project-types.md
    ├── docusaurus.config.js
    ├── package.json
    ├── sidebars.js
    ├── src/
    │   ├── components/
    │   │   └── HomepageFeatures/
    │   │       ├── index.js
    │   │       └── styles.module.css
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       ├── index.js
    │       └── index.module.css
    └── static/
        ├── .nojekyll
        └── img/
            └── arch/
                ├── fake_module.excalidraw
                ├── parser.excalidraw
                ├── psihier.excalidraw
                ├── stub_keys.excalidraw
                ├── tokens.xcf
                └── types.excalidraw

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.md
================================================
github: giraud
custom: "https://www.paypal.com/paypalme/rvgiraud"


================================================
FILE: .github/FUNDING.yml
================================================
github: giraud
custom: "https://www.paypal.com/paypalme/rvgiraud"


================================================
FILE: .github/workflows/gradle.yml
================================================
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle

name: Build Status

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v2
      with:
        distribution: 'zulu'
        java-version: '17'
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build
    - name: Test with Gradle
      run: ./gradlew test


================================================
FILE: .github/workflows/website-deploy.yml
================================================
name: Deploy Website

on:
  pull_request:
    branches: [master]
  push:
    branches: [master]

jobs:
  checks:
    if: github.event_name != 'push'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: '18.x'
      - name: Test Build
        run: |
          cd website
          if [ -e yarn.lock ]; then
          yarn install --frozen-lockfile
          elif [ -e package-lock.json ]; then
          npm ci
          else
          npm i
          fi
          npm run build
  gh-release:
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: '18.x'
      - name: Add key to allow access to repository
        env:
          SSH_AUTH_SOCK: /tmp/ssh_agent.sock
        run: |
          mkdir -p ~/.ssh
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          echo "${{ secrets.GH_PAGES_DEPLOY }}" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          cat <<EOT >> ~/.ssh/config
          Host github.com
          HostName github.com
          IdentityFile ~/.ssh/id_rsa
          EOT
      - name: Release to GitHub Pages
        env:
          USE_SSH: true
          GIT_USER: git
        run: |
          git config --global user.email "actions@github.com"
          git config --global user.name "gh-actions"
          cd website
          if [ -e yarn.lock ]; then
          yarn install --frozen-lockfile
          elif [ -e package-lock.json ]; then
          npm ci
          else
          npm i
          fi
          npx docusaurus deploy


================================================
FILE: .gitignore
================================================
.gradle/
!.idea/
.idea/*
.intellijPlatform/*
!.idea/codeStyles/
!.idea/google-java-format.xml
out/
build/
*.iml
idea-flex*.skeleton
jflex-*.jar
jps-plugin/build
jps-plugin/out


================================================
FILE: CHANGELOG.md
================================================
# Changelog

> **Tags:**
> - :boom:       [Breaking Change]
> - :rocket:     [New Feature]
> - :bug:        [Bug Fix]
> - :memo:       [Documentation]
> - :house:      [Internal]
> - :nail_care:  [Polish]

(_Tags are copied from [babel](https://github.com/babel/babel/blob/master/CHANGELOG.md)_)
                
# unreleased

**NOTE**: minimal supported version is **2024.3**

# 0.131 - 2025/09/01

- :bug: [#511](https://github.com/giraud/reasonml-idea-plugin/issues/511) Fix infinite indexing (parameters)

# 0.130 - 2025/07/10

- :bug: Fix lower element resolution with typed parameter
- :bug: ![n] Fix variant declaration with @as
- :bug: Parse warning message in output analyzer
- :bug: Fix anonymous function declaration in option
- :bug: Fix constraints of module signature
- :bug: Fix log level

# 0.129 - 2025/04/14

- :bug: [#504](https://github.com/giraud/reasonml-idea-plugin/issues/504) Fix StackOverflow exception
- :bug: [#476](https://github.com/giraud/reasonml-idea-plugin/issues/476) Better indexing of recursive declarations

# 0.128 - 2025/02/18

- :bug: [#499](https://github.com/giraud/reasonml-idea-plugin/issues/499) Find usages of destructured elements
- :bug: [#498](https://github.com/giraud/reasonml-idea-plugin/issues/498) Parser error with patterns and parenthesis
- :bug: [#497](https://github.com/giraud/reasonml-idea-plugin/issues/497) Fix include inlined module
- :bug: [#496](https://github.com/giraud/reasonml-idea-plugin/issues/496) Improve free completion of poly variants
- :house: Remove 'function' keyword in Rescript lexer

# 0.127 - 2025/01/14

- :bug: [#494](https://github.com/giraud/reasonml-idea-plugin/issues/494) JsonFileType exception in 2024.3 
- :bug: ![o] [#492](https://github.com/giraud/reasonml-idea-plugin/issues/492) Ocaml parser error when using #end 
- :bug: [#490](https://github.com/giraud/reasonml-idea-plugin/issues/490) Object representation in structure panel 
- :bug: [#246](https://github.com/giraud/reasonml-idea-plugin/issues/246) Input in priority in autocomplete list
 
**NOTE**: minimal supported version is **2024.1**

# 0.126 - 2024/11/19

- :rocket: [#485](https://github.com/giraud/reasonml-idea-plugin/issues/485) Gutter icons on module signatures
- :bug: [#487](https://github.com/giraud/reasonml-idea-plugin/issues/487) Ocaml setup on Mac OS (same than 480)
- :bug: [#480](https://github.com/giraud/reasonml-idea-plugin/issues/480) No Opam switch detection
- :house: update platform-gradle-plugin to v2

# 0.125 - 2024/08/26

**NOTE**: Added support for version **2024.3**

- :bug: [#475](https://github.com/giraud/reasonml-idea-plugin/issues/475) Stack overflow 
- :rocket: [#473](https://github.com/giraud/reasonml-idea-plugin/issues/473) Enhancement: Structure panel: provide a filter setting to select whether to show variables
- :bug: ![o] [#469](https://github.com/giraud/reasonml-idea-plugin/issues/469) '"' in comments confuses comment recognition
- :bug: [#465](https://github.com/giraud/reasonml-idea-plugin/issues/465) Exception for action 'add braces to blockless function'
- :nail_care: Fix incorrect file icons

# 0.124 - 2024/05/02

- parsers updates, resolution updates
- Completion of js objects in Rescript
- Remove violations fonud by plugin verifier

# 0.123 - 2024/03/28

- :bug: [#461](https://github.com/giraud/reasonml-idea-plugin/issues/461) Parameter signature element incorrectly referenced
- :bug: [#460](https://github.com/giraud/reasonml-idea-plugin/issues/460) Keywords used as identifier
- :bug: [#459](https://github.com/giraud/reasonml-idea-plugin/issues/459) Convert to light services
- :bug: ![n] [#458](https://github.com/giraud/reasonml-idea-plugin/issues/458) Pipe first operator chaining not correctly parsed in rescript
- :bug: ![o] [#456](https://github.com/giraud/reasonml-idea-plugin/issues/456) OCaml function parameters incorrectly parsed if using tuples
- :bug: [#455](https://github.com/giraud/reasonml-idea-plugin/issues/455) Color scheme improvements request for records and functions (OCaml)
- :bug: [#453](https://github.com/giraud/reasonml-idea-plugin/issues/453) Completion of records when using mixin
- :bug: [#450](https://github.com/giraud/reasonml-idea-plugin/issues/450) Can’t rename a module

## 0.122 - 2024/03/11

- :bug: [#454](https://github.com/giraud/reasonml-idea-plugin/issues/454) Duplicate definitions for globally opened modules in completion
- :bug: [#452](https://github.com/giraud/reasonml-idea-plugin/issues/452) Resolve unpacked module
- :bug: ![n] [#451](https://github.com/giraud/reasonml-idea-plugin/issues/451) Module incorrectly parsed as functor in Rescript
- :bug: [#449](https://github.com/giraud/reasonml-idea-plugin/issues/449) Navigation icon in the gutter referencing wrong module

## 0.121 - 2024/02/02

- :bug: ![o] [#445](https://github.com/giraud/reasonml-idea-plugin/issues/445) Fix jump to implementation
- :bug: ![o] [#442](https://github.com/giraud/reasonml-idea-plugin/issues/442) Incorrect parsing of 'IN' in pattern matching
- :bug: ![o] [#441](https://github.com/giraud/reasonml-idea-plugin/issues/441) Incorrect parsing of pattern matching

## 0.120 - 2024/01/11

**NOTE**: minimal supported version is **2023.1**

- :bug: ![o] [#444](https://github.com/giraud/reasonml-idea-plugin/issues/444) Fix OCaml parser for 'inherit'
- :bug: ![o] [#440](https://github.com/giraud/reasonml-idea-plugin/issues/440) Incorrect parsing of record (OCaml)
- :bug: [#439](https://github.com/giraud/reasonml-idea-plugin/issues/439) Do not display 'let _' in structure panel
- :bug: ![n] [#438](https://github.com/giraud/reasonml-idea-plugin/issues/438) Resolution of js object field references in Rescript
- :bug: [#415](https://github.com/giraud/reasonml-idea-plugin/issues/415) Remove one level deep in structure view

## 0.119 - 2023/12/06

**NOTE**: minimal supported version is **2022.3**

- :bug: [#437](https://github.com/giraud/reasonml-idea-plugin/issues/437) Incorrect language injection in macro
- :house: Removing some TODOs in code
- :house: Fix cast exception in ORModuleContributor
- :house: Fix some parser errors 

## 0.118.2 - 2023/11/21

- :rocket: Support for JSX 4
- :bug: [#436](https://github.com/giraud/reasonml-idea-plugin/issues/436) Macro parsing error
- :bug: [#434](https://github.com/giraud/reasonml-idea-plugin/issues/435) Rescript 11 deprecate bsconfig.json, wants rescript.json
- :bug: [#434](https://github.com/giraud/reasonml-idea-plugin/issues/434) Update rescript keywords
- :bug: [#433](https://github.com/giraud/reasonml-idea-plugin/issues/433) Gutter icon in ml file pointing to mli file disappears when it shouldn't
- :bug: [#430](https://github.com/giraud/reasonml-idea-plugin/issues/430) No SDK created when importing a dune project
- :bug: [#423](https://github.com/giraud/reasonml-idea-plugin/issues/423) Incorrect parsing when 'ref' is used as identifier

## 0.117.1 - 2023/09/11

- :bug: [#429](https://github.com/giraud/reasonml-idea-plugin/issues/429) Structure panel shows "Unknown presentation ..." for "module X : sig ..."
- :bug: [#428](https://github.com/giraud/reasonml-idea-plugin/issues/428) Webstorm error: No display name specified in plugin descriptor...
- :bug: [#427](https://github.com/giraud/reasonml-idea-plugin/issues/427) Preview not working in 'find in files'
- :bug: [#425](https://github.com/giraud/reasonml-idea-plugin/issues/425) Structure panel Some variables have the icon indicating a function

## 0.116 - 2023/08/31

- :bug: [#426](https://github.com/giraud/reasonml-idea-plugin/issues/426) Module alias must be resolved for resolution (same file)
- :bug: ![n] [#424](https://github.com/giraud/reasonml-idea-plugin/issues/424) Incorrect ternary parsing in Rescript when using newline
- :bug: [#422](https://github.com/giraud/reasonml-idea-plugin/issues/422) Plugin "failed to save settings and has been disabled" in PyCharm
- :bug: ![o] [#421](https://github.com/giraud/reasonml-idea-plugin/issues/421) End of comments containing quotes not always detected
- :bug: ![r] ![n] [#418](https://github.com/giraud/reasonml-idea-plugin/issues/418) Globally opened modules don’t participate in autocomplete resolution

## 0.115 - 2023/08/22

**NOTE**: Added support for version **2023.2**

- :house: [#416](https://github.com/giraud/reasonml-idea-plugin/issues/416) Excessive CPU use
- :bug: ![o] [#409](https://github.com/giraud/reasonml-idea-plugin/issues/409) Wrong structure on let b = 1 = 1 in (OCaml)

## 0.114 - 2023/07/04

(!) Jfrog is no longer serving binaries for rincewind, URL is changed and you must upgrade your plugin to this revision 
if you want to continue using it (type annotations)

- :rocket: ![o] [#118](https://github.com/giraud/reasonml-idea-plugin/issues/118) Much better parsing of mlg files (ocaml injection, highlighting, folding)

## 0.113 - 2023/05/29

- :bug: ![n] [#414](https://github.com/giraud/reasonml-idea-plugin/issues/414) Extensible variant incorrectly parsed in Rescript
- :bug: ![n] [#413](https://github.com/giraud/reasonml-idea-plugin/issues/413) Unpack is a keyword in rescript
- :bug: ![o] [#412](https://github.com/giraud/reasonml-idea-plugin/issues/412) Scope incorrectly parsed in mll file
- :bug: ![o] [#411](https://github.com/giraud/reasonml-idea-plugin/issues/411) Block comment operation (Ctrl-Shift-/) on highlighted text should not add a newline
- :bug: [#410](https://github.com/giraud/reasonml-idea-plugin/issues/410) Goto icons not shown between module and module type in same file
- :bug: ![o] [#409](https://github.com/giraud/reasonml-idea-plugin/issues/409) Wrong structure on let b = 1 = 1 in

## 0.112 - 2023/05/05

**NOTE**: minimal supported version is **2022.2**

- :bug: ![o] [#409](https://github.com/giraud/reasonml-idea-plugin/issues/409) Wrong structure on let b = 1 = 1 in
- :bug: ![o] [#408](https://github.com/giraud/reasonml-idea-plugin/issues/408) let ... in not shown in let a = ... structure
- :bug: ![o] [#407](https://github.com/giraud/reasonml-idea-plugin/issues/407) Support operator (non-alphanum) declarations
- :bug: ![o] [#406](https://github.com/giraud/reasonml-idea-plugin/issues/406) Faulty let open ... in parsing

## 0.111.1 - 2023/05/03
      
- :house: New reference resolution algorithm
- :bug: ![o] [#405](https://github.com/giraud/reasonml-idea-plugin/issues/405) Bad parsing of if in method
- :bug: [#350](https://github.com/giraud/reasonml-idea-plugin/issues/350) Use declaration documentation if no local documentation
- :bug: [#319](https://github.com/giraud/reasonml-idea-plugin/issues/319) "Comment with line comment" action incorrect for lines ending with "("
- :bug: ![o] [#174](https://github.com/giraud/reasonml-idea-plugin/issues/174) Compiler output listener needs a change for ocaml >= 4.09

## 0.110 - 2023/03/01

- :bug: ![n] [#399](https://github.com/giraud/reasonml-idea-plugin/issues/399) Rescript: incorrectly parse element as tag
- :bug: ![n] [#384](https://github.com/giraud/reasonml-idea-plugin/issues/384) Rescript compile errors not being displayed on code

## 0.109.2 - 2023/01/24

**NOTE**: minimal supported version is **2022.1**

- :bug: [#398](https://github.com/giraud/reasonml-idea-plugin/issues/398) Rescript format doesn’t respect UTF-8 encoding
- 0.109.1
  - :bug: [#392](https://github.com/giraud/reasonml-idea-plugin/issues/392) Attempting to open editorconfig causes IDE exception
  - :bug: [#391](https://github.com/giraud/reasonml-idea-plugin/issues/391) Dune comments are broken (lexer)
  - :bug: [#390](https://github.com/giraud/reasonml-idea-plugin/issues/390) Stub mismatch exceptions fixed

## 0.108 - 2022/12/01

**NOTE**: minimal supported version is **2021.3**

- :nail_care: Display dune-project fields in structure view
- :bug: [#389](https://github.com/giraud/reasonml-idea-plugin/issues/389) java.util.EmptyStackException
- :bug: [#358](https://github.com/giraud/reasonml-idea-plugin/issues/358) Incorrect resolution with module in pattern
- :bug: [#323](https://github.com/giraud/reasonml-idea-plugin/issues/323) Method declarations in .ml files should link to their implementations
- :house: ![o] Parse ternary if in OCaml
- :house: ![o] Fix illegal characters in dune files

## 0.107 - 2022/09/13

- :nail_care: fix missing color for fragment tag
- :bug: [#379](https://github.com/giraud/reasonml-idea-plugin/issues/379) Plugin crashes with NoClassDefFoundError in WebStorm during any attempt to autocomplete
- :house: reworked the parsers.

Some resources files (potentially in binary form) inside jars are using the .res extension, 
but there is no possibility to detect they are not rescript files.
The plugin now do not index files inside a jar archive. 

## 0.106.1 - 2022/05/02

- :bug: [#379](https://github.com/giraud/reasonml-idea-plugin/issues/379) Plugin crashes with NoClassDefFoundError in
  WebStorm during any attempt to autocomplete
- :bug: [#378](https://github.com/giraud/reasonml-idea-plugin/issues/378) NPE in macro
- :boom: :rocket: New opam configuration, should allow other IDE to use dune projects. Dune facet is removed.
- :bug: [#364](https://github.com/giraud/reasonml-idea-plugin/issues/364) StringIndexOutOfBoundsException

## 0.105.1 - 2021/11/12

Logo changed: it was too similar to the jetbrains plugins

- :bug: [#362](https://github.com/giraud/reasonml-idea-plugin/issues/362) Check invalid file before compile (rescript execution exception)
- :bug: ![o] [#360](https://github.com/giraud/reasonml-idea-plugin/issues/360) Should not display annotation signature
- :bug: [#359](https://github.com/giraud/reasonml-idea-plugin/issues/359) Doc not displayed for JSX component
- :house: prevent multiple compiler run in parallel
 
## 0.104 - 2021/10/14

- :bug: [#357](https://github.com/giraud/reasonml-idea-plugin/issues/357) Read access is allowed from inside read-action
- :bug: [#354](https://github.com/giraud/reasonml-idea-plugin/issues/354) Update spellCheck strategy
- :bug: ![r] [#353](https://github.com/giraud/reasonml-idea-plugin/issues/353) Interpolation incorrectly parsed
- :bug: [#352](https://github.com/giraud/reasonml-idea-plugin/issues/352) CMT viewer is broken
- :bug: [#327](https://github.com/giraud/reasonml-idea-plugin/issues/327) Use resolver for completions

## 0.103 - 2021/09/21

- :rocket: [#344](https://github.com/giraud/reasonml-idea-plugin/pull/344) Enabling spellchecker [@QuentinRa](https://github.com/QuentinRa)
- :rocket: ![o] [#343](https://github.com/giraud/reasonml-idea-plugin/pull/343) Adding live templates for OCaml by [@QuentinRa](https://github.com/QuentinRa)
- :bug: ![o] [#325](https://github.com/giraud/reasonml-idea-plugin/issues/325) Structure panel missing "pp_misc" for "let misc, pp_misc = ...". Gutter icon missing for pp_misc in mli file
- :bug: ![o] [#322](https://github.com/giraud/reasonml-idea-plugin/issues/322) Class types in .mli files should link to the corresponding definition in the .ml file
- :house: [#351](https://github.com/giraud/reasonml-idea-plugin/issues/351) Error annotator use detected compiler, not file language
- :house: update GitHub workflow to use Java 11
- :house: add qualified name index for classes
- :house: add line markers for Rescript
- :house: enable line markers in every IDE

## 0.102.2 - 2021/08/26

- :bug: ![o] [#340](https://github.com/giraud/reasonml-idea-plugin/issues/340) Items missing in structure panel after let ending with match (incorrect object parsing)
- :bug: ![o] [#329](https://github.com/giraud/reasonml-idea-plugin/issues/329) IllegalArgumentException: Not an OCaml node: Element(OCAML_LAZY_NODE)
- :house: remove jps-plugin.jar reference in plugin.xml

0.102.1

- :bug: [#333](https://github.com/giraud/reasonml-idea-plugin/issues/333) CLion crash, remove dependency to java only class
- :bug: [#157](https://github.com/giraud/reasonml-idea-plugin/issues/157) Update parameter info handler, only show known types

0.102

- :house: [#328](https://github.com/giraud/reasonml-idea-plugin/issues/328) Update Rescript parser to latest syntax
- :bug: [#326](https://github.com/giraud/reasonml-idea-plugin/issues/326) Structure panel shows "mutable" for mutable record fields rather than the field name
- :bug: [#318](https://github.com/giraud/reasonml-idea-plugin/issues/318) Rescript integration

## 0.101 - 2021/05/27

- :bug: [#303](https://github.com/giraud/reasonml-idea-plugin/issues/303) Incorrect resolution for record field
- :house: Reference resolution algorithm has been totally redesigned

## 0.100 - 2021/05/05

- :house: move to jfrog, bintray is no more available 
- :bug: [#317](https://github.com/giraud/reasonml-idea-plugin/issues/317) Belt.Array incorrectly resolved

# 0.99 - 2021/04/08

Version 0.99 supports the 2021.1 release.
 
- :bug: [#315](https://github.com/giraud/reasonml-idea-plugin/issues/315) ![r] insertion handler for JSX doesn't detect close tag
- :bug: [#190](https://github.com/giraud/reasonml-idea-plugin/issues/190) show nested function definitions in structure panel
- :bug: fix incorrect identification of optional parameter
- :nail_care: ![r] order jsx attributes, mandatory first

# 0.98.3 - 2021/04/06

- :bug: [#314](https://github.com/giraud/reasonml-idea-plugin/issues/314) missing item in structure panel (structural diff operator)
- :bug: [#313](https://github.com/giraud/reasonml-idea-plugin/issues/313) alphabetize opened/included modules in the structure panel

0.98.2

- :bug: [#312](https://github.com/giraud/reasonml-idea-plugin/issues/312) ![o] switch with optional is not parsed correctly
- :bug: [#311](https://github.com/giraud/reasonml-idea-plugin/issues/311) ![o] Missing icon in mli file
- :bug: [#310](https://github.com/giraud/reasonml-idea-plugin/issues/310) ![o] Missing types in structure panel after class definition

0.98.1

- :bug: [#293](https://github.com/giraud/reasonml-idea-plugin/issues/293) ![o] Better 'and' parsing
- :house: Better integration with yarn workspaces (v2?): search for node_modules in parent directory also

0.98

- :nail_care: ![o] highlight of ocaml annotation include arrobase
- :bug: [#309](https://github.com/giraud/reasonml-idea-plugin/issues/309) incorrectly parse infix operators
- :bug: [#261](https://github.com/giraud/reasonml-idea-plugin/issues/261) warning configuration in bsconfig.json is not being applied

# 0.97 - 2021/02/04

- :bug: [#304](https://github.com/giraud/reasonml-idea-plugin/issues/304) ![r] Properties in component using external are not found
- :bug: Keep caret at position when reformat
- :house: Fix file pattern introduced in bs-platform 8.3
- :house: Fix reformatOnSave when multiple projects (different settings) are opened
- :house: Update ErrorAnnotator to use new ninja format introduced since bs-platform 8.4
- :house: Update ppx error extraction

## 0.96 - 2021/01/08

- :bug: [#295](https://github.com/giraud/reasonml-idea-plugin/issues/295) ![o] Parser error: incorrect chaining module/type
- :bug: [#294](https://github.com/giraud/reasonml-idea-plugin/issues/294) ![o] `let open in` incorrectly parsed
- :bug: [#291](https://github.com/giraud/reasonml-idea-plugin/issues/291) ![o] 'function' not parsed as function
- :house: Better usage of externalAnnotator to highlight compilation problems in editor by [@pooch](https://github.com/JohnPucciarelli)
- :house: Better reformatOnSave implementation that should prevent infinite loop

## 0.95.1 - 2020/12/03

A brand new site created by John Pucciarelli (https://giraud.github.io/reasonml-idea-plugin/)

2020.3 support

- :rocket: [#284](https://github.com/giraud/reasonml-idea-plugin/issues/284) ![o] Support for OCamlFormat
- :rocket: [#110](https://github.com/giraud/reasonml-idea-plugin/issues/110) ![o]![r]![n] Language injection in strings
- :bug: [#279](https://github.com/giraud/reasonml-idea-plugin/issues/279) ![n] Matched brace isn't highlighted in .res source file
- :bug: [#278](https://github.com/giraud/reasonml-idea-plugin/issues/278) ![o] let (//) incorrectly parsed as comment
- :bug: [#277](https://github.com/giraud/reasonml-idea-plugin/issues/277) Wrong module resolution for js object
- :nail_care: New plugin icon by [@pooch](https://github.com/JohnPucciarelli)

## 0.94 - 2020/11/03

Dune integration has been updated, [documentation](https://github.com/giraud/reasonml-idea-plugin/tree/master/docs) is also up to date. 

- :bug: [#276](https://github.com/giraud/reasonml-idea-plugin/issues/276) Class JSFile not found
- :bug: [#275](https://github.com/giraud/reasonml-idea-plugin/issues/275) Incorrect parsing of switch with signature
- :bug: [#245](https://github.com/giraud/reasonml-idea-plugin/issues/245) Resolve property of JSX tag
- :bug: [#124](https://github.com/giraud/reasonml-idea-plugin/issues/124) Repl freezes with Ocaml 4.07
- :nail_care: Fold switch/match
- :house: Use [rincewind@0.9.1](https://github.com/giraud/rincewind)
- :house: refactor Dune integration: works with native (linux), wsl (windows) and cygwin (windows)

## 0.93.1 - 2020/10/09

0.93.1

- :bug: [#272](https://github.com/giraud/reasonml-idea-plugin/issues/272) Another case: structure panel missing function definition with "and"
- :nail_care: [#274](https://github.com/giraud/reasonml-idea-plugin/issues/274) Omit '()' in structure panel
- :nail_care: [#273](https://github.com/giraud/reasonml-idea-plugin/issues/273) Some constructor names not highlighted in function/match patterns

0.93

- :rocket: [#119](https://github.com/giraud/reasonml-idea-plugin/issues/119) support for automatically closing quotes (double)
- :nail_care: 'Goto class' use a custom presentation for inner modules 
- :bug: [#271](https://github.com/giraud/reasonml-idea-plugin/issues/271) Structure panel missing function defined with "and"
- :bug: [#270](https://github.com/giraud/reasonml-idea-plugin/issues/270) Function definition with type variables not recognized as a function
- :bug: [#91](https://github.com/giraud/reasonml-idea-plugin/issues/91) Jumping to some module-related symbol definitions from Structure Panel doesn't highlight symbol right away (incorrect module type detection)
- :bug: Fix monorepo on windows

## 0.92 - 2020/09/18

0.92.1

- :bug: [#269](https://github.com/giraud/reasonml-idea-plugin/issues/269) Incorrect display of class methods names in structure panel
- :nail_care: Better parsing of React fragment <></>
- :nail_care: Better presentation of inner modules in 'goto class' dialog

0.92

This new version is compatible with 2020.2.
To support that version, the references have been redesigned. It might be needed to invalidate your caches and
maybe restart project from scratch (or remove .idea folder).
 
- :rocket: [#264](https://github.com/giraud/reasonml-idea-plugin/pull/264) a new unified language settings by [@pooch](https://github.com/JohnPucciarelli)
- :rocket: [#81](https://github.com/giraud/reasonml-idea-plugin/issues/81) Support GoTo/Implementation(s)
- :bug: [#266](https://github.com/giraud/reasonml-idea-plugin/issues/266) Incompatible with 2020.2 IDEs
- :bug: [#268](https://github.com/giraud/reasonml-idea-plugin/issues/268) Regression: Structure panel should group methods under the class name
- :bug: [#256](https://github.com/giraud/reasonml-idea-plugin/issues/256) Probable regression for jumping to a symbol
- :house: Reworked parsers (try to remove some complexity) - rescript included [#260](https://github.com/giraud/reasonml-idea-plugin/issues/260)
- :house: .res files are automatically compiled when saved, like .re

## 0.90.2 - 2020/07/02

0.90.1

This is a quick patch release to provide syntax highlighting to the new `.res` and `.resi` file types.
Don't expect anything more than just highlighting.

- :bug: Fix 'add braces' action when function has signature

0.90.0

- :memo: Reworked documentation, moved from wiki to the [docs](https://github.com/giraud/reasonml-idea-plugin/tree/master/docs) directory by [@pooch](https://github.com/JohnPucciarelli)
- :memo: [#252](https://github.com/giraud/reasonml-idea-plugin/issues/252) Add an architecture documentation to explain some of the internal details
- :bug: [#247](https://github.com/giraud/reasonml-idea-plugin/issues/247) Duplicated file templates
- :bug: [#205](https://github.com/giraud/reasonml-idea-plugin/issues/205) Functors are now indexed (completion and resolution should work)
- :bug: [#254](https://github.com/giraud/reasonml-idea-plugin/issues/254) ![r] Make a distinction between single-line and multi-line comments in parser
- :bug: [#254](https://github.com/giraud/reasonml-idea-plugin/issues/254) ![r] Fold multiline JSX tags
- :house: Add github action for CI (and badges) by [@pooch](https://github.com/JohnPucciarelli)
- :house: [#253](https://github.com/giraud/reasonml-idea-plugin/pull/253) Breaking apart modules to avoid extra instances of IntelliJ when testing by [@pooch](https://github.com/JohnPucciarelli)
- :house: [#257](https://github.com/giraud/reasonml-idea-plugin/pull/257) Fix monorepo executable by [@Coobaha](https://github.com/Coobaha)

## 0.89.0 - 2020/05/22

- :rocket: [#239](https://github.com/giraud/reasonml-idea-plugin/pull/239) Experimental: start of ESY support work by [@pooch](https://github.com/JohnPucciarelli)
- :bug: [#249](https://github.com/giraud/reasonml-idea-plugin/issues/249) Too many warnings in log (bsconfig not found)
- :bug: [#241](https://github.com/giraud/reasonml-idea-plugin/pull/241) Fix bug that prevent IDEA to keep correctly the source of SDK by [@kayl669](https://github.com/kayl669)
- :bug: [#236](https://github.com/giraud/reasonml-idea-plugin/issues/236) Cannot find a module definition if namespace is used
- :house: Find real bsc/bsb binaries if a symlink is found
- :house: Fix gutter icons for navigation in OCaml files

## 0.88.1 - 2020/05/02

0.88.1
- :house: [#238](https://github.com/giraud/reasonml-idea-plugin/pull/238) ![o] ![r] Add build system info to action labels by [@Coobaha](https://github.com/Coobaha)
- :house: [#234](https://github.com/giraud/reasonml-idea-plugin/issues/234) Display warning instead of exception

0.88
- :rocket: ![o] You can easily download OCaml SDK sources in SDK platform settings
- :bug: [#231](https://github.com/giraud/reasonml-idea-plugin/issues/231) Fix ClassCastException when reading bsconfig.json
- :nail_care: [#220](https://github.com/giraud/reasonml-idea-plugin/pull/220) ![o] ![r] Added BuckleScript file type and icon by [@pooch](https://github.com/JohnPucciarelli) 
- :nail_care: [#219](https://github.com/giraud/reasonml-idea-plugin/pull/219) ![o] ![r] Added file type support for Esy by [@pooch](https://github.com/JohnPucciarelli)
- :nail_care: ![o] ![r] Poly-variants can have a different highlighting, color scheme updated
- :nail_care: ![o] ![r] Use SVG icons
- :house: [#224](https://github.com/giraud/reasonml-idea-plugin/pull/224) ![r] Use bsb.exe instead of node.js wrapper in monorepo by [@Coobaha](https://github.com/Coobaha)
- :house: [#221](https://github.com/giraud/reasonml-idea-plugin/pull/221) ![o] ![r] Compilers have separate tool windows by [@pooch](https://github.com/JohnPucciarelli) 
- :house: Use rincewind@0.8

## 0.87.1 - 2020/04/03

0.87.1
- :bug: [#214](https://github.com/giraud/reasonml-idea-plugin/issues/214) Infinite indexing

0.87
- :rocket: Compatible with bucklescript 7.2.2
- :rocket: Add OCaml 4.10 to the list of downloadable SDKs
- :bug: [#211](https://github.com/giraud/reasonml-idea-plugin/issues/211) `let%private` support
- :bug: [#209](https://github.com/giraud/reasonml-idea-plugin/issues/209) Deep dependencies are not indexed in IDE that have javascript functionality (ultimate/webstorm)
- :house: Use rincewind 0.7 (support of OCaml 4.10)

## 0.86.1 - 2020/02/21

- :rocket: [#204](https://github.com/giraud/reasonml-idea-plugin/issues/204) ![r] New on-the-fly compilation to get faster inferred information
- :bug: [#167](https://github.com/giraud/reasonml-idea-plugin/issues/167) Go-to definition is not working correctly for deconstructed tuples
- :house: Compatible with bucklescript 7.2

## 0.85 - 2020/02/04

- :rocket: File | New menu as OCaml and ReasonML templates
- :rocket: Display cmt file in a custom editor
- :rocket: [#200](https://github.com/giraud/reasonml-idea-plugin/issues/200) OCaml SDK can be set at the module level
- :house: Fix bsc path
- :house: New indexing of file modules
- :house: Use Rincewind 0.6
- :house: [#199](https://github.com/giraud/reasonml-idea-plugin/issues/199) Prepare for dynamic plugins
- :house: [#196](https://github.com/giraud/reasonml-idea-plugin/issues/196) Redesign content root finding

## 0.84 - 2019/12/10

- :bug: [#197](https://github.com/giraud/reasonml-idea-plugin/issues/197) java.lang.Throwable: Assertion failed: Undoable actions allowed inside commands only
- :bug: [#192](https://github.com/giraud/reasonml-idea-plugin/issues/192) Undoing causes Following files have changes that cannot be undone: error
- :house: Fix a stub exception for functor parameter

## 0.83 - 2019/12/03

New versioning scheme: each intellij release has its own plugin version.
For example, 2019.3 can only use plugin 0.83-2019.3. 

This is much more work when developing the plugin but it is needed because API changes between releases
can have many incompatibilities. The consequence is that I won't be able to maintain too 
many versions active. Older version of the plugin will be frozen and won't get any updates. 

## [0.82] - 2019/11/15

- :rocket: Importing a Dune project automatically configure project structure : SDK, module and project.
  SDK can be automatically downloaded and indexed.
- :rocket: Dune stanzas visible in the structure view
- :rocket: Dune stanzas can be folded when they span on multiple lines
- :bug: [#189](https://github.com/giraud/reasonml-idea-plugin/issues/189) ![o] Structure panel missing members/parse problem for `while`
- :bug: [#175](https://github.com/giraud/reasonml-idea-plugin/issues/175) ![o] Structure panel missing top level functions defined after nested `let foo = function`
- :house: Fix bs version extractor (format changed in bucklescript 6.2.1)
- :house: Improved Dune parser

## [0.81] - 2019/10/17

- :bug: [#185](https://github.com/giraud/reasonml-idea-plugin/issues/185) `gradle verifyPlugin` fails
- :bug: [#156](https://github.com/giraud/reasonml-idea-plugin/issues/156) Assigning any value to new variable confuses plugin
- :bug: [#88](https://github.com/giraud/reasonml-idea-plugin/issues/88) ![r] ![o] GoTo/Declaration not looking for locally-defined symbol
- :bug: [#83](https://github.com/giraud/reasonml-idea-plugin/issues/83) ![r] ![o] Support GoTo/Declaration for function-local symbols
- :nail_care: Try to improve quick navigation doc
- :house: ![o] Parsing directives (`#if`, `#else`, `#end`)
- :house: Get inferred type from definition if not found in usage
- :house: Some deduplication of pervasives expressions in free completion contributor
- :house: Work on signature conversion (partial conversion)
- :house: Better dot completion when module is an alias (ex: Belt.Map.String.<caret&gt;)

## [0.80] - 2019/09/23

- :bug: [#155](https://github.com/giraud/reasonml-idea-plugin/issues/155) ![r] Quick documentation is not showing inside parenthesis
- :bug: [#133](https://github.com/giraud/reasonml-idea-plugin/issues/133) Syntax error popup is truncated
- :bug: [#27](https://github.com/giraud/reasonml-idea-plugin/issues/27) ![o] Reworked the uncommenter
- :nail_care: ![r] Better function folding
- :nail_care: ![r] Better parsing/highlighting of js template string
- :nail_care: Remove custom syntax highlighting for `options` in default style settings
- :house: rework Bs output listener, add test

## [0.79] - 2019/08/28

- :bug: [#176](https://github.com/giraud/reasonml-idea-plugin/issues/176) Functions missing in structure panel after "while+match" code
- :bug: [#170](https://github.com/giraud/reasonml-idea-plugin/issues/170) Functions in struct in "module : sig ... end = struct ... end" not shown in Structure panel
- :rocket: Add line marker for inner module
- :nail_care: Don't annotate interface file
- :house: Improve module resolution when it's only found in implementation file
- :house: Better dot completion for inner module in impl file
- :house: Remove the perf warning for LineMarker

## 0.78.4 - 2019/08/17

- :bug: [#177](https://github.com/giraud/reasonml-idea-plugin/issues/177) Exception: "Access is allowed from event dispatch thread only."
- :bug: [#172](https://github.com/giraud/reasonml-idea-plugin/issues/172) 2019.2 error
- :house: Try to look up bsb and refmt in node_modules/.bin dir to improve support of monorepo. Thanks to [@Coobaha](https://github.com/Coobaha)

## 0.78.2 - 2019/07/02

- :bug: [#173](https://github.com/giraud/reasonml-idea-plugin/issues/173) Fixed exception in Webstorm: gutter icons are only available in java-based IDE
- :bug: [#172](https://github.com/giraud/reasonml-idea-plugin/issues/172) Fixed exceptions in 2019.2 EAP
- :house: Jetbrains recommendation: moving project components to service components. Expected faster startup

## 0.78.1 - 2019/06/24

- :nail_care: Quick doc improvement on resolved elements for ReasonML (ctrl+hover)
- :house: Some type conversion work started (partial implementation)
- :house: Resolving variants with locally open path
- :house: Index and resolve record fields
- :house: Rincewind no more downloaded if already present

## 0.77 - 2019/06/05

- :bug: [#166](https://github.com/giraud/reasonml-idea-plugin/issues/166) Indexing of Js.t
- :house: ![r] Some quick doc improvement on resolved elements for ReasonML (ctrl+hover)

## 0.76 - 2019/04/24

- :rocket: Support for ocaml 4.0.6 (Bs 6+)
- :bug: [#165](https://github.com/giraud/reasonml-idea-plugin/issues/165) Autocompletion inside comments
- :bug: [#161](https://github.com/giraud/reasonml-idea-plugin/issues/161) Indexing exception
- :bug: [#160](https://github.com/giraud/reasonml-idea-plugin/issues/160) Autocompletion is not using module interface

## 0.75.1 - 2019/04/16

- :bug: [#154](https://github.com/giraud/reasonml-idea-plugin/issues/154) Remove unwanted end of line after reformat
- :bug: [#153](https://github.com/giraud/reasonml-idea-plugin/issues/153) Split tuple items in structure view for let expressions
- :bug: [#152](https://github.com/giraud/reasonml-idea-plugin/issues/152) Add a check to prevent exception
- :house: Fix alpha sort on open/include in structure view
- :house: Improved OCaml parser
- :house: refmt is set to 80 cols by default
- :house: add missing file

## 0.74 - 2019/03/25

- :rocket: ODoc formatting when displaying special comments (ctrl+q), with the following limitation: element must be resolved, and only a subset of syntax is supported
- :bug: [#153](https://github.com/giraud/reasonml-idea-plugin/issues/153) Structure panel for let fn and let (..)
- :bug: [#151](https://github.com/giraud/reasonml-idea-plugin/issues/151) Fix parameters hints (is empty)
- :bug: [#150](https://github.com/giraud/reasonml-idea-plugin/issues/150) Include expressions from include keyword
- :bug: [#148](https://github.com/giraud/reasonml-idea-plugin/issues/148) Don't auto-reformat ml/mli files
- :house: Redesign completion provider
- :house: Upgraded minimal supported version of intellij product to 173

## 0.73 - 2019/03/12

- :rocket: Implement a (basic) related line marker
- :rocket: Introduce a new OCaml module
- :nail_care: Display a message at the end of the compilation
- :bug: [#149](https://github.com/giraud/reasonml-idea-plugin/issues/149) ![o] ReasonML confused by .mly (yacc) files; structure panel shows most of the grammar on one very long line
- :house: A new file based index
- :house: Remove basic OCaml types detection in lexer

## 0.72 - 2019/02/01

- :rocket: Highlight of dune file
- :rocket: Add a checkbox in Reason settings to disable bucklescript
- :nail_care: Display module path in 'go to class' popup
- :bug: [#126](https://github.com/giraud/reasonml-idea-plugin/issues/126) ![r] Function parameter info attempts to show return type
- :bug: [#122](https://github.com/giraud/reasonml-idea-plugin/issues/122) Make error locations in bucklescript tool window clickable
- :house: Use rincewind 0.4

## 0.71 - 2019/01/23

- :bug: [#136](https://github.com/giraud/reasonml-idea-plugin/issues/121) ![r] ![o] Unicode characters inside strings turn into question marks
- :bug: [#135](https://github.com/giraud/reasonml-idea-plugin/issues/135) ![o] Top-level declaration following "let f = function ... and" doesn't appear in the structure panel
- :bug: [#109](https://github.com/giraud/reasonml-idea-plugin/issues/109) ![r] ![o] Reformat interface
- :house: 2017.2 is the minimal idea version supported

## 0.70 - 2019/01/18

- :rocket: Handle single line comments in Reason files
- :rocket: Completion on open/include
- :rocket: Live templates for reason-react
- :rocket: Naive navigation between code/test modules (must end by _test or _spec)
- :nail_care: Add functor icon
- :nail_care: Reworked files icons
            
## 0.69.1 - 2018/12/17

- :rocket: Automatically adds parenthesis for 'Some'
- :rocket: add basic highlighting for .mll and .mly
- :bug: Fix record field parsing when multiple annotations are used
- :house: Better completion (variants, signatures)
- :bug: [#121](https://github.com/giraud/reasonml-idea-plugin/issues/121) ![r] ![o] Show Functor structure
- :bug: [#120](https://github.com/giraud/reasonml-idea-plugin/issues/120) ![r] Incorrect highlighting of JSX being a function parameter

## 0.67.2 - 2018/11/16

- :house: ![r] Improve JSX parsing
- :bug: [#116](https://github.com/giraud/reasonml-idea-plugin/issues/116) ![o] Structure panel: show items defined in modules
- :bug: [#105](https://github.com/giraud/reasonml-idea-plugin/issues/105) ![o] Missing/incorrect structure info for function named "string"

## 0.67.1 - 2018/11/10

- :bug: [#115](https://github.com/giraud/reasonml-idea-plugin/issues/115) ![o] "end" highlighted the same way as an unmatched parenthesis
- :bug: [#113](https://github.com/giraud/reasonml-idea-plugin/issues/113) ![r] Function parsing is not correct

## 0.67 - 2018/10/27

- :rocket: [#112](https://github.com/giraud/reasonml-idea-plugin/issues/112) Build hotkeys
- :bug: [#111](https://github.com/giraud/reasonml-idea-plugin/issues/111) Bsb window actions are not working outside of reason file
- :bug: [#108](https://github.com/giraud/reasonml-idea-plugin/issues/108) Reason language id in markdown preview
- :bug: [#106](https://github.com/giraud/reasonml-idea-plugin/issues/106) Inconsistent highlighting of matching (), [] and {}

## 0.66.2 - 2018/10/23

- :house: Deleted virtual file listener because they are shared between projects. Now using editor listeners.
- :house: Reworked the compilers code

## 0.65.1 - 2018/10/18

- :bug: Dune file were no more editable because of a change in the parser
- :rocket: ![r] Parameter info (when possible) using ctrl-p
- :rocket: [#97](https://github.com/giraud/reasonml-idea-plugin/issues/97) ![r] ![o] Support for rtop / RPEL as tool window
- :house: ![r] JSX completion can find inner component modules
- :house: improve parser (function parameters, variant constructor, signature)
- :bug: Transform compiler and refmt to project component, to fix incorrectly shared confs
 
## 0.64 - 2018/10/08

- :rocket: ![r] Js language injection in [%raw] blocks
- :nail_care: ![r] Better annotation parsing
- :nail_care: ![r] ![o] Add missing keywords in highlighter
- :bug: [#67](https://github.com/giraud/reasonml-idea-plugin/issues/67) Curly braces intentions are broken

## 0.63 - 2018/09/20

- :nail_care: [#98](https://github.com/giraud/reasonml-idea-plugin/issues/98) Add dates to changelog
- :bug: Renaming inner module should work
- :bug: [#99](https://github.com/giraud/reasonml-idea-plugin/issues/99) ![r] ![o] Incorrect syntax highlighting when a comment contains "*)" (including the quotes)
- :bug: [#95](https://github.com/giraud/reasonml-idea-plugin/issues/95) ![r] ![o] Class names don't appear in Structure panel
- :bug: Fix a bug that prevent plugin to work with 2018.3-EAP

## 0.62.1 - 2018/09/06

- :rocket: Add a 'make' button to the bs console
- :bug: [#62](https://github.com/giraud/reasonml-idea-plugin/issues/62) ![o] Awkward behavior when typing comments
- :bug: [#27](https://github.com/giraud/reasonml-idea-plugin/issues/27) Uncommenting nested comments is incorrect

## 0.61 - 2018/08/29

- :nail_care: [#92](https://github.com/giraud/reasonml-idea-plugin/issues/92) Changing icons
- :bug: Fixed a bug that prevented 'find usages' to work on lower symbols
- :bug: [#89](https://github.com/giraud/reasonml-idea-plugin/issues/89) Renaming variables doesn't work
- :bug: [#94](https://github.com/giraud/reasonml-idea-plugin/issues/94) NPE in findBaseRootFromFile
           
## 0.60.2 - 2018/07/31

- :nail_care: [#59](https://github.com/giraud/reasonml-idea-plugin/issues/59) Colored output in Bucklescript tab
- :bug: [#90](https://github.com/giraud/reasonml-idea-plugin/issues/90) IllegalArgumentException when clicking on an entry in "Structures" to go to a symbol
- :house: Parsers updated

## 0.59.1 - 2018/07/25

- :rocket: You can use 'Go to class' to find OCaml/ReasonMl modules
- :bug: [#78](https://github.com/giraud/reasonml-idea-plugin/issues/78) ![o] Let symbol missing in structure panel
- :bug: [#82](https://github.com/giraud/reasonml-idea-plugin/issues/82) Exception for GoTo/Declaration of a function parameter
- :bug: [#87](https://github.com/giraud/reasonml-idea-plugin/issues/87) NullPointerException at jpsplugin.com.reason.Platform.findBaseRootFromFile

## 0.59 - 2018/07/19

- :rocket: [#71](https://github.com/giraud/reasonml-idea-plugin/issues/71) Monorepo with multiple bs projects
- :nail_care: ![o] 'let _' is not shown in the structure panel
- :bug: Fix (again) property completion in JSX after rework on references has been done

## 0.58.1 - 2018/07/18

- :bug: [#79](https://github.com/giraud/reasonml-idea-plugin/issues/79) IDE crash
- :bug: [#77](https://github.com/giraud/reasonml-idea-plugin/issues/77) Show non-alphanumeric function names such as ">>=" in the structure panel

## 0.58 - 2018/07/12

This release contains a big rewrite of how modules are referenced, it may break things that were working before (ex: find usages).

- :bug: [#72](https://github.com/giraud/reasonml-idea-plugin/issues/72) Autocomplete not working in uncurried function

## 0.57.1 - 2018/07/10

- :rocket: Some record field completion
- :bug: [#66](https://github.com/giraud/reasonml-idea-plugin/issues/66) Go To + module alias
- :house: ![o] Better module path resolution
- :house: Improved parsers
            
## 0.56

- :rocket: ![r] Go to symbol is working for external/let mainly
- :rocket: ![r] ctrl-hover on a lower symbol display its type (still wip, not working for all symbols)
- :bug: ![r] JSX attribute completion with reason-react 0.4.2 (from external to type)

## 0.55.1

* :house: fix editor freeze when too many cmt/i files are updated
* :house: ![o] better completion

## 0.54

* :rocket: add "exposing" code lens to opens
* :house: completion uses opens and local opens
* :house: better path resolution for "go to" action
* :house: rincewind-0.2
* :house: improve parsers

## 0.53

* :rocket: ![r] ![o] improve parsers
* :rocket: ![r] improve braces intention
* :bug: [#65](https://github.com/giraud/reasonml-idea-plugin/issues/65) refmt not working in .rei

## 0.52

* :rocket: ![o] Pair match in OCaml: struct/end and sig/end
* :rocket: [#53](https://github.com/giraud/reasonml-idea-plugin/issues/53) ![r] Implemented intentions
* :nail_care: Add bool/char/int/float/string as keywords
* :nail_care: [#64](https://github.com/giraud/reasonml-idea-plugin/issues/53) Handle warning message from bsb
* :house: Protect against concurrent run of bsb compilation process
            
## 0.51.1

* :bug: Fix [#61](https://github.com/giraud/reasonml-idea-plugin/issues/61)
* :house: Slightly better bootstrap for type inference

## 0.51

* :bug: [#52](https://github.com/giraud/reasonml-idea-plugin/issues/52) Fix problem when parsing JSX tag names
* :house: Type annotation is now using a native cmt extractor (Windows, Linux, OSX)

## 0.50

* :nail_care: [#55](https://github.com/giraud/reasonml-idea-plugin/issues/55) Sorry, no more facets: they can't be used outside Idea. Settings can be found in Project settings and they are per project

## 0.49

* :rocket: [#47](https://github.com/giraud/reasonml-idea-plugin/issues/47) No more JVM properties 'reasonBsb' and 'reasonRefmt', configuration is done via facet

## 0.48.1

* :bug: [#51](https://github.com/giraud/reasonml-idea-plugin/issues/51) Fix a NPE in OCaml

## 0.48

* :house: Fix folding code
* :house: Better locate js.ml, belt.ml
* :house: Add Pervasives to completion
            
## 0.47.1

* :bug: Fixed 2 bugs (stack and 'editor not disposed' exceptions)
* :house: Fixed recursive type parsing problem with variants

## 0.47

* :rocket: Reason settings to change reformat column width
* :bug: [#45](https://github.com/giraud/reasonml-idea-plugin/issues/45) (classes have been deleted)
* :house: Better error extraction
* :house: Reformat on save can be activated (see doc)

## 0.46

* :bug: Fix version 0.45
* :rocket: Better error annotation (includes warnings)
        
## 0.45 

* :nail_care: Bucklescript window has an icon
* :nail_care: File icons updated
* :bug: Goto action use the same path resolution than completion
* :rocket: Display signature for 'val' in completion popup
* :house: Parsers improvement
* :house: Reworked how to get the types from cmi files

## 0.44

* :bug: [#40](https://github.com/giraud/reasonml-idea-plugin/issues/40)
* :house: Improve completion on expressions

## 0.43

* :bug: [#35](https://github.com/giraud/reasonml-idea-plugin/issues/35) Type annotations not working with bs namespace
* :house: Improve completion on expressions

## 0.42

* :rocket: Add |. operator
* :rocket: goto action on file module is working
* :house: Improve completion on expressions
* :bug: Color settings no more blocked on loading spinner

## 0.41

* :house: Much improved performances for code lens

## 0.40

* :rocket: JSX completion (tag/attribute)
* :rocket: Variant names can be highlighted
* :house: Improved parsers
         
## 0.39

* :house: Better JSX parsing/highlighting
* :rocket: Code lens style is customisable
* :bug: [#33](https://github.com/giraud/reasonml-idea-plugin/issues/33)
* :rocket: Completion contributor for OCaml files (wip)

## 0.38

* :house: Better JSX parsing/highlighting
* :house: Fix inferred type annotations
* :house: Improved reason parser

## 0.37

* :bug: [#30](https://github.com/giraud/reasonml-idea-plugin/issues/30)
* :rocket: add completion when starting typing
* :house: Display types for val/external (completion popup)
* :house: Use mli file when present (Pervasives)

## 0.36

* :bug: [#29](https://github.com/giraud/reasonml-idea-plugin/issues/29)
* :house: Improve parsers
* :rocket: add keyword completion (start expression)
* :rocket: add module completion for open expression

## 0.35

* :bug: Fix an infinite loop in PsiModule
* :house: Improve parsers 

## 0.34

* :bug: Fix a NPE in the folder code when comments are too small
* :bug: [#28](https://github.com/giraud/reasonml-idea-plugin/issues/28) IntelliJ error "Assertion failed: Too many element types registered. Out of (short) range." **maybe**
* :rocket: [#25](https://github.com/giraud/reasonml-idea-plugin/issues/25) Support .ml4 files 

## 0.33

* :bug: [#22](https://github.com/giraud/reasonml-idea-plugin/issues/22) Mishandling of "Comment with Block Comment" action (CTL-SHIFT-/)
* :bug: [#21](https://github.com/giraud/reasonml-idea-plugin/issues/21) Error message: "startNotify called already" 

## 0.32

* :nail_care: [#20](https://github.com/giraud/reasonml-idea-plugin/issues/20) Improved notification, add plugin name and link to github 
* :rocket: 'go to' for Open expression (ctrl+click)
* :bug: [#19](https://github.com/giraud/reasonml-idea-plugin/issues/19) Character constant with an octal character not highlighted correctly 

## 0.31

* :nail_care: val expressions (OCaml) are displayed in the structure view
* :nail_care: Exceptions are displayed in the structure view
* :bug: [#18](https://github.com/giraud/reasonml-idea-plugin/issues/18) Incorrect handling of characters in parser 
* :house: Improve OCaml parser

## 0.30

* :house: Fix Idea 15 compatibility
* :house: Work done on indexing and referencing (module)

## 0.29

* :house: Redesigned the reason parser

## 0.28

* :rocket: Reformat action is working on ocaml source
* :house: Working on stub indexing and first implementation of completion using static analysis

## 0.27

* :bug: Fixed an IllegalArgumentException in KillableColoredProcessHandler
* :rocket: Structure view enabled for OCaml files
* :rocket: Inferring types using bsc if no merlin found (wip)
* :house: Using gradle for build
* :house: Improving reason parser

## 0.26

* :house: Improving parsers

## 0.25

* :rocket: [#14](https://github.com/giraud/reasonml-idea-plugin/issues/14) Add a very lightweight support of OCaml, to have more syntax coloring and no incorrect parser errors

## 0.24

* :nail_care: [#13](https://github.com/giraud/reasonml-idea-plugin/issues/13) Add Number and Type argument in color settings

## 0.23

* :house: New default values for bsb and refmt. bsb=> node_modules/bs-platform/bin/bsb.exe, refmt=> node_modules/bs-platform/bin/refmt3.exe

## 0.22

* :rocket: Parse Bsb super errors and use them to annotate source code


[r]: website/static/img/reason-file.png
[o]: website/static/img/ocaml-file.png
[n]: website/static/img/rescript-file.png


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

Contributions are welcome and encouraged.

Please see the [How to Contribute](https://giraud.github.io/reasonml-idea-plugin/docs/contributing/) page to get started.



================================================
FILE: ISSUE_TEMPLATE.md
================================================
plugin version: 

### Description



================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2017 Giraud

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Reason IDEA Plugin

**!!! THIS PROJECT IS IN MAINTENANCE MODE !!!**

[**giraud.github.io/reasonml-idea-plugin**](https://giraud.github.io/reasonml-idea-plugin/)

ReasonML language plugin for IDEA. Supports Reason, ReScript and OCaml.

![Build Status](https://github.com/giraud/reasonml-idea-plugin/workflows/Build%20Status/badge.svg)
[![JetBrains IntelliJ plugins](https://img.shields.io/jetbrains/plugin/d/9440-reasonml.svg)](https://plugins.jetbrains.com/plugin/9440-reasonml)
[![Discord](https://img.shields.io/discord/713777184996589580)](https://discord.gg/65fz5jb)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors)
<!-- ALL-CONTRIBUTORS-BADGE:END --> 

![screenshot](screenshot.png)

## 🏁 Quick Start 

Download and install the [plugin from the JetBrains Plugin Marketplace](https://plugins.jetbrains.com/plugin/9440-reasonml).

> Make sure `"namespace": false` is set in `bsconfig.json` to enable inferred types hints in the editor.

## 📔 Documentation 

Please see our [website](https://giraud.github.io/reasonml-idea-plugin/)
for the latest documentation and more information on how to get started.

## 💬 Language Features 

 
| **Feature**           | **OCaml (.ml)** | **Reason (.re, .rei)** | **ReScript (.res, .resi)** |
|-----------------------|:---------------:|:----------------------:|:--------------------------:|
| Syntax Support        |        ✅        |           ✅            |             ✅              |
| Reformat Code         |        ✅        |           ✅            |                            |
| Structured View       |        ✅        |           ✅            |             ✅              |
| Code Folding          |        ✅        |           ✅            |             ✅              |
| JSX Support           |        ✅        |           ✅            |             ✅              |
| JS Language Injection |        ✅        |           ✅            |             ✅              |
| Line & Block Comments |        ✅        |           ✅            |             ✅              |
| Type Annotations      |                 |           ✅            |             ✅              |
| Code Intentions       |        ✅        |           ✅            |             ✅              |
| Pair Braces Matching  |        ✅        |           ✅            |             ✅              |

## 🛠 Build Tool Support 

| **Feature**          | **BuckleScript** | **Dune** | **Esy** |
|----------------------|:----------------:|:--------:|:-------:|
| Install Dependencies |        ✅         |    ✅     |    ✅    |
| Build Project        |        ✅         |    ✅     |    ✅    |
| Error Reporting      |        ✅         |    ✅     |    ✅    |

## 📝 Questions & Feedback  

Please see the [FAQ](https://giraud.github.io/reasonml-idea-plugin/docs/get-started/faq)
page or [report](https://github.com/giraud/reasonml-idea-plugin/issues/new)
an issue.

Post any questions or feedback in [Discord](https://discord.gg/65fz5jb).

## 💁 How to Help 

- Be patient.
- Give this project some love, star it or star the plugin page in the [JetBrains Plugin Marketplace](https://plugins.jetbrains.com/plugin/9440-reasonml-language-plugin).
- Report any issues [here](https://github.com/giraud/reasonml-idea-plugin/issues/new).

### Donate

<a href="https://www.paypal.me/rvgiraud"><img alt="Donate using PayPal" src="https://img.shields.io/badge/paypal-me-blue.svg"></a>
Support my work with paypal-me.

## 🍻 Thanks 

To all the people who have donated, you are awesome !! Really, this is pure anonymous donation, and it blows my mind... I'm very grateful, and it's kinda stupid, but it keeps me motivated. So big thanks.

Many thanks also to the [JetBrains Team](https://www.jetbrains.com/?from=reasonml-idea-plugin) who provide me an OSS licence for their product.

## 📄 License 

This project is [MIT licensed](https://github.com/giraud/reasonml-idea-plugin/blob/pooch/documentation/LICENSE).


================================================
FILE: build.gradle
================================================
import org.jetbrains.intellij.platform.gradle.TestFrameworkType

plugins {
    id('java')
    id('org.jetbrains.intellij.platform') version('2.7.1') // IntelliJ Platform Gradle Plugin
}

// Configure project's dependencies
repositories {
    mavenCentral()
    // IntelliJ Platform Gradle Plugin Repositories Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-repositories-extension.html
    intellijPlatform {
        defaultRepositories()
    }
}

java.sourceCompatibility = 21.0

// Dependencies are managed with Gradle version catalog - read more: https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog
dependencies {
    testRuntimeOnly('org.opentest4j:opentest4j:1.3.0')
    testImplementation('junit:junit:4.13.2')

    // IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html
    intellijPlatform {
        create(platformType, platformVersion)

        // Plugin Dependencies. Uses `platformBundledPlugins` property from the gradle.properties file for bundled IntelliJ Platform plugins.
        bundledPlugins(platformBundledPlugins.split(',').collect { it.trim() })

        // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file for plugin from JetBrains Marketplace.
        plugins(platformPlugins.split(',').collect { it.trim() })

        instrumentationTools()
        pluginVerifier()
        testFramework(TestFrameworkType.Platform.INSTANCE)
        testFramework(TestFrameworkType.Plugin.Java.INSTANCE)
    }
}

group = pluginGroup
version = pluginVersion + '-' + platformVersion

intellijPlatform {
    pluginConfiguration {
        version = pluginVersion + '-' + platformVersion
        ideaVersion {
            sinceBuild = pluginSinceBuild
            untilBuild = pluginUntilBuild
        }
    }

    patchPluginXml {
        sinceBuild = pluginSinceBuild
        untilBuild = pluginUntilBuild
        changeNotes = """
                <ul>
                    <li>Fix infinite indexing (parameters)</li>
                </ul>
                <p><a href="https://github.com/giraud/reasonml-idea-plugin/blob/master/CHANGELOG.md">Full change log...</a></p>
                <p/>
                <p>To see how to integrate tools, go to the website.</p>
            """.stripIndent()
    }

    pluginVerification {
        ides {
            recommended()
        }
    }
}

runIde {
    systemProperty 'idea.is.internal', true
    jvmArgs '-Xmx2G'
    // MAVEN_CACHE C:\Users\hgiraud\scoop\persist\maven\.m2
    // MAVEN_HOME  C:\Users\hgiraud\scoop\apps\maven\current
    // MAVEN_REPOSITORY C:\Users\hgiraud\scoop\persist\maven\.m2\repository
}


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
org.gradle.jvmargs=-XX:MaxHeapSize=512m -Xms512m -Xmx1g

pluginGroup   = com.reason
pluginName    = reasonml-plugin-idea
pluginVersion = 0.131

# http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html
pluginSinceBuild = 242.0
pluginUntilBuild = 242.*

# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
# https://www.jetbrains.com/intellij-repository/releases
# https://www.jetbrains.com/intellij-repository/snapshots
platformType    = IU
platformVersion = 2024.2

# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
# https://plugins.jetbrains.com/plugin/13029-indices-viewer/versions
# https://plugins.jetbrains.com/plugin/227-psiviewer/versions
platformPlugins = com.jetbrains.hackathon.indices.viewer:1.28, PsiViewer:242.4697
platformBundledPlugins=com.intellij.java, JavaScript

# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html
org.gradle.configuration-cache = true
# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html
org.gradle.caching = true
org.gradle.configuration-cache.parallel=true


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: settings.gradle
================================================
rootProject.name = 'reasonml-idea-plugin'


================================================
FILE: src/main/java/com/reason/FileHelper.java
================================================
package com.reason;

import com.intellij.json.*;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.*;
import com.reason.ide.files.*;
import com.reason.ide.search.*;
import com.reason.lang.core.psi.*;
import jpsplugin.com.reason.Platform;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.nio.file.*;

import static com.reason.comp.ORConstants.BS_CONFIG_FILENAME;
import static com.reason.comp.ORConstants.RESCRIPT_CONFIG_FILENAME;

public class FileHelper {
    private FileHelper() {
    }

    public static boolean isCompilable(@Nullable FileType fileType) {
        return isReason(fileType)
                || isRescript(fileType)
                || isOCaml(fileType)
                || isOCamlLexer(fileType)
                || isOCamlParser(fileType);
    }

    public static boolean isBsConfigJson(@Nullable VirtualFile file) {
        return file != null && BS_CONFIG_FILENAME.equals(file.getName());
    }

    public static boolean isRescriptConfigJson(@Nullable VirtualFile file) {
        return file != null && RESCRIPT_CONFIG_FILENAME.equals(file.getName());
    }

    public static boolean isCompilerConfigJson(@Nullable VirtualFile file) {
        if (file != null && file.getFileType() instanceof JsonFileType) {
            String fileName = file.getName();
            return RESCRIPT_CONFIG_FILENAME.equals(fileName) || BS_CONFIG_FILENAME.equals(fileName);
        }
        return false;
    }

    public static boolean isReason(@Nullable FileType fileType) {
        return fileType instanceof RmlFileType || fileType instanceof RmlInterfaceFileType;
    }

    public static boolean isRescript(@Nullable FileType fileType) {
        return fileType instanceof ResFileType || fileType instanceof ResInterfaceFileType;
    }

    private static boolean isOCamlLexer(@Nullable FileType fileType) {
        return fileType instanceof MllFileType;
    }

    private static boolean isOCamlParser(@Nullable FileType fileType) {
        return fileType instanceof MlyFileType;
    }

    public static boolean isOCaml(@Nullable FileType fileType) {
        return fileType instanceof OclFileType || fileType instanceof OclInterfaceFileType;
    }

    public static boolean isNinja(@Nullable VirtualFile file) {
        return file != null && "build.ninja".equals(file.getName());
    }

    public static boolean isInterface(@Nullable FileType fileType) {
        return fileType instanceof RmlInterfaceFileType
                || fileType instanceof ResInterfaceFileType
                || fileType instanceof OclInterfaceFileType;
    }

    @NotNull
    public static String shortLocation(@NotNull String path, @NotNull Project project) {
        String newPath = Platform.getRelativePathToModule(path, project);
        int nodeIndex = newPath.indexOf("node_modules");
        if (0 <= nodeIndex) {
            newPath = newPath.substring(nodeIndex);
        }
        int pos = newPath.lastIndexOf("/");
        return 0 < pos ? newPath.substring(0, pos) : newPath;
    }

    public static @Nullable RPsiModule getPsiModule(@Nullable FileModuleData data, @NotNull Project project) { // not working with unit tests
        VirtualFile vFile = data == null ? null : VirtualFileManager.getInstance().findFileByNioPath(Path.of(data.getPath()));
        PsiFile file = vFile == null ? null : PsiManager.getInstance(project).findFile(vFile);
        return file instanceof RPsiModule ? (RPsiModule) file : null;
    }
}


================================================
FILE: src/main/java/com/reason/comp/CliType.java
================================================
package com.reason.comp;

import com.reason.comp.ORCompiler.*;
import org.jetbrains.annotations.*;

public interface CliType {
    @NotNull CompilerType getCompilerType();

    enum Bs implements CliType {
        MAKE,
        CLEAN_MAKE;

        @Override
        public @NotNull CompilerType getCompilerType() {
            return CompilerType.BS;
        }
    }

    enum Rescript implements CliType {
        MAKE,
        CLEAN;

        @Override
        public @NotNull CompilerType getCompilerType() {
            return CompilerType.RESCRIPT;
        }
    }

    enum Dune implements CliType {
        BUILD,
        CLEAN,
        INSTALL,
        VERSION;

        @Override
        public @NotNull CompilerType getCompilerType() {
            return CompilerType.DUNE;
        }
    }

    enum Esy implements CliType {
        INSTALL,
        BUILD,
        SHELL;

        @Override
        public @NotNull CompilerType getCompilerType() {
            return CompilerType.ESY;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/CompilerOutputAnalyzer.java
================================================
package com.reason.comp;

import com.reason.ide.annotations.*;
import org.jetbrains.annotations.*;

import java.util.*;
import java.util.regex.*;

public interface CompilerOutputAnalyzer {
    Pattern FILE_LOCATION = Pattern.compile("\\s*File \"(.+)\", lines? (\\d+)(?:-(\\d+))?, characters (\\d+)-(\\d+):");
    Pattern SYNTAX_LOCATION = Pattern.compile("\\s*(.+):(\\d+):(\\d+)(?:-(\\d+)(?::(\\d+))?)?");

    @NotNull List<OutputInfo> getOutputInfo();

    void onTextAvailable(@NotNull String line);
}


================================================
FILE: src/main/java/com/reason/comp/CompilerOutputListener.java
================================================
package com.reason.comp;

import com.intellij.execution.process.*;
import com.intellij.openapi.application.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.util.*;
import com.intellij.psi.*;
import com.reason.ide.annotations.*;
import com.reason.ide.hints.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

public class CompilerOutputListener implements ProcessListener {
    private static final Log LOG = Log.create("output");

    private final Project myProject;
    private final CompilerOutputAnalyzer myOutputAnalyzer;

    public CompilerOutputListener(@NotNull Project project, @NotNull CompilerOutputAnalyzer outputAnalyzer) {
        myProject = project;
        myOutputAnalyzer = outputAnalyzer;
    }

    @Override
    public void startNotified(@NotNull ProcessEvent event) {
        myProject.getService(ErrorsManager.class).clearErrors();
    }

    @Override
    public void processTerminated(@NotNull ProcessEvent event) {
        List<OutputInfo> outputInfo = myOutputAnalyzer.getOutputInfo();
        if (!outputInfo.isEmpty() && !myProject.isDisposed()) {
            LOG.debug("Update errors manager with output results");
            myProject.getService(ErrorsManager.class).addAllInfo(outputInfo);
        }

        ApplicationManager.getApplication()
                .invokeLater(
                        () -> {
                            // When build is done, we need to refresh editors to be notified of the latest
                            // modifications
                            if (!myProject.isDisposed()) {
                                LOG.debug("Compilation done: read new types");
                                PsiFile selectedFile = InferredTypesService.getPsiFile(myProject);
                                if (selectedFile != null) {
                                    selectedFile.putUserData(SignatureProvider.SIGNATURES_CONTEXT, null); // reset
                                    InferredTypesService.queryTypes(myProject, selectedFile);
                                }
                            }
                        },
                        ModalityState.nonModal());
    }

    @Override
    public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) {
        String text = event.getText();
        myOutputAnalyzer.onTextAvailable(text);
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORCompiler.java
================================================
package com.reason.comp;

import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

public interface ORCompiler {
    enum CompilerType {
        BS("BuckleScript"),
        RESCRIPT("Rescript"),
        DUNE("Dune"),
        ESY("Esy");

        private final String myDisplayName;

        CompilerType(String displayName) {
            myDisplayName = displayName;
        }

        public @NotNull String displayName() {
            return myDisplayName;
        }
    }

    @NotNull CompilerType getType();

    boolean isConfigured(@NotNull Project project);

    boolean isAvailable(@NotNull Project project);

    @NotNull String getFullVersion(@Nullable VirtualFile file);

    void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminated<Void> onProcessTerminated);

    void run(@Nullable VirtualFile file, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated);

    boolean isAvailable();
}


================================================
FILE: src/main/java/com/reason/comp/ORCompilerConfigManager.java
================================================
package com.reason.comp;

import com.intellij.openapi.components.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.*;
import com.reason.*;
import com.reason.comp.bs.*;
import com.reason.comp.rescript.*;
import com.reason.ide.*;
import org.jetbrains.annotations.*;

import java.util.*;

import static com.reason.comp.ORConstants.*;

/**
 * Caches BsConfig available for project.
 */
@Service(Service.Level.PROJECT)
public final class ORCompilerConfigManager {
    private final Project myProject;
    private final Map<String, BsConfig> myConfigs = new HashMap<>();

    public ORCompilerConfigManager(@NotNull Project project) {
        myProject = project;
    }

    public void refresh(@NotNull VirtualFile configFile) {
        BsConfig config = FileHelper.isBsConfigJson(configFile) ? BsConfigReader.read(configFile) : ResConfigReader.read(configFile);
        myConfigs.put(configFile.getCanonicalPath(), config);
    }

    public @Nullable BsConfig getConfig(@Nullable VirtualFile configFile) {
        BsConfig config = null;

        String canonicalPath = configFile == null ? null : configFile.getCanonicalPath();
        if (canonicalPath != null) {
            config = myConfigs.get(canonicalPath);
            if (config == null) {
                config = FileHelper.isBsConfigJson(configFile) ? BsConfigReader.read(configFile) : ResConfigReader.read(configFile);
                myConfigs.put(canonicalPath, config);
            }
        }

        return config;
    }

    /**
     * Finds the "nearest" bsconfig.json/rescript.json to a given file.
     * Searches up the file-system until one file is found or the project root is reached.
     *
     * @param sourceFile starting point for search
     * @return configuration file, if found
     */
    public @Nullable VirtualFile findNearestConfigFile(@NotNull VirtualFile sourceFile) {
        return ORFileUtils.findOneOfAncestor(myProject, sourceFile, RESCRIPT_CONFIG_FILENAME, BS_CONFIG_FILENAME);
    }

    public @Nullable BsConfig getNearestConfig(@Nullable VirtualFile sourceFile) {
        VirtualFile configFile = sourceFile == null ? null : findNearestConfigFile(sourceFile);
        return getConfig(configFile);
    }

    public @Nullable BsConfig getNearestConfig(@Nullable PsiFile psiFile) {
        VirtualFile virtualFile = psiFile == null ? null : ORFileUtils.getVirtualFile(psiFile);
        return getNearestConfig(virtualFile);
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORCompilerManager.java
================================================
package com.reason.comp;

import com.intellij.openapi.components.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.*;
import com.reason.comp.ORCompiler.*;
import com.reason.comp.bs.*;
import com.reason.comp.dune.*;
import com.reason.comp.esy.*;
import com.reason.comp.rescript.*;
import com.reason.ide.files.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

@Service(Service.Level.PROJECT)
public final class ORCompilerManager {
    private static final Log LOG = Log.create("compiler.manager");
    private final @NotNull Project myProject;

    public ORCompilerManager(@NotNull Project project) {
        myProject = project;
    }

    public @Nullable ORCompiler getCompiler(@NotNull CliType cliType) {
        return getCompiler(cliType.getCompilerType());
    }

    public @Nullable ORCompiler getCompiler(@NotNull CompilerType compilerType) {
        ORCompiler compiler = myProject.getService(getCompilerClass(compilerType));
        return compiler != null && compiler.isConfigured(myProject) ? compiler : null;
    }

    public @Nullable <T extends ORCompiler> T getCompiler(@NotNull Class<T> clazz) {
        T compiler = myProject.getService(clazz);
        return compiler != null && compiler.isConfigured(myProject) ? compiler : null;
    }

    public @Nullable ORResolvedCompiler<? extends ORCompiler> getCompiler(@Nullable VirtualFile editorFile) {
        boolean shouldTraverse = editorFile != null && (editorFile.isDirectory() || FileHelper.isCompilable(editorFile.getFileType()));
        return shouldTraverse ? traverseAncestorsForCompiler(editorFile.getParent(), new HashMap<>()) : null;
    }

    private @Nullable ORResolvedCompiler<? extends ORCompiler> traverseAncestorsForCompiler(@Nullable VirtualFile currentDir, @NotNull Map<String, VirtualFile> visited) {
        // hit filesystem root, give up
        if (currentDir == null) {
            return null;
        }

        // we've already visited this directory, must have hit a symlink
        if (visited.get(currentDir.getPath()) != null) {
            return null;
        }
        visited.put(currentDir.getPath(), currentDir);

        // look for a compiler configuration file in the current directory
        CompilerVisitor compilerVisitor = new CompilerVisitor();
        VfsUtil.visitChildrenRecursively(currentDir, compilerVisitor);
        if (compilerVisitor.myCompiler != null) {
            return compilerVisitor.myCompiler;
        }

        // we just checked the project root, we're done
        if (currentDir.getPath().equals(myProject.getBasePath())) {
            return null;
        }

        // move up a directory and try again
        return traverseAncestorsForCompiler(currentDir.getParent(), visited);
    }

    private static @NotNull Class<? extends ORCompiler> getCompilerClass(@NotNull CompilerType compilerType) {
        return switch (compilerType) {
            case BS -> BsCompiler.class;
            case RESCRIPT -> ResCompiler.class;
            case DUNE -> DuneCompiler.class;
            case ESY -> EsyCompiler.class;
        };
    }

    private class CompilerVisitor extends VirtualFileVisitor<VirtualFile> {
        ORResolvedCompiler<? extends ORCompiler> myCompiler = null;

        CompilerVisitor() {
            super(SKIP_ROOT, NO_FOLLOW_SYMLINKS, ONE_LEVEL_DEEP);
        }

        @Override
        public boolean visitFile(@NotNull VirtualFile file) {
            if (myCompiler != null || file.isDirectory()) {
                return false;
            }

            if (EsyPackageJson.isEsyPackageJson(file)) {
                EsyCompiler compiler = getCompiler(EsyCompiler.class);
                myCompiler = compiler != null ? new ORResolvedCompiler<>(compiler, file, null) : null;
            } else if (DuneFileType.isDuneFile(file)) {
                // Will be empty if dune isn't configured, might be an esy project
                DuneCompiler compiler = getCompiler(DuneCompiler.class);
                myCompiler = compiler != null ? new ORResolvedCompiler<>(compiler, file, null) : null;
            } else if (FileHelper.isRescriptConfigJson(file)) {
                LOG.debug("Detected rescript(only) config", file);
                ResCompiler rescript = getCompiler(ResCompiler.class);
                if (rescript != null) {
                    VirtualFile binFile = ResPlatform.findBscExecutable(myProject, file);
                    myCompiler = binFile != null ? new ResResolvedCompiler(rescript, file, binFile) : null;
                }
            } else if (FileHelper.isBsConfigJson(file)) {
                // Could be either a Rescript or a Bucklescript installation
                ResCompiler rescript = getCompiler(ResCompiler.class);
                VirtualFile binFile = ResPlatform.findBscExecutable(myProject, file);
                if (rescript != null && binFile != null) {
                    myCompiler = new ResResolvedCompiler(rescript, file, binFile);
                } else {
                    BsCompiler bucklescript = getCompiler(BsCompiler.class);
                    binFile = BsPlatform.findBscExecutable(myProject, file);
                    if (bucklescript != null && binFile != null) {
                        myCompiler = new BsResolvedCompiler(bucklescript, file, binFile);
                    }
                }
            }

            return true;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORCompilerOutputAnalyzer.java
================================================
package com.reason.comp;

import com.reason.ide.annotations.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;
import java.util.regex.*;

import static java.lang.Integer.*;

public abstract class ORCompilerOutputAnalyzer implements CompilerOutputAnalyzer {
    private final List<OutputInfo> myOutputInfo = new ArrayList<>();
    protected @Nullable OutputInfo myCurrentInfo = null;

    @Override
    public @NotNull List<OutputInfo> getOutputInfo() {
        return myOutputInfo;
    }

    @Override
    public abstract void onTextAvailable(@NotNull String line);

    protected @Nullable OutputInfo extractExtendedFilePositions(@NotNull Log LOG, @NotNull String line) {
        Matcher matcher = FILE_LOCATION.matcher(line);
        if (matcher.matches()) {
            String path = matcher.group(1);
            String lineStart = matcher.group(2);
            String lineEnd = matcher.group(3);
            String colStart = matcher.group(4);
            String colEnd = matcher.group(5);
            OutputInfo info = addInfo(path, lineStart, lineEnd, colStart, colEnd);
            if (info.colStart < 0 || info.colEnd < 0) {
                LOG.error("Can't decode columns for [" + line.replace("\n", "") + "]");
                return null;
            }
            return info;
        }

        return null;
    }

    //  C:\bla\bla\src\InputTest.res:1:11(-12(:22)?)?
    protected @Nullable OutputInfo extractSyntaxErrorFilePosition(@NotNull Log LOG, @NotNull String line) {
        Matcher matcher = SYNTAX_LOCATION.matcher(line);
        if (matcher.matches()) {
            String path = matcher.group(1);
            String lineStart = matcher.group(2);
            String colStart = matcher.group(3);

            String lineEnd = null;
            String colEnd = null;

            String end1 = matcher.group(4);
            String end2 = matcher.group(5);
            if (end2 == null && end1 != null) {
                colEnd = end1;
            } else if (end2 != null) {
                lineEnd = end1;
                colEnd = end2;
            }

            OutputInfo info = addInfo(path, lineStart, lineEnd, colStart, colEnd);
            if (info.colStart < 0 || info.colEnd < 0) {
                LOG.error("Can't decode columns for [" + line.replace("\n", "") + "]");
                return null;
            }
            return info;
        }

        return null;
    }

    protected @NotNull OutputInfo addInfo(@NotNull String path, @NotNull String lineStart, @Nullable String lineEnd, @NotNull String colStart, @Nullable String colEnd) {
        OutputInfo info = new OutputInfo();

        info.path = path;
        info.lineStart = parseInt(lineStart);
        info.colStart = parseInt(colStart);
        info.lineEnd = lineEnd == null ? info.lineStart : parseInt(lineEnd);
        info.colEnd = colEnd == null ? info.colStart : parseInt(colEnd);
        if (info.colEnd == info.colStart) {
            info.colEnd += 1;
        }

        myOutputInfo.add(info);
        return info;
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORConstants.java
================================================
package com.reason.comp;

public class ORConstants {
    public static final String RESCRIPT_EXE_NAME = "rescript";
    public static final String RESCRIPT_CONFIG_FILENAME = "rescript.json";
    public static final String RESCRIPT_DIR = "rescript";

    public static final String BSB_EXE_NAME = "bsb";
    public static final String BSC_EXE_NAME = "bsc";
    public static final String REFMT_EXE_NAME = "refmt";

    public static final String BS_CONFIG_FILENAME = "bsconfig.json";
    public static final String BS_DIR = "bs-platform";

    public static final String BS_JS_FILE_EXTENSION = "bs.js";

    public static final String NODE_MODULES = "node_modules";

    private ORConstants() {
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORPlatform.java
================================================
package com.reason.comp;

import com.intellij.openapi.project.*;
import com.intellij.openapi.util.*;
import com.intellij.openapi.vfs.*;
import com.reason.ide.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import static com.reason.comp.ORConstants.*;
import static jpsplugin.com.reason.Platform.*;

public class ORPlatform {
    private static final Log LOG = Log.create("platform");

    private ORPlatform() {
    }

    public static @Nullable VirtualFile findCompilerPathInNodeModules(@NotNull Project project, @Nullable VirtualFile configFile, @NotNull String dirName, @NotNull String binName) {
        if (configFile == null) {
            return null;
        }

        VirtualFile parentDir = configFile.getParent();
        VirtualFile nodeModules = parentDir == null ? null : parentDir.findFileByRelativePath(NODE_MODULES);
        if (parentDir != null && nodeModules == null) {
            // In yarn workspaces, node_modules can be in a parent directory
            nodeModules = ORFileUtils.findAncestor(project, parentDir, NODE_MODULES);
        }

        VirtualFile binRootDir = nodeModules == null ? null : nodeModules.findFileByRelativePath(dirName);
        if (nodeModules != null && binRootDir == null) {
            VirtualFile binary = nodeModules.findFileByRelativePath(".bin/" + binName);
            if (binary != null) {
                // This must be a mono-repo, only the .bin is found
                VirtualFile canonicalFile = binary.getCanonicalFile();
                if (canonicalFile != null) {
                    if (binary.is(VFileProperty.SYMLINK)) {
                        // Mac/Linux: .bin contains symlinks to real exe, must follow
                        VirtualFile canonicalDirectory = canonicalFile.getParent();
                        while (canonicalDirectory != null && !dirName.equals(canonicalDirectory.getName())) {
                            canonicalDirectory = canonicalDirectory.getParent();
                        }
                        return canonicalDirectory;
                    } else {
                        // Windows: no symlinks, only bat files
                        VirtualFile nodModules = ORFileUtils.findAncestor(project, nodeModules.getParent(), NODE_MODULES);
                        return nodModules == null ? null : nodeModules.findFileByRelativePath(dirName);
                    }
                }
            }
        }

        return binRootDir != null && binRootDir.isDirectory() ? binRootDir : null;
    }


    public static @Nullable VirtualFile findBinary(@NotNull VirtualFile binDir, @NotNull String exeName) {
        String os = getOsPrefix();
        if (os == null) {
            LOG.warn("Unable to determine OS prefix");
            return null;
        }

        VirtualFile executable;

        // first, try to find platform-specific binary
        executable = binDir.findFileByRelativePath(os + "/" + exeName + WINDOWS_EXECUTABLE_SUFFIX);
        if (executable == null) {
            // next, try to find platform-agnostic wrappers
            executable = binDir.findFileByRelativePath(exeName + getOsBinaryWrapperExtension());
            if (executable == null) {
                // last, try old locations of binary
                executable = binDir.findFileByRelativePath("bin/" + exeName + WINDOWS_EXECUTABLE_SUFFIX);
                if (executable == null) {
                    executable = binDir.findFileByRelativePath("lib/" + exeName + WINDOWS_EXECUTABLE_SUFFIX);
                }
            }
        }

        return executable;
    }

    @VisibleForTesting
    static @NotNull String getOsBinaryWrapperExtension() {
        return SystemInfo.isWindows ? ".cmd" : "";
    }

    @VisibleForTesting
    static @Nullable String getOsPrefix() {
        if (SystemInfo.isWindows) {
            return "win32";
        }
        if (SystemInfo.isLinux) {
            return "linux";
        }
        if (SystemInfo.isMac) {
            return "darwin";
        }
        return null;
    }
}


================================================
FILE: src/main/java/com/reason/comp/ORResolvedCompiler.java
================================================
package com.reason.comp;

import com.intellij.openapi.vfs.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

/**
 * When a content root file has been found, we can associate it to its corresponding compiler.
 * Use ORCompilerManager to instantiate this class.
 */
public class ORResolvedCompiler<C extends ORCompiler> {
    protected final C myCompiler;
    protected final VirtualFile myConfigFile; // Compiler configuration file, like bsconfig.json or dune-project
    protected final VirtualFile myBinFile;

    public ORResolvedCompiler(@NotNull C compiler, @NotNull VirtualFile configFile, @Nullable VirtualFile binFile) {
        myCompiler = compiler;
        myConfigFile = configFile;
        myBinFile = binFile;
    }

    public @NotNull ORCompiler.CompilerType getType() {
        return myCompiler.getType();
    }

    public void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        myCompiler.runDefault(file, onProcessTerminated);
    }

    public @NotNull String getFullVersion() {
        return myCompiler.getFullVersion(myConfigFile);
    }

    public @NotNull VirtualFile getConfigFile() {
        return myConfigFile;
    }

    public @Nullable VirtualFile getContentRoot() {
        return myConfigFile.getParent();
    }

    public @NotNull String getPath() {
        return myBinFile == null ? "" : myBinFile.getPath();
    }
}


================================================
FILE: src/main/java/com/reason/comp/ProcessFinishedListener.java
================================================
package com.reason.comp;

import com.intellij.execution.process.*;
import org.jetbrains.annotations.*;

public class ProcessFinishedListener extends ProcessAdapter {
    private final long m_start;

    public ProcessFinishedListener() {
        this(System.currentTimeMillis());
    }

    public ProcessFinishedListener(long start) {
        m_start = start;
    }

    @Override
    public void processTerminated(@NotNull ProcessEvent event) {
        long end = System.currentTimeMillis();
        Object source = event.getSource();
        if (source instanceof ProcessHandler) {
            ((ProcessHandler) source).notifyTextAvailable("Process finished in " + formatBuildTime(end - m_start) + "\n\n", ProcessOutputTypes.SYSTEM);
        }
    }

    private static @NotNull String formatBuildTime(long milliSeconds) {
        if (milliSeconds < 1000) {
            return milliSeconds + "ms";
        }

        long seconds = milliSeconds / 1000;

        final StringBuilder sb = new StringBuilder();
        if (seconds >= 3600) {
            sb.append(seconds / 3600).append("h ");
            seconds %= 3600;
        }
        if (seconds >= 60 || !sb.isEmpty()) {
            sb.append(seconds / 60).append("m ");
            seconds %= 60;
        }
        if (seconds > 0 || !sb.isEmpty()) {
            sb.append(seconds).append("s");
        }

        return sb.toString();
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsColoredProcessHandler.java
================================================
package com.reason.comp.bs;

import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.*;
import com.intellij.openapi.util.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

class BsColoredProcessHandler extends KillableProcessHandler implements AnsiEscapeDecoder.ColoredTextAcceptor {

    private final @NotNull AnsiEscapeDecoder m_ansiEscapeDecoder = new AnsiEscapeDecoder();
    private final @Nullable ORProcessTerminated<Void> m_onProcessTerminated;

    BsColoredProcessHandler(@NotNull GeneralCommandLine commandLine, @Nullable ORProcessTerminated<Void> onProcessTerminated) throws ExecutionException {
        super(commandLine);
        m_onProcessTerminated = onProcessTerminated;
    }

    @Override
    protected void onOSProcessTerminated(int exitCode) {
        super.onOSProcessTerminated(exitCode);
        if (m_onProcessTerminated != null) {
            m_onProcessTerminated.run(null);
        }
    }

    @Override
    public final void notifyTextAvailable(@NotNull final String text, @NotNull final Key outputType) {
        m_ansiEscapeDecoder.escapeText(text, outputType, super::notifyTextAvailable);
    }

    @Override
    public void coloredTextAvailable(@NotNull String text, @NotNull Key attributes) {
        super.notifyTextAvailable(text, attributes);
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsCompiler.java
================================================
package com.reason.comp.bs;

import com.intellij.codeInsight.daemon.*;
import com.intellij.execution.process.*;
import com.intellij.execution.ui.*;
import com.intellij.notification.*;
import com.intellij.openapi.components.*;
import com.intellij.openapi.editor.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import com.reason.hints.*;
import com.reason.ide.console.*;
import com.reason.ide.console.bs.*;
import com.reason.ide.settings.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.concurrent.atomic.*;

@Service(Service.Level.PROJECT)
public final class BsCompiler implements ORCompiler {
    private static final Log LOG = Log.create("bs.compiler");

    private final Project myProject;

    private final AtomicBoolean myRefreshNinjaIsNeeded = new AtomicBoolean(true);
    private final AtomicBoolean myProcessStarted = new AtomicBoolean(false);

    private Boolean myDisabled = null; // Never call directly, use isDisabled()
    private Ninja myNinja = new Ninja(null);

    private BsCompiler(@NotNull Project project) {
        myProject = project;
    }

    @Override
    public @NotNull CompilerType getType() {
        return CompilerType.BS;
    }

    public void refreshNinjaBuild() {
        myRefreshNinjaIsNeeded.compareAndSet(false, true);
    }

    @Override
    public @NotNull String getFullVersion(@Nullable VirtualFile file) {
        return new BsProcess(myProject).getFullVersion(file);
    }

    public @NotNull String getNamespace(@NotNull VirtualFile sourceFile) {
        BsConfig bsConfig = myProject.getService(ORCompilerConfigManager.class).getNearestConfig(sourceFile);
        return bsConfig == null ? "" : bsConfig.getNamespace();
    }

    @Override
    public void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        run(file, CliType.Bs.MAKE, onProcessTerminated);
    }

    @Override
    public void run(@Nullable VirtualFile file, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        if (!isDisabled() && myProject.getService(ORSettings.class).isBsEnabled()) {
            VirtualFile configFile = BsPlatform.findConfigFile(myProject, file);
            BsConfig bsConfig = myProject.getService(ORCompilerConfigManager.class).getConfig(configFile);
            if (configFile == null || bsConfig == null) {
                return;
            }

            if (myProcessStarted.compareAndSet(false, true)) {
                ProcessHandler bscHandler = new BsProcess(myProject).create(configFile, cliType, onProcessTerminated);
                ConsoleView console = myProject.getService(ORToolWindowManager.class).getConsoleView(BsToolWindowFactory.ID);
                if (bscHandler != null && console != null) {
                    long start = System.currentTimeMillis();
                    bscHandler.addProcessListener(new ProcessFinishedListener(start));
                    bscHandler.addProcessListener(new ProcessAdapter() {
                        @Override
                        public void processTerminated(@NotNull ProcessEvent event) {
                            myProcessStarted.compareAndSet(true, false);
                            LOG.debug("Compilation process terminated, restart daemon code analyzer for all edited files");
                            DaemonCodeAnalyzer.getInstance(myProject).restart();
                        }
                    });

                    console.attachToProcess(bscHandler);
                    bscHandler.startNotify();
                    myProject.getService(InsightManager.class).downloadRincewindIfNeeded(configFile);
                }
            } else {
                myProcessStarted.compareAndSet(true, false);
            }
        }
    }

    @Override
    public boolean isConfigured(@NotNull Project project) {
        // BuckleScript doesn't require any project-level configuration
        return true;
    }

    @Override
    public boolean isAvailable(@NotNull Project project) {
        return !BsPlatform.findConfigFiles(project).isEmpty();
    }

    public @Nullable String convert(@Nullable VirtualFile virtualFile, boolean isInterface, @NotNull String fromFormat, @NotNull String toFormat, @NotNull Document document) {
        String result = null;
        if (virtualFile != null) {
            BsFormatProcess refmt = myProject.getService(BsFormatProcess.class);
            String oldText = document.getText();
            String newText = refmt.convert(virtualFile, isInterface, fromFormat, toFormat, oldText);
            // additional protection
            result = oldText.isEmpty() || newText.isEmpty() ? null : newText;
        }
        return result;
    }

    public @NotNull Ninja readNinjaBuild(@Nullable VirtualFile contentRoot) {
        if (myRefreshNinjaIsNeeded.get() && contentRoot != null) {
            VirtualFile ninjaFile = contentRoot.findFileByRelativePath("lib/bs/build.ninja");
            if (ninjaFile != null) {
                myNinja = new Ninja(FileUtil.readFileContent(ninjaFile));
            }
        }

        return myNinja;
    }
    // endregion

    private boolean isDisabled() {
        if (myDisabled == null) {
            myDisabled = Boolean.getBoolean("reasonBsbDisabled");
            if (myDisabled) {
                // Possible but you should NEVER do that
                Notifications.Bus.notify(new ORNotification("Bsb", "Bucklescript is disabled", NotificationType.WARNING));
            }
        }

        return myDisabled;
    }

    @Override
    public boolean isAvailable() {
        return !myProcessStarted.get();
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsConfig.java
================================================
package com.reason.comp.bs;

import org.jetbrains.annotations.*;

import java.util.*;

public class BsConfig {
    private final String myName;
    private final String myNamespace;
    private final String myJsxVersion;
    private final String myJsxMode;
    private final boolean myUncurried;
    private final Set<String> myExternals = new HashSet<>();
    private final Set<String> mySources = new HashSet<>();
    private final Set<String> myDevSources = new HashSet<>();
    private final Set<String> myDeps = new HashSet<>();
    private final Set<String> myBscFlags = new HashSet<>();
    private final Set<String> myOpenedDeps = new HashSet<>();
    private final String[] myPpx;
    private boolean myUseExternalAsSource = false;

    BsConfig(@NotNull String name, @Nullable String namespace, @Nullable Set<String> sources,
             @Nullable Set<String> devSources, @Nullable Set<String> externals, @Nullable Set<String> deps,
             @NotNull Set<String> bscFlags, @Nullable List<String> ppx,
             @Nullable String jsxVersion, @Nullable String jsxMode, boolean uncurried) {
        myName = name;
        myNamespace = namespace == null ? "" : namespace;
        myJsxVersion = jsxVersion;
        myJsxMode = jsxMode;
        myUncurried = uncurried;
        myPpx = ppx == null ? new String[0] : ppx.toArray(new String[0]);
        if (sources != null) {
            mySources.addAll(sources);
        }
        if (devSources != null) {
            myDevSources.addAll(devSources);
        }
        if (externals != null) {
            myExternals.addAll(externals);
        }
        if (deps != null) {
            myDeps.addAll(deps);
        }

        myBscFlags.addAll(bscFlags);
        for (String flag : myBscFlags) {
            if (flag.startsWith("-open ")) {
                String dependency = flag.substring(6).trim();
                if (!dependency.isEmpty()) {
                    myOpenedDeps.add(dependency);
                }
            }
        }
    }

    public @NotNull String getNamespace() {
        return myNamespace;
    }

    public boolean hasNamespace() {
        return !myNamespace.isEmpty();
    }

    public @NotNull Set<String> getSources() {
        return myUseExternalAsSource ? myExternals : mySources;
    }

    public @NotNull Set<String> getDevSources() {
        return myDevSources;
    }

    public @NotNull String getName() {
        return myName;
    }

    public @NotNull Set<String> getDependencies() {
        return myDeps;
    }

    public @NotNull Set<String> getBscFlags() {
        return myBscFlags;
    }

    public @NotNull Set<String> getOpenedDeps() {
        return myOpenedDeps;
    }

    public @Nullable String getJsxVersion() {
        return myJsxVersion;
    }

    public @Nullable String getJsxMode() {
        return myJsxMode;
    }

    public boolean isUncurried() {
        return myUncurried;
    }

    public @NotNull String[] getPpx() {
        return myPpx;
    }

    public void setUseExternalAsSource(boolean useExternalAsSource) {
        myUseExternalAsSource = useExternalAsSource;
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsConfigReader.java
================================================
package com.reason.comp.bs;

import static jpsplugin.com.reason.StringUtil.toFirstUpper;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.intellij.openapi.vfs.VirtualFile;
import jpsplugin.com.reason.FileUtil;

import java.util.*;
import java.util.regex.*;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class BsConfigReader {
    private static final Pattern NORMALIZE = Pattern.compile(",$");

    private BsConfigReader() {
    }

    @NotNull
    public static BsConfig read(@NotNull VirtualFile bsConfigFile) {
        return read(bsConfigFile, false);
    }

    @NotNull
    public static BsConfig read(@NotNull VirtualFile bsConfigFile, boolean useExternalAsSource) {
        BsConfig config = parse(FileUtil.readFileContent(bsConfigFile));
        config.setUseExternalAsSource(useExternalAsSource);
        return config;
    }

    @NotNull
    static BsConfig parse(@NotNull String content) {
        String normalizedContent =
                NORMALIZE
                        .matcher(content)
                        .replaceAll("")
                        .replaceAll(",[\\s\\n]*]", "]")
                        .replaceAll(",[\\s\\n]*}", "}");

        JsonElement topElement = JsonParser.parseString(normalizedContent);

        if (topElement.isJsonObject()) {
            JsonObject top = topElement.getAsJsonObject();

            String name = "";
            JsonPrimitive nameProp = top.getAsJsonPrimitive("name");
            if (nameProp != null && nameProp.isString()) {
                name = nameProp.getAsString();
            }

            String namespace = null;
            JsonPrimitive namespaceProp = top.getAsJsonPrimitive("namespace");
            if (namespaceProp != null) {
                if (namespaceProp.isBoolean()) {
                    boolean hasNamespace = namespaceProp.getAsBoolean();
                    namespace = hasNamespace ? toNamespace(name) : null;
                } else if (namespaceProp.isString()) {
                    namespace = namespaceProp.getAsString();
                }
            }

            // JSX

            String jsxVersion = null;
            String jsxMode = null;

            // BS config: {reason: {react-jsx: 3}}
            JsonElement reason = top.get("reason");
            JsonObject reasonProp =
                    reason != null && reason.isJsonObject() ? top.getAsJsonObject("reason") : null;
            if (reasonProp != null) {
                JsonPrimitive jsxProp = reasonProp.getAsJsonPrimitive("react-jsx");
                if (jsxProp != null && jsxProp.isNumber()) {
                    jsxVersion = Integer.toString(jsxProp.getAsInt());
                }
            } else {
                JsonObject jsxProp = top.getAsJsonObject("jsx");
                if (jsxProp != null) {
                    JsonPrimitive jsxVersionProp = jsxProp.getAsJsonPrimitive("version");
                    if (jsxVersionProp != null && jsxVersionProp.isNumber()) {
                        jsxVersion = Integer.toString(jsxVersionProp.getAsInt());
                    }

                    JsonPrimitive jsxModeProp = jsxProp.getAsJsonPrimitive("mode");
                    if (jsxModeProp != null && jsxModeProp.isString()) {
                        jsxMode = jsxModeProp.getAsString();
                    }
                }
            }

            // Uncurried

            boolean uncurried = true; // by default
            JsonPrimitive uncurriedProp = top.getAsJsonPrimitive("uncurried");
            if (uncurriedProp != null && uncurriedProp.isBoolean()) {
                uncurried = uncurriedProp.getAsBoolean();
            }

            // PPX

            List<String> ppx = new ArrayList<>();
            JsonArray ppxProp = top.getAsJsonArray("ppx-flags");
            if (ppxProp != null) {
                for (JsonElement item : ppxProp) {
                    if (item.isJsonPrimitive() && ((JsonPrimitive) item).isString()) {
                        String itemValue = item.getAsString();
                        if (!itemValue.isEmpty()) {
                            ppx.add(itemValue);
                        }
                    }
                }
            }

            // bs-platform/bsconfig.json
            Set<String> externals = new HashSet<>();
            JsonArray extIncludes = top.getAsJsonArray("bs-external-includes");
            if (extIncludes != null) {
                for (JsonElement item : extIncludes) {
                    if (item.isJsonPrimitive() && ((JsonPrimitive) item).isString()) {
                        externals.add(item.getAsString());
                    }
                }
            }
            externals.add("lib/ocaml"); // Because of Belt !

            Set<String> sources = new HashSet<>();
            Set<String> devSources = new HashSet<>();

            JsonElement srcProp = top.get("sources");
            if (srcProp != null) {
                readSources(srcProp, "", sources);
                readSources(srcProp, "dev", devSources);
            }

            Set<String> deps = new HashSet<>();
            JsonArray depsProp = top.getAsJsonArray("bs-dependencies");
            if (depsProp != null) {
                for (JsonElement item : depsProp) {
                    if (item.isJsonPrimitive() && ((JsonPrimitive) item).isString()) {
                        String itemValue = item.getAsString();
                        if (!itemValue.isEmpty()) {
                            deps.add(itemValue);
                        }
                    }
                }
            }

            Set<String> flags = new HashSet<>();
            JsonElement bscProp = top.get("bsc-flags");
            if (bscProp != null && bscProp.isJsonArray()) {
                for (JsonElement bscFlag : bscProp.getAsJsonArray()) {
                    if (bscFlag.isJsonPrimitive() && ((JsonPrimitive) bscFlag).isString()) {
                        String value = bscFlag.getAsString();
                        if (!value.isEmpty()) {
                            flags.add(value);
                        }
                    }
                }
            }

            return new BsConfig(name, namespace, sources, devSources, externals, deps, flags, ppx, jsxVersion, jsxMode, uncurried);
        }

        throw new RuntimeException("Not a Bucklescript config");
    }

    @NotNull
    private static String toNamespace(@NotNull String name) {
        StringBuilder result = new StringBuilder(name.replaceAll("_", ""));

        String[] tokens = result.toString().split("[-@/]");
        result = new StringBuilder(toFirstUpper(tokens[0]));
        if (1 < tokens.length) {
            for (int i = 1; i < tokens.length; i++) {
                result.append(toFirstUpper(tokens[i]));
            }
        }

        return result.toString();
    }

    private static void readSources(
            @NotNull JsonElement value, @NotNull String type, @NotNull Set<String> sources) {
        if (value.isJsonPrimitive() && ((JsonPrimitive) value).isString()) {
            if (type.isEmpty()) {
                sources.add(value.getAsString());
            }
        } else if (value.isJsonObject()) {
            assert value instanceof JsonObject;
            String src = parseSourceItem((JsonObject) value, type);
            if (src != null) {
                sources.add(src);
            }
        } else if (value.isJsonArray()) {
            for (JsonElement item : value.getAsJsonArray()) {
                if (item.isJsonPrimitive()) {
                    if (((JsonPrimitive) item).isString() && type.isEmpty()) {
                        sources.add(item.getAsString());
                    }
                } else if (item.isJsonObject()) {
                    String src = parseSourceItem((JsonObject) item, type);
                    if (src != null) {
                        sources.add(src);
                    }
                }
            }
        }
    }

    @Nullable
    private static String parseSourceItem(@NotNull JsonObject obj, @NotNull String type) {
        JsonPrimitive srcProp = obj.getAsJsonPrimitive("dir");
        if (srcProp != null) {
            JsonPrimitive typeProp = obj.getAsJsonPrimitive("type");
            String typeValue = typeProp != null && typeProp.isString() ? typeProp.getAsString() : "";
            if (type.equals(typeValue)) {
                if (srcProp.isString()) {
                    return srcProp.getAsString();
                }
            }
        }
        return null;
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsFormatProcess.java
================================================
package com.reason.comp.bs;

import com.intellij.openapi.components.*;
import com.intellij.openapi.editor.ex.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.rescript.*;
import com.reason.ide.settings.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.io.*;

import static jpsplugin.com.reason.Platform.*;

@Service(Service.Level.PROJECT)
public final class BsFormatProcess {
    private static final Log LOG = Log.create("format.refmt");

    private final Project m_project;

    public BsFormatProcess(@NotNull Project project) {
        m_project = project;
    }

    @NotNull
    public String convert(@NotNull VirtualFile sourceFile, boolean isInterface, @NotNull String fromFormat, @NotNull String toFormat, @NotNull String code) {
        VirtualFile refmtDir = BsPlatform.findRefmtExecutable(m_project, sourceFile);
        if (refmtDir == null) {
            refmtDir = ResPlatform.findRefmtExecutable(m_project, sourceFile);
            if (refmtDir == null) {
                LOG.debug("No refmt binary found, reformat cancelled");
                return code;
            }
        }

        String columnsWidth = m_project.getService(ORSettings.class).getFormatColumnWidth();
        ProcessBuilder processBuilder =
                new ProcessBuilder(refmtDir.getPath(), "-i", Boolean.toString(isInterface), "--parse=" + fromFormat, "-p", toFormat, "-w", columnsWidth);
        if (LOG.isDebugEnabled()) {
            LOG.debug("Reformatting " + sourceFile.getPath() + " (" + fromFormat + " -> " + toFormat + ") using " + columnsWidth + " cols for project [" + m_project + "]");
        }

        Process refmt = null;
        try {
            refmt = processBuilder.start();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(refmt.getOutputStream(), UTF8));
            BufferedReader reader = new BufferedReader(new InputStreamReader(refmt.getInputStream(), UTF8));
            BufferedReader errReader = new BufferedReader(new InputStreamReader(refmt.getErrorStream(), UTF8));

            writer.write(code);
            writer.flush();
            writer.close();

            Streams.waitUntilReady(reader, errReader);

            StringBuilder msgBuffer = new StringBuilder();
            if (!errReader.ready()) {
                final boolean[] empty = {true};
                reader
                        .lines()
                        .forEach(
                                line -> {
                                    if (empty[0]) {
                                        empty[0] = false;
                                    } else {
                                        msgBuffer.append('\n');
                                    }
                                    msgBuffer.append(line);
                                });
                String newText = msgBuffer.toString();
                if (!code.isEmpty() && !newText.isEmpty()) { // additional protection
                    boolean ensureNewLineAtEOF = EditorSettingsExternalizable.getInstance().isEnsureNewLineAtEOF();
                    boolean addNewLine = ensureNewLineAtEOF && newText.charAt(newText.length() - 1) != '\n';
                    return addNewLine ? newText + '\n' : newText;
                }
            }
        } catch (IOException | RuntimeException e) {
            LOG.warn(e);
        } finally {
            if (refmt != null) {
                refmt.destroyForcibly();
            }
        }

        // Something bad happened, do nothing
        return code;
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsLineProcessor.java
================================================
package com.reason.comp.bs;

import com.reason.comp.*;
import com.reason.ide.annotations.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;
import java.util.regex.*;

import static com.reason.comp.bs.BsLineProcessor.BuildStatus.*;
import static java.lang.Integer.*;

/**
 * Line processor is a state machine.
 */
public class BsLineProcessor implements CompilerOutputAnalyzer {
    private static final Pattern FILE_LOCATION = Pattern.compile("File \"(.+)\", line (\\d+), characters (\\d+)-(\\d+):\n?");
    private static final Pattern POSITIONS = Pattern.compile("[\\s:]\\d+:\\d+(-\\d+(:\\d+)?)?$");

    private final Log m_log;
    private final List<OutputInfo> m_bsbInfo = new ArrayList<>();

    @Override
    public @NotNull List<OutputInfo> getOutputInfo() {
        return m_bsbInfo;
    }

    private @Nullable OutputInfo m_latestInfo = new OutputInfo();
    private @NotNull BuildStatus m_status = BuildStatus.unknown;

    enum BuildStatus {
        unknown, //
        // warning steps
        warningDetected,
        warningLinePos,
        warningSourceExtract,
        warningMessage, //
        // error steps
        errorDetected,
        errorLinePos,
        errorSourceExtract,
        errorMessage, //
        // syntax error
        syntaxError
    }

    public BsLineProcessor(Log log) {
        m_log = log;
    }

    @Override
    public void onTextAvailable(@NotNull String text) {
        String trimmedText = text.trim();
        if (m_log.isTraceEnabled()) {
            m_log.trace(trimmedText);
        }

        switch (m_status) {
        /*
        Warning
        */
            case warningDetected:
                // Must contain warning location (file/position)
                // ...path\src\File.re 61:10
                m_latestInfo = extractFilePositions(text);
                if (m_latestInfo != null) {
                    m_latestInfo.isError = false;
                }
                m_status = warningLinePos;
                break;
            case warningLinePos:
            case errorLinePos:
                if (m_latestInfo != null && !trimmedText.isEmpty()) {
                    m_status = m_latestInfo.isError ? errorSourceExtract : warningSourceExtract;
                }
                break;
            case warningSourceExtract:
            case errorSourceExtract:
                if (m_latestInfo != null && trimmedText.isEmpty()) {
                    m_status = m_latestInfo.isError ? errorMessage : warningMessage;
                }
                break;
            case warningMessage:
            case errorMessage:
                if (trimmedText.isEmpty() || text.charAt(0) != ' ') {
                    // create bsb info
                    if (m_latestInfo != null) {
                        m_latestInfo.message = m_latestInfo.message.trim();
                    }
                    m_status = unknown;
                } else if (m_latestInfo != null) {
                    m_latestInfo.message += text;
                }
                break;
        /*
        Error
        */
            case errorDetected:
                // Must contain error location (file/position)
                // ...path\src\File.re 61:10-23
                m_latestInfo = extractFilePositions(text);
                if (m_latestInfo != null) {
                    m_latestInfo.isError = true;
                }
                m_status = errorLinePos;
                break;
            default:
                if (trimmedText.startsWith("Warning number")) {
                    reset();
                    m_status = warningDetected;
                } else if (text.startsWith("Error:")) {
                    // It's a one line message
                    m_status = syntaxError;
                    if (m_latestInfo != null) {
                        m_latestInfo.message = text.substring(6).trim();
                    }
                } else if (trimmedText.startsWith("We've found a bug for you")) {
                    if (m_status != syntaxError) {
                        reset();
                        m_status = errorDetected;
                    }
                } else if (m_latestInfo != null && trimmedText.startsWith("Hint:")) {
                    m_latestInfo.message += ". " + text.trim();
                } else if (trimmedText.startsWith("File")) {
                    m_latestInfo = extractExtendedFilePositions(trimmedText);
                }

        }
    }

    public void reset() {
        m_status = unknown;
        m_latestInfo = null;
    }

    // File "...path/src/Source.re", line 111, characters 0-3:
    private @Nullable OutputInfo extractExtendedFilePositions(@Nullable String text) {
        if (text != null) {
            Matcher matcher = FILE_LOCATION.matcher(text);
            if (matcher.matches()) {
                String path = matcher.group(1);
                String line = matcher.group(2);
                String colStart = matcher.group(3);
                String colEnd = matcher.group(4);
                OutputInfo info = addInfo(path, line, colStart, colEnd);
                if (info.colStart < 0 || info.colEnd < 0) {
                    m_log.error("Can't decode columns for [" + text + "]");
                    return null;
                }
                return info;
            }
        }

        return null;
    }

    // "...path/src/Source.re 111:21-112:22" or " ...path/src/Source.re:111:21-112:22"
    // "...path/src/Source.re 111:21-22" or "...path/src/Source.re:111:21-22"
    // "...path/src/Source.re 111:21" or "...path/src/Source.re:111:21"
    private @Nullable OutputInfo extractFilePositions(@Nullable String text) {
        if (text == null) {
            return null;
        }
        String trimmed = text.trim();
        Matcher matcher = POSITIONS.matcher(trimmed);
        // extract path and positions
        if (matcher.find()) {
            String positions = matcher.group();
            // remove positions from text to get path
            String path = text.replace(positions, "");
            // remove leading space or colon from positions
            positions = positions.substring(1);

            // split "111:21-112:22" into ["111:21", "112:22"]
            String[] startAndEndPositions = positions.split("-");

            // only start positions found, ["111:21"]
            String[] startLineAndCol = startAndEndPositions[0].split(":");
            if (startAndEndPositions.length == 1) {
                return addInfo(path, startLineAndCol[0], startLineAndCol[1], null, null);
            }

            // both start and end positions present
            if (startAndEndPositions.length == 2) {
                String[] endLineAndCol = startAndEndPositions[1].split(":");
                // "111:21-22" --> "111:21-111:22"
                if (endLineAndCol.length == 1) {
                    return addInfo(
                            path, startLineAndCol[0], startLineAndCol[1], startLineAndCol[0], endLineAndCol[0]);
                }
                // "111:21-112:22"
                if (endLineAndCol.length == 2) {
                    return addInfo(
                            path, startLineAndCol[0], startLineAndCol[1], endLineAndCol[0], endLineAndCol[1]);
                }
            }
            m_log.error("Can't decode columns for [" + text + "]");
        }
        return null;
    }

    private @NotNull OutputInfo addInfo(@NotNull String path, @NotNull String lineStart, @NotNull String colStart, @Nullable String lineEnd, @Nullable String colEnd) {
        OutputInfo info = new OutputInfo();
        info.path = path;
        info.isError = true;
        info.lineStart = parseInt(lineStart);
        info.colStart = parseInt(colStart);
        info.lineEnd = lineEnd == null ? info.lineStart : parseInt(lineEnd);
        info.colEnd = colEnd == null ? info.colStart + 1 : parseInt(colEnd) + 1;
        m_bsbInfo.add(info);
        return info;
    }

    private @NotNull OutputInfo addInfo(@NotNull String path, @NotNull String line, @NotNull String colStart, @NotNull String colEnd) {
        OutputInfo info = new OutputInfo();
        info.path = path;
        info.isError = true;
        info.lineStart = parseInt(line);
        info.colStart = parseInt(colStart);
        info.lineEnd = info.lineStart;
        info.colEnd = parseInt(colEnd);
        if (info.colEnd == info.colStart) {
            info.colEnd += 1;
        }
        m_bsbInfo.add(info);
        return info;
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsNotification.java
================================================
package com.reason.comp.bs;

import com.intellij.ide.browsers.*;
import com.intellij.notification.*;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.net.*;

import static com.intellij.notification.NotificationType.*;

public class BsNotification {

    private BsNotification() {
    }

    @Nls
    public static void showBsbNotFound(String workingDirectory) {
        ORNotification notification = new ORNotification(
                "Bsb",
                "<html>"
                        + "Can't find bsb.\n"
                        + "The working directory is '"
                        + workingDirectory
                        + "'.\n"
                        + "Be sure that bsb is installed and reachable from that directory."
                        + "</html>",
                ERROR);
        notification.addAction(new DumbAwareAction("Open documentation") {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e) {
                URI docURL = URI.create("https://giraud.github.io/reasonml-idea-plugin/docs/build-tools/bucklescript");
                BrowserLauncher.getInstance().browse(docURL);
            }
        });
        Notifications.Bus.notify(notification);
    }

    @Nls
    public static void showWorkingDirectoryNotFound() {
        Notifications.Bus.notify(
                new ORNotification(
                        "BuckleScript",
                        "<html>Can't determine working directory.\nEnsure your project contains a <b>bsconfig.json</b> file.</html>",
                        ERROR));
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsPlatform.java
================================================
package com.reason.comp.bs;

import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.search.*;
import com.reason.comp.*;
import com.reason.ide.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

import static com.reason.comp.ORConstants.*;

public class BsPlatform {
    private static final Log LOG = Log.create("bs.platform");

    private BsPlatform() {
    }

    public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Project project) {
        GlobalSearchScope scope = GlobalSearchScope.projectScope(project);

        List<VirtualFile> validConfigs = FilenameIndex.getVirtualFilesByName(BS_CONFIG_FILENAME, scope).stream()
                .filter(bsConfigFile -> {
                    VirtualFile bsbBin = ORPlatform.findCompilerPathInNodeModules(project, bsConfigFile, BS_DIR, BSC_EXE_NAME);
                    VirtualFile resBin = ORPlatform.findCompilerPathInNodeModules(project, bsConfigFile, RESCRIPT_DIR, BSC_EXE_NAME);
                    return bsbBin != null && resBin == null;
                })
                .sorted(ORFileUtils.FILE_DEPTH_COMPARATOR)
                .toList();

        if (LOG.isDebugEnabled()) {
            LOG.debug("Valid configs for project=\"" + project.getName() + "\": [" + Joiner.join(",", validConfigs) + "]");
        }

        return validConfigs;
    }

    public static @Nullable VirtualFile findConfigFile(@NotNull Project project, @Nullable VirtualFile sourceFile) {
        return sourceFile != null
                ? ORFileUtils.findAncestor(project, sourceFile, BS_CONFIG_FILENAME)
                : findConfigFiles(project).stream().findFirst().orElse(null);
    }

    public static @Nullable VirtualFile findBsbExecutable(@NotNull Project project, @Nullable VirtualFile sourceFile) {
        VirtualFile configFile = findConfigFile(project, sourceFile);
        VirtualFile binDir = ORPlatform.findCompilerPathInNodeModules(project, configFile, BS_DIR, BSB_EXE_NAME);
        return binDir != null ? ORPlatform.findBinary(binDir, BSB_EXE_NAME) : null;
    }

    public static @Nullable VirtualFile findBscExecutable(@NotNull Project project, @Nullable VirtualFile sourceFile) {
        VirtualFile configFile = findConfigFile(project, sourceFile);
        VirtualFile binDir = ORPlatform.findCompilerPathInNodeModules(project, configFile, BS_DIR, BSC_EXE_NAME);
        return binDir != null ? ORPlatform.findBinary(binDir, BSC_EXE_NAME) : null;
    }

    public static @Nullable VirtualFile findRefmtExecutable(@NotNull Project project, @NotNull VirtualFile sourceFile) {
        VirtualFile bsConfigFile = ORFileUtils.findAncestor(project, sourceFile, BS_CONFIG_FILENAME);
        VirtualFile bsDir = ORPlatform.findCompilerPathInNodeModules(project, bsConfigFile, BS_DIR, BSC_EXE_NAME);
        if (bsDir == null) {
            return null;
        }

        VirtualFile binaryInBsPlatform;

        // first, try standard name
        binaryInBsPlatform = ORPlatform.findBinary(bsDir, REFMT_EXE_NAME);
        if (binaryInBsPlatform == null) {
            // next, try alternative names
            binaryInBsPlatform = ORPlatform.findBinary(bsDir, "refmt3");
            if (binaryInBsPlatform == null) {
                binaryInBsPlatform = ORPlatform.findBinary(bsDir, "bsrefmt");
            }
        }

        return binaryInBsPlatform;
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsProcess.java
================================================
package com.reason.comp.bs;

import com.intellij.codeInsight.daemon.*;
import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.*;
import com.intellij.notification.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.io.*;

import static com.intellij.notification.NotificationType.*;

public final class BsProcess {
    private final @NotNull Project myProject;
    private @Nullable KillableProcessHandler myBsb;

    public BsProcess(@NotNull Project project) {
        myProject = project;
    }

    @Nullable ProcessHandler create(@NotNull VirtualFile source, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        try {
            if (cliType instanceof CliType.Bs) {
                return createProcessHandler(source, (CliType.Bs) cliType, onProcessTerminated);
            } else {
                Notifications.Bus.notify(new ORNotification("Bsb", "Invalid commandline type (" + cliType.getCompilerType() + ")", WARNING));
            }
        } catch (ExecutionException e) {
            ORNotification.notifyError("Bsb", "Execution exception", e.getMessage());
        }

        return null;
    }

    @Nullable
    private ProcessHandler createProcessHandler(@NotNull VirtualFile sourceFile, @NotNull CliType.Bs cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) throws ExecutionException {
        killIt();
        GeneralCommandLine cli = getGeneralCommandLine(sourceFile, cliType);
        if (cli != null) {
            myBsb = new BsColoredProcessHandler(cli, (_none) -> {
                if (onProcessTerminated != null) {
                    onProcessTerminated.run(null);
                }

                // When build is done, we need to refresh editors to be notified of the latest modifications
                DaemonCodeAnalyzer.getInstance(myProject).restart();
            });
        }
        return myBsb;
    }

    private void killIt() {
        if (myBsb != null) {
            myBsb.killProcess();
            myBsb = null;
        }
    }

    @Nullable
    private GeneralCommandLine getGeneralCommandLine(@NotNull VirtualFile sourceFile, @NotNull CliType.Bs cliType) {
        VirtualFile bsConfigFile = BsPlatform.findConfigFile(myProject, sourceFile);
        VirtualFile bsConfigDir = bsConfigFile != null ? bsConfigFile.getParent() : null;
        if (bsConfigDir == null) {
            BsNotification.showWorkingDirectoryNotFound();
            return null;
        }
        String bsConfigRootPath = bsConfigDir.getPath();
        VirtualFile bsbExecutable = BsPlatform.findBsbExecutable(myProject, sourceFile);
        if (bsbExecutable == null) {
            BsNotification.showBsbNotFound(bsConfigRootPath);
            return null;
        }
        String bsbPath = bsbExecutable.getPath();
        GeneralCommandLine cli = switch (cliType) {
            case MAKE -> new GeneralCommandLine(bsbPath, "-make-world");
            case CLEAN_MAKE -> new GeneralCommandLine(bsbPath, "-clean-world", "-make-world");
        };
        cli.withWorkDirectory(bsConfigRootPath);
        cli.withEnvironment("NINJA_ANSI_FORCED", "1");
        return cli;
    }

    public @NotNull String getFullVersion(@Nullable VirtualFile sourceFile) {
        VirtualFile bsc = BsPlatform.findBscExecutable(myProject, sourceFile);
        if (bsc != null) {
            String[] command = new String[]{bsc.getPath(), "-version"};
            try (InputStream inputStream = Runtime.getRuntime().exec(command).getInputStream()) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                return reader.readLine();
            } catch (IOException e) {
                return "error: " + e.getMessage();
            }
        }

        return "unknown (bsc not found)";
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/BsResolvedCompiler.java
================================================
package com.reason.comp.bs;

import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import org.jetbrains.annotations.*;

public class BsResolvedCompiler extends ORResolvedCompiler<BsCompiler> {
    public BsResolvedCompiler(@NotNull BsCompiler compiler, @NotNull VirtualFile contentRootFile, @Nullable VirtualFile binFile) {
        super(compiler, contentRootFile, binFile);
    }

    public @Nullable Ninja readNinja() {
        return myCompiler.readNinjaBuild(getContentRoot());
    }
}


================================================
FILE: src/main/java/com/reason/comp/bs/Ninja.java
================================================
package com.reason.comp.bs;

import org.jetbrains.annotations.*;

import java.util.*;
import java.util.stream.*;

import static java.util.Collections.*;

/**
 * REASON format (8.2.0):
 * ----------------------
 * <p>
 * g_pkg_flg = -bs-package-name bs-basic
 * src_root_dir = U:\reason\projects\bs-basic
 * bsc = "U:\reason\projects\bs-basic\node_modules\bs-platform\win32\bsc.exe"
 * bsdep = "U:\reason\projects\bs-basic\node_modules\bs-platform\win32\bsb_helper.exe"
 * warnings =
 * bsc_flags =
 * ppx_flags =
 * g_dpkg_incls =
 * g_ns =
 * g_lib_incls = -I src -I "U:\reason\projects\bs-basic\node_modules\reason-react\lib\ocaml"
 * rule build_ast_from_re
 * command = $bsc  $warnings -bs-jsx 3 $bsc_flags -o $out -bs-syntax-only -bs-binary-ast $in
 * description = Building ${out}
 * build  src\Foo.reast : build_ast_from_re $src_root_dir\src\Foo.re
 * rule mk_deps
 * command = $bsdep -hash 20de222cbd4694f33717b5139235334c $g_ns $in
 * restat = 1
 * description = Building ${out}
 * build  src\Foo.d : mk_deps src\Foo.reast
 * rule ml_cmj_cmi
 * command = $bsc $g_pkg_flg $g_lib_incls $warnings $bsc_flags -o $out $in
 * dyndep = $in_e.d
 * restat = 1
 * description = Building ${out}
 * build  src\Foo.cmj |  src\Foo.cmi $src_root_dir\lib\js\src\Foo.js : ml_cmj_cmi src\Foo.reast ||  src\Foo.d
 * g_pkg_flg = $g_pkg_flg  -bs-package-output commonjs:lib\js\src
 * <p>
 * <p>
 * RESCRIPT format (8.4.0):
 * ----------------
 * <p>
 * rescript = 1
 * g_finger := U:\reason\projects\bs-basic\node_modules\reason-react\lib\ocaml\install.stamp
 * rule astj
 * command = "U:\reason\projects\bs-basic\node_modules\bs-platform\win32\bsc.exe"  -bs-v 8.4.2 -bs-jsx 3  -absname -bs-ast -o $out $i
 * o src\Foo.ast : astj ..\..\src\Foo.re
 * rule deps
 * command = "U:\reason\projects\bs-basic\node_modules\bs-platform\win32\bsb_helper.exe" -hash 20de222cbd4694f33717b5139235334c $in
 * restat = 1
 * o src\Foo.d : deps src\Foo.ast
 * rule mij
 * command = "U:\reason\projects\bs-basic\node_modules\bs-platform\win32\bsc.exe" -I src -I "U:\reason\projects\bs-basic\node_modules\reason-react\lib\ocaml"   -bs-package-name bs-basic -bs-package-output commonjs:lib\js\$in_d:.js -bs-v $g_finger $i
 * dyndep = 1
 * restat = 1
 * o src\Foo.cmj src\Foo.cmi ..\js\src\Foo.js : mij src\Foo.ast
 */
public final class Ninja {
    private final @NotNull List<String> m_includes;
    private final @NotNull List<String> m_ppxIncludes;
    private final @NotNull List<String> m_pkgFlags;
    private final @NotNull List<String> m_bscFlags;

    private final @NotNull List<String> m_args = new ArrayList<>();
    private final @NotNull List<String> m_argsDev = new ArrayList<>();
    private final boolean m_isRescriptFormat;

    public Ninja(@Nullable String contents) {
        m_isRescriptFormat = contents != null && contents.startsWith("rescript");
        m_includes = readIncludes(contents);
        m_ppxIncludes = readPpxIncludes(contents);
        m_pkgFlags = readPkgFlags(contents);
        m_bscFlags = readBscFlags(contents);

        if (m_isRescriptFormat) {
            List<String> astj = extractRuleAstj(contents);
            m_args.addAll(astj);
            m_args.addAll(extractRuleMij(contents));
            m_argsDev.addAll(astj);
            m_argsDev.addAll(extractRuleMijDev(contents));
        }
    }

    private @NotNull List<String> extractRuleAstj(@NotNull String contents) {
        List<String> filteredTokens = new ArrayList<>();

        int ruleMijPos = contents.indexOf("rule astj");
        if (0 < ruleMijPos) {
            int commandPos = contents.indexOf("command", ruleMijPos);
            if (0 < commandPos) {
                int commandEolPos = contents.indexOf("\n", commandPos);
                String command = contents.substring(commandPos + 9, commandEolPos).trim();
                String[] tokens = command.split(" ");

                for (int i = 0; i < tokens.length; i++) {
                    String token = tokens[i];
                    if ("-ppx".equals(token)) {
                        filteredTokens.add(token);
                        filteredTokens.add(tokens[i + 1]);
                    }
                }
            }
        }
        return filteredTokens;
    }

    private @NotNull List<String> extractMijCommand(int rulePos, @NotNull String contents) {
        int commandPos = contents.indexOf("command", rulePos);
        if (0 < commandPos) {
            int commandEolPos = contents.indexOf("\n", commandPos);
            String command = contents.substring(commandPos + 9, commandEolPos).trim();
            String[] tokens = command.split(" ");
            List<String> filteredTokens = Arrays.stream(tokens).filter(s -> !s.isEmpty() && !"$g_finger".equals(s) && !"$i".equals(s) && !"-bs-v".equals(s) && !"-bs-package-output".equals(s) && !s.contains("$in_d:")).collect(Collectors.toList());
            filteredTokens.remove(0);
            return filteredTokens;
        }
        return emptyList();
    }

    private @NotNull List<String> extractRuleMij(@NotNull String contents) {
        int ruleMijPos = contents.indexOf("rule mij");
        if (0 < ruleMijPos) {
            String ruleValue = contents.substring(ruleMijPos, ruleMijPos + 12);
            if ("rule mij_dev".equals(ruleValue)) {
                // search again
                ruleMijPos = contents.indexOf("rule mij", ruleMijPos + 12);
                if (0 < ruleMijPos) {
                    return extractMijCommand(ruleMijPos, contents);
                }
            } else {
                return extractMijCommand(ruleMijPos, contents);
            }
        }
        return emptyList();
    }

    private @NotNull List<String> extractRuleMijDev(@NotNull String contents) {
        int ruleMijPos = contents.indexOf("rule mij_dev");
        if (0 < ruleMijPos) {
            return extractMijCommand(ruleMijPos, contents);
        }
        return emptyList();
    }

    public @NotNull List<String> getArgs() {
        return m_args;
    }

    public @NotNull List<String> getArgsDev() {
        return m_argsDev;
    }

    private @NotNull List<String> readIncludes(@Nullable String contents) {
        List<String> result = new ArrayList<>();
        if (contents == null) {
            return result;
        }

        int g_lib_incls = contents.indexOf("g_lib_incls");
        if (g_lib_incls >= 0) {
            int end_of_g_lib_incls = contents.indexOf("\n", g_lib_incls);
            String lineContents = contents.substring(g_lib_incls + 13, end_of_g_lib_incls).trim();
            for (String token : lineContents.split("-I\\s")) {
                String trimmedToken = token.trim();
                if (!trimmedToken.isEmpty()) {
                    if (trimmedToken.startsWith("\"")) {
                        result.add(trimmedToken.substring(1, trimmedToken.length() - 1));
                    } else {
                        result.add(trimmedToken);
                    }
                }
            }
        }

        int g_dpkg_incls = contents.indexOf("g_dpkg_incls");
        if (g_dpkg_incls >= 0) {
            int end_of_g_dpkg_incls = contents.indexOf("\n", g_dpkg_incls);
            String lineContents = contents.substring(g_dpkg_incls + 14, end_of_g_dpkg_incls).trim();
            for (String token : lineContents.split("-I\\s")) {
                String trimmedToken = token.trim();
                if (!trimmedToken.isEmpty()) {
                    if (trimmedToken.startsWith("\"")) {
                        result.add(trimmedToken.substring(1, trimmedToken.length() - 1));
                    } else {
                        result.add(trimmedToken);
                    }
                }
            }
        }

        return result;
    }

    public @NotNull List<String> readPpxIncludes(@Nullable String contents) {
        List<String> result = new ArrayList<>();
        if (contents == null) {
            return result;
        }

        int ppx_flags = contents.indexOf("ppx_flags");
        if (ppx_flags >= 0) {
            int end_of_ppx_flags = contents.indexOf("\n", ppx_flags);
            String ppxLine = contents.substring(ppx_flags + 11, end_of_ppx_flags).trim();
            String[] split = ppxLine.split("-ppx\\s");
            for (String include : split) {
                String trimmedInclude = include.trim();
                if (!trimmedInclude.isEmpty()) {
                    if (trimmedInclude.startsWith("\"")) {
                        result.add(trimmedInclude.substring(1, trimmedInclude.length() - 1));
                    } else {
                        result.add(trimmedInclude);
                    }
                }
            }
        }

        return result;
    }

    private @NotNull List<String> readPkgFlags(@Nullable String contents) {
        List<String> result = new ArrayList<>();
        if (contents == null) {
            return result;
        }

        int property = contents.indexOf("g_pkg_flg");
        if (property >= 0) {
            int end_of_property = contents.indexOf("\n", property);
            String lineContents = contents.substring(property + 11, end_of_property).trim();
            for (String tokens : lineContents.split("\\s")) {
                String trimmedToken = tokens.trim();
                if (!trimmedToken.isEmpty()) {
                    result.add(trimmedToken);
                }
            }
        }

        return result;
    }

    private @NotNull List<String> readBscFlags(@Nullable String contents) {
        List<String> result = new ArrayList<>();
        if (contents == null) {
            return result;
        }

        int property = contents.indexOf("bsc_flags");
        if (property >= 0) {
            int end_of_property = contents.indexOf("\n", property);
            String lineContents = contents.substring(property + 11, end_of_property).trim();
            for (String token : lineContents.split("\\s")) {
                String trimmedToken = token.trim();
                if (!trimmedToken.isEmpty()) {
                    result.add(trimmedToken);
                }
            }
        }

        return result;
    }

    public void addInclude(@NotNull String source) {
        m_includes.add(source);
    }

    public @NotNull List<String> getPkgFlags() {
        return m_pkgFlags;
    }

    public @NotNull List<String> getBscFlags() {
        return m_bscFlags;
    }

    public @NotNull List<String> getPpxIncludes() {
        return m_ppxIncludes;
    }

    public @NotNull List<String> getIncludes() {
        return m_includes;
    }

    public boolean isRescriptFormat() {
        return m_isRescriptFormat;
    }
}


================================================
FILE: src/main/java/com/reason/comp/dune/DuneCompiler.java
================================================
package com.reason.comp.dune;

import com.intellij.execution.process.*;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import com.reason.comp.esy.*;
import com.reason.hints.*;
import com.reason.ide.console.*;
import com.reason.ide.console.dune.*;
import com.reason.ide.settings.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.concurrent.atomic.*;

@Service(Service.Level.PROJECT)
public final class DuneCompiler implements ORCompiler {
    private static final Log LOG = Log.create("dune.compiler");

    private final @NotNull Project myProject;
    private final AtomicBoolean myProcessStarted = new AtomicBoolean(false);

    DuneCompiler(@NotNull Project project) {
        myProject = project;
    }

    @Override
    public @NotNull CompilerType getType() {
        return CompilerType.DUNE;
    }

    @Override
    public @NotNull String getFullVersion(@Nullable VirtualFile file) {
        /* Dune version, but we don't care in fact. We are interested in OCaml version. *
        GeneralCommandLine cli = new DuneProcess.DuneCommandLine(myProject, "dune")
                .addParameters(CliType.Dune.VERSION)
                .create(file);

        try (InputStream inputStream = Runtime.getRuntime().exec(cli.getCommandLineString(), new String[]{}, cli.getWorkDirectory()).getInputStream()) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            return reader.readLine();
        } catch (IOException e) {
            return "error: " + e.getMessage();
        }
        /*
        String version = "unknown ";

        version += " - not implemented yet";
        //DuneFacet duneFacet = DunePlatform.getFacet(myProject, file);
        //if (duneFacet == null) {
        //    return version + "(dune facet not found)";
        //} else {
        //    Sdk odk = duneFacet.getODK();
        //    SdkTypeId sdkType = odk == null ? null : odk.getSdkType();
        //    if (sdkType == null) {
        //        return version + "(SDK not found)";
        //    }
        //    version = sdkType.getVersionString(odk);
        //}

        return "Dune ( OCaml:" + version + " )";
        */
        ORSettings settings = myProject.getService(ORSettings.class);
        return "Dune (OCaml:" + settings.getSwitchName() + ")";
    }

    @Override
    public boolean isConfigured(@NotNull Project project) {
        ORSettings settings = project.getService(ORSettings.class);
        return !settings.getOpamLocation().isEmpty() && settings.getSwitchName() != null;
    }

    @Override
    public boolean isAvailable(@NotNull Project project) {
        return !EsyPlatform.isEsyProject(project) && !DunePlatform.findConfigFiles(project).isEmpty();
    }

    @Override
    public void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        run(file, CliType.Dune.BUILD, onProcessTerminated);
    }

    @Override
    public void run(@Nullable VirtualFile file, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        if (!(cliType instanceof CliType.Dune)) {
            LOG.error("Invalid cliType for dune compiler. cliType = " + cliType);
            return;
        }
        if (myProject.isDisposed()) {
            return;
        }

        if (myProcessStarted.compareAndSet(false, true)) {
            VirtualFile sourceFile = DunePlatform.findConfigFiles(myProject).stream().findFirst().orElse(null);
            DuneConsoleView console = (DuneConsoleView) myProject.getService(ORToolWindowManager.class).getConsoleView(DuneToolWindowFactory.ID);
            DuneProcess process = new DuneProcess(myProject);
            ProcessHandler processHandler = sourceFile == null ? null : process.create(sourceFile, cliType, onProcessTerminated);
            if (processHandler != null && console != null) {
                processHandler.addProcessListener(new CompilerOutputListener(myProject, new DuneOutputAnalyzer()));
                processHandler.addProcessListener(new ProcessFinishedListener());
                processHandler.addProcessListener(new ProcessAdapter() {
                    @Override public void processTerminated(@NotNull ProcessEvent event) {
                        myProcessStarted.compareAndSet(true, false);
                    }
                });

                console.attachToProcess(processHandler);
                process.startNotify();

                myProject.getService(InsightManager.class).downloadRincewindIfNeeded(sourceFile);
            } else {
                myProcessStarted.compareAndSet(true, false);
            }
        }
    }

    @Override
    public boolean isAvailable() {
        return !myProcessStarted.get();
    }
}


================================================
FILE: src/main/java/com/reason/comp/dune/DuneOutputAnalyzer.java
================================================
package com.reason.comp.dune;

import com.reason.comp.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

// See tests for error messages patterns
// Need some version aware analyzer ? see https://github.com/giraud/reasonml-idea-plugin/issues/174
public class DuneOutputAnalyzer extends ORCompilerOutputAnalyzer {
    private static final Log LOG = Log.create("dune.output");

    /*
     unknown -> fileLocation

     fileLocation -> message
                  -> sourceCode

     sourceCode -> message
     */
    enum OutputState {
        unknown,
        fileLocation,
        sourceCode,
        message,
    }

    private @NotNull OutputState myState = OutputState.unknown;

    @Override
    public void onTextAvailable(@NotNull String line) {
        // State transition: unknown -> fileLocation
        if (line.startsWith("File") && myState == OutputState.unknown) {
            myCurrentInfo = extractExtendedFilePositions(LOG, line);
            myState = OutputState.fileLocation;
        }
        // State transition: fileLocation|sourceCode -> message [ERROR]
        else if (line.startsWith("Error:") && (myState == OutputState.fileLocation || myState == OutputState.sourceCode)) {
            myState = OutputState.message;
            if (myCurrentInfo != null) {
                myCurrentInfo.isError = true;
                myCurrentInfo.message = line.substring(6).trim();
            }
        }
        // Error message might be on multiple lines
        else if (myState == OutputState.message && myCurrentInfo != null && myCurrentInfo.isError && line.startsWith(" ")) {
            boolean endMessage = true;

            String trimmedLine = line.trim();
            if (!trimmedLine.isEmpty() && !trimmedLine.startsWith("File")) {
                myCurrentInfo.message += " " + trimmedLine;
                endMessage = trimmedLine.endsWith(".");
            }

            if (endMessage) {
                myState = OutputState.unknown;
                myCurrentInfo = null;
            }
        }
        // State transition: fileLocation|sourceCode -> message [WARNING]
        else if (line.startsWith("Warning") && (myState == OutputState.fileLocation || myState == OutputState.sourceCode)) {
            myState = OutputState.message;
            if (myCurrentInfo != null) {
                myCurrentInfo.isError = false;
                int pos = line.indexOf(":");
                myCurrentInfo.message = line.substring(pos + 1).trim();
            }
        }
        // State transition: fileLocation -> sourceCode
        else if (myState == OutputState.fileLocation) {
            myState = OutputState.sourceCode;
        }
        // Fallback
        else if (myState != OutputState.sourceCode && myState != OutputState.unknown) {
            myState = OutputState.unknown;
            myCurrentInfo = null;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/dune/DunePlatform.java
================================================
package com.reason.comp.dune;

import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.*;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.search.*;
import com.reason.ide.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

public class DunePlatform {
    public static final String DUNE_EXECUTABLE_NAME = "dune";
    public static final String DUNE_PROJECT_FILENAME = "dune-project";
    public static final String DUNE_FILENAME = "dune";
    public static final String LEGACY_JBUILDER_FILENAME = "jbuild";

    private DunePlatform() {
    }

    public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Project project) {
        GlobalSearchScope scope = GlobalSearchScope.projectScope(project);

        return FilenameIndex.getVirtualFilesByName(DUNE_PROJECT_FILENAME, scope).stream()
                .sorted(ORFileUtils.FILE_DEPTH_COMPARATOR)
                .toList();
    }

    public static @Nullable VirtualFile findContentRoot(@NotNull Project project, @NotNull VirtualFile sourceFile) {
        Module module = Platform.getModule(project, sourceFile);
        ModuleRootManager rootManager = module != null ? ModuleRootManager.getInstance(module) : null;
        VirtualFile[] contentRoots = rootManager != null ? rootManager.getContentRoots() : null;
        return contentRoots != null ? contentRoots[0] : null;
    }
}


================================================
FILE: src/main/java/com/reason/comp/dune/DuneProcess.java
================================================
package com.reason.comp.dune;

import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import com.reason.comp.ocaml.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

public final class DuneProcess {
    private final @NotNull Project myProject;
    private @Nullable KillableColoredProcessHandler myProcessHandler;

    DuneProcess(@NotNull Project project) {
        myProject = project;
    }

    // Wait for the tool window to be ready before starting the process
    public void startNotify() {
        if (myProcessHandler != null && !myProcessHandler.isStartNotified()) {
            try {
                myProcessHandler.startNotify();
            } catch (Throwable e) {
                // already done ?
            }
        }
    }

    public @Nullable ProcessHandler create(@NotNull VirtualFile source, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        try {
            killIt();

            GeneralCommandLine cli = new DuneCommandLine(myProject, DunePlatform.DUNE_EXECUTABLE_NAME)
                    .addParameters((CliType.Dune) cliType)
                    .create(source);

            if (cli != null) {
                myProcessHandler = new KillableColoredProcessHandler(cli);
                if (onProcessTerminated != null) {
                    myProcessHandler.addProcessListener(new ProcessAdapter() {
                        @Override
                        public void processTerminated(@NotNull ProcessEvent event) {
                            onProcessTerminated.run(null);
                        }
                    });
                }
            }
            return myProcessHandler;
        } catch (ExecutionException e) {
            ORNotification.notifyError("Dune", "Execution exception", e.getMessage());
            return null;
        }
    }

    private void killIt() {
        if (myProcessHandler != null) {
            myProcessHandler.killProcess();
            myProcessHandler = null;
        }
    }

    static class DuneCommandLine extends OpamCommandLine {
        private final List<String> m_parameters = new ArrayList<>();

        DuneCommandLine(@NotNull Project project, @NotNull String binary) {
            super(project, binary);
        }

        @Override
        protected @NotNull List<String> getParameters() {
            return m_parameters;
        }

        @NotNull DuneCommandLine addParameters(@NotNull CliType.Dune cliType) {
            switch (cliType) {
                case VERSION:
                    m_parameters.add("--version");
                case CLEAN:
                    m_parameters.add("clean");
                    break;
                case BUILD:
                default:
                    m_parameters.add("build");
            }
            m_parameters.add("--root=.");
            return this;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/esy/Esy.java
================================================
package com.reason.comp.esy;

import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import jpsplugin.com.reason.Platform;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
import org.jetbrains.annotations.NotNull;

public class Esy {

  private Esy() {}

  public static Optional<VirtualFile> findEsyExecutable() {
    Optional<Path> esyExecutablePath = findEsyExecutableInPath();
    if (esyExecutablePath.isPresent()) {
      LocalFileSystem fileSystem = LocalFileSystem.getInstance();
      return Optional.ofNullable(fileSystem.findFileByPath(esyExecutablePath.get().toString()));
    }
    return findEsyExecutableInstalledWithN();
  }

  private static Optional<VirtualFile> findEsyExecutableInstalledWithN() {
    String homeDirectory = System.getProperty("user.home");
    LocalFileSystem fileSystem = LocalFileSystem.getInstance();
    Path executablePath = Paths.get(homeDirectory, ".n", "bin", EsyConstants.ESY_EXECUTABLE_NAME);
    return Optional.ofNullable(fileSystem.findFileByPath(executablePath.toString()));
  }

  private static @NotNull Optional<Path> findEsyExecutableInPath() {
    String systemPath = System.getenv("PATH");
    return Platform.findExecutableInPath(EsyConstants.ESY_EXECUTABLE_NAME, systemPath);
  }
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyCompiler.java
================================================
package com.reason.comp.esy;

import com.intellij.execution.process.*;
import com.intellij.execution.ui.*;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import com.reason.comp.dune.*;
import com.reason.hints.*;
import com.reason.ide.console.*;
import com.reason.ide.console.esy.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.concurrent.atomic.*;

@Service(Service.Level.PROJECT)
public final class EsyCompiler implements ORCompiler {
    private static final Log LOG = Log.create("compiler.esy");

    private final @NotNull Project myProject;
    private final @NotNull AtomicBoolean myProcessStarted = new AtomicBoolean(false);

    EsyCompiler(@NotNull Project project) {
        myProject = project;
    }

    @Override
    public @NotNull CompilerType getType() {
        return CompilerType.ESY;
    }

    @Override
    public @NotNull String getFullVersion(@Nullable VirtualFile file) {
        return "unknown";
    }

    @Override
    public void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        run(file, CliType.Esy.BUILD, onProcessTerminated);
    }

    @Override
    public void run(@Nullable VirtualFile file, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        if (!(cliType instanceof CliType.Esy)) {
            LOG.error("Invalid cliType for esy compiler. cliType = " + cliType);
            return;
        }
        if (myProject.isDisposed()) {
            return;
        }

        if (myProcessStarted.compareAndSet(false, true)) {
            VirtualFile sourceFile = file != null ? file : EsyPlatform.findConfigFiles(myProject).stream().findFirst().orElse(null);
            ConsoleView console = myProject.getService(ORToolWindowManager.class).getConsoleView(EsyToolWindowFactory.ID);

            if (sourceFile != null && console != null) {
                EsyProcess process = new EsyProcess(myProject);
                ProcessHandler processHandler = process.create(sourceFile, cliType, onProcessTerminated);
                if (processHandler != null) {
                    processHandler.addProcessListener(new CompilerOutputListener(myProject, new DuneOutputAnalyzer()));
                    processHandler.addProcessListener(new ProcessFinishedListener());
                    processHandler.addProcessListener(new ProcessAdapter() {
                        @Override public void processTerminated(@NotNull ProcessEvent event) {
                            myProcessStarted.compareAndSet(true, false);
                        }
                    });

                    console.attachToProcess(processHandler);
                    process.startNotify();

                    myProject.getService(InsightManager.class).downloadRincewindIfNeeded(sourceFile);
                } else {
                    myProcessStarted.compareAndSet(true, false);
                }
            }
        }
    }

    @Override
    public boolean isConfigured(@NotNull Project project) {
        // Esy compiler doesn't require any project-level configuration
        return true;
    }

    @Override
    public boolean isAvailable(@NotNull Project project) {
        return EsyPlatform.isEsyProject(myProject);
    }

    @Override
    public boolean isAvailable() {
        return !myProcessStarted.get();
    }
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyConstants.java
================================================
package com.reason.comp.esy;

public class EsyConstants {

  public static final String ESY_CONFIG_FILENAME = "package.json";

  public static final String ESY_EXECUTABLE_NAME = "esy";

  private EsyConstants() {}
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyNotification.java
================================================
package com.reason.comp.esy;

import static com.intellij.notification.NotificationType.ERROR;

import com.intellij.notification.Notifications;
import jpsplugin.com.reason.ORNotification;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;

public class EsyNotification {
    private EsyNotification() {
    }

    @Nls
    public static void showEsyProjectNotFound() {
        Notifications.Bus.notify(
                new ORNotification("Esy Project Not Found", "Unable to find esy project. Have you run esy yet?", ERROR));
    }

    @Nls
    public static void showExecutionException(@NotNull Exception e) {
        Notifications.Bus.notify(
                new ORNotification("Esy Exception", "Failed to execute esy command.\n" + e.getMessage(), ERROR));
    }
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyPackageJson.java
================================================
package com.reason.comp.esy;

import com.google.gson.*;
import com.intellij.framework.detection.*;
import com.intellij.openapi.vfs.*;
import com.intellij.patterns.*;
import com.intellij.util.*;
import com.intellij.util.indexing.*;
import org.jetbrains.annotations.*;

import java.io.*;

import static com.reason.comp.esy.EsyConstants.*;
import static java.nio.charset.StandardCharsets.*;

public class EsyPackageJson {
    private EsyPackageJson() {
    }

    /* detects any "package.json" with a top-level "esy" property */
    public static boolean isEsyPackageJson(@Nullable VirtualFile file) {
        if (file != null && "json".equals(file.getExtension())) {
            try {
                return FileContentPattern.fileContent()
                        .withName(ESY_CONFIG_FILENAME)
                        .with(new FileContentPatternCondition())
                        .accepts(FileContentImpl.createByFile(file));
            } catch (IOException e) {
                return false;
            }
        }
        return false;
    }

    private static class FileContentPatternCondition extends PatternCondition<FileContent> {
        public FileContentPatternCondition() {
            super("esyPackageJsonPattern");
        }

        // No PSI here, not allowed
        @Override
        public boolean accepts(@NotNull FileContent fileContent, ProcessingContext context) {
            try {
                JsonElement jsonContent = JsonParser.parseString(new String(fileContent.getContent(), UTF_8));

                if (jsonContent.isJsonObject()) {
                    JsonObject top = jsonContent.getAsJsonObject();
                    return top.has("esy");
                }
            } catch (JsonSyntaxException e) {
                return false;
            }

            return false;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyPlatform.java
================================================
package com.reason.comp.esy;

import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.search.*;
import com.reason.comp.bs.*;
import com.reason.ide.*;
import com.reason.ide.settings.*;
import org.jetbrains.annotations.*;

import java.util.*;

import static com.reason.comp.esy.EsyConstants.*;

public class EsyPlatform {
    private EsyPlatform() {
    }

    public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Project project) {
        return BsPlatform.findConfigFiles(project);
    }

    public static boolean isEsyProject(@NotNull Project project) {
        return !findEsyConfigurationFiles(project).isEmpty();
    }

    public static List<VirtualFile> findEsyConfigurationFiles(@NotNull Project project) {
        return FilenameIndex.getVirtualFilesByName(ESY_CONFIG_FILENAME, GlobalSearchScope.projectScope(project))
                .stream()
                .filter(EsyPackageJson::isEsyPackageJson)
                .sorted(ORFileUtils.FILE_DEPTH_COMPARATOR)
                .toList();
    }

    public static List<VirtualFile> findEsyContentRoots(@NotNull Project project) {
        return findEsyConfigurationFiles(project)
                .stream()
                .map(VirtualFile::getParent)
                .toList();
    }

    public static Optional<VirtualFile> findEsyExecutable(@NotNull Project project) {
        String esyExecutable = project.getService(ORSettings.class).getEsyExecutable();
        if (esyExecutable.isEmpty()) {
            return Esy.findEsyExecutable();
        }
        return Optional.ofNullable(LocalFileSystem.getInstance().findFileByPath(esyExecutable));
    }
}


================================================
FILE: src/main/java/com/reason/comp/esy/EsyProcess.java
================================================
package com.reason.comp.esy;

import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import com.reason.comp.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;
import java.util.function.*;

public class EsyProcess {
    private static final Log LOG = Log.create("process.esy");

    private final @NotNull Project myProject;

    @Nullable
    private KillableColoredProcessHandler processHandler;

    EsyProcess(@NotNull Project project) {
        myProject = project;
    }

    public void startNotify() {
        if (processHandler != null && !processHandler.isStartNotified()) {
            try {
                processHandler.startNotify();
            } catch (Exception e) {
                LOG.error("Exception when calling 'startNotify'.", e);
            }
        }
    }

    @Nullable
    public ProcessHandler create(@NotNull VirtualFile source, @NotNull CliType cliType, @Nullable ORProcessTerminated<Void> onProcessTerminated) {
        killIt();

        VirtualFile workingDir = findWorkingDirectory(myProject);
        if (workingDir == null) {
            return null;
        }

        Optional<VirtualFile> esyExecutableOptional = EsyPlatform.findEsyExecutable(myProject);
        if (esyExecutableOptional.isEmpty()) {
            return null;
        }

        VirtualFile esyExecutable = esyExecutableOptional.get();

        GeneralCommandLine cli = newCommandLine(esyExecutable, workingDir, (CliType.Esy) cliType);
        try {
            processHandler = new KillableColoredProcessHandler(cli);
        } catch (ExecutionException e) {
            EsyNotification.showExecutionException(e);
            return null;
        }

        if (onProcessTerminated != null) {
            processHandler.addProcessListener(processTerminatedListener.apply(onProcessTerminated));
        }

        return processHandler;
    }

    private void killIt() {
        if (processHandler == null || processHandler.isProcessTerminating() || processHandler.isProcessTerminated()) {
            return;
        }
        processHandler.killProcess();
        processHandler = null;
    }

    private static GeneralCommandLine newCommandLine(@NotNull VirtualFile esyExecutable, @NotNull VirtualFile workingDir, @NotNull CliType.Esy cliType) {
        GeneralCommandLine commandLine;
        commandLine = new GeneralCommandLine(esyExecutable.getPath());
        commandLine.setWorkDirectory(workingDir.getPath());
        commandLine.setRedirectErrorStream(true);
        commandLine.addParameter(getCommand(cliType)); // 'esy + command' must be a single parameter
        return commandLine;
    }

    private static @NotNull String getCommand(@NotNull CliType.Esy cliType) {
        return switch (cliType) {
            case INSTALL -> "install";
            case BUILD -> "build";
            case SHELL -> "shell";
        };
    }

    private static @Nullable VirtualFile findWorkingDirectory(@NotNull Project project) {
        VirtualFile contentRoot = EsyPlatform.findEsyContentRoots(project).stream().findFirst().orElse(null);
        if (contentRoot == null) {
            EsyNotification.showEsyProjectNotFound();
        }
        return contentRoot;
    }

    private static final Function<ORProcessTerminated<Void>, ProcessListener> processTerminatedListener = (onProcessTerminated) ->
            new ProcessAdapter() {
                @Override
                public void processTerminated(@NotNull ProcessEvent event) {
                    onProcessTerminated.run(null);
                }
            };
}


================================================
FILE: src/main/java/com/reason/comp/ocaml/OcamlFormatProcess.java
================================================
package com.reason.comp.ocaml;

import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.*;
import com.intellij.openapi.vfs.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.io.*;
import java.util.*;

import static jpsplugin.com.reason.Platform.*;

@Service(Service.Level.PROJECT)
public final class OcamlFormatProcess {
    private static final Log LOG = Log.create("format.ocaml.process");

    private final Project myProject;

    public OcamlFormatProcess(Project project) {
        myProject = project;
    }

    public @NotNull String format(@NotNull VirtualFile file, @NotNull String textToFormat) {
        GeneralCommandLine commandLine = new OCamlFormatCommandLine(myProject, "ocamlformat").addParameters(file).create(file);
        if (commandLine != null && !textToFormat.isEmpty()) {
            Process fmt = null;
            try {
                fmt = commandLine.createProcess();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fmt.getOutputStream(), UTF8));
                BufferedReader reader = new BufferedReader(new InputStreamReader(fmt.getInputStream(), UTF8));
                BufferedReader errReader = new BufferedReader(new InputStreamReader(fmt.getErrorStream(), UTF8));

                writer.write(textToFormat);
                writer.flush();
                writer.close();

                Streams.waitUntilReady(reader, errReader);

                StringBuilder msgBuffer = new StringBuilder();
                if (!errReader.ready()) {
                    final boolean[] empty = {true};
                    reader
                            .lines()
                            .forEach(line -> {
                                if (empty[0]) {
                                    empty[0] = false;
                                } else {
                                    msgBuffer.append('\n');
                                }
                                msgBuffer.append(line);
                            });
                    String newText = msgBuffer.toString();
                    if (!newText.isEmpty()) { // additional protection
                        return newText;
                    }
                } else {
                    errReader.lines().forEach(line -> msgBuffer.append(line).append('\n'));
                    LOG.warn(StringUtil.trimLastCR(msgBuffer.toString()));
                }
            } catch (IOException | RuntimeException | ExecutionException e) {
                LOG.warn(e);
            } finally {
                if (fmt != null) {
                    fmt.destroyForcibly();
                }
            }
        }

        return textToFormat;
    }

    static class OCamlFormatCommandLine extends OpamCommandLine {
        private final List<String> m_parameters = new ArrayList<>();

        OCamlFormatCommandLine(@NotNull Project project, @NotNull String binary) {
            super(project, binary, false);
        }

        @NotNull OCamlFormatCommandLine addParameters(@NotNull VirtualFile file) {
            m_parameters.add("-"); // use stdin
            m_parameters.add("--name");
            m_parameters.add(file.getName());
            return this;
        }

        @Override
        protected @NotNull List<String> getParameters() {
            return m_parameters;
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/ocaml/OpamCommandLine.java
================================================
package com.reason.comp.ocaml;

import com.intellij.execution.configurations.*;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.*;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.vfs.*;
import com.intellij.util.containers.*;
import com.reason.ide.settings.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

import static com.intellij.openapi.application.ApplicationManager.*;

public abstract class OpamCommandLine {
    private static final Log LOG = Log.create("ocaml.opam");
    public static final VirtualFile[] EMPTY_VFILES = new VirtualFile[0];

    private final Project myProject;
    private final String myBinary;
    private final boolean myRedirectErrorStream;

    OpamCommandLine(@NotNull Project project, @NotNull String binary, boolean redirectErrorStream) {
        myProject = project;
        myBinary = binary;
        myRedirectErrorStream = redirectErrorStream;
    }

    protected OpamCommandLine(@NotNull Project project, @NotNull String binary) {
        this(project, binary, true);
    }

    protected abstract @NotNull List<String> getParameters();

    public @Nullable GeneralCommandLine create(@NotNull VirtualFile source) {
        ORSettings settings = myProject.getService(ORSettings.class);
        String opamLocation = settings.getOpamLocation();
        if (!opamLocation.isEmpty()) {
            String switchLocation = opamLocation + "/" + settings.getSwitchName();
            String binPath = switchLocation + "/bin";

            Module module = Platform.getModule(myProject, source);
            VirtualFile[] contentRoots = module == null ? EMPTY_VFILES : ModuleRootManager.getInstance(module).getContentRoots();
            if (contentRoots.length > 0) {
                GeneralCommandLine cli = new GeneralCommandLine(ContainerUtil.prepend(getParameters(), myBinary));
                cli.withParentEnvironmentType(GeneralCommandLine.ParentEnvironmentType.CONSOLE);
                cli.setWorkDirectory(contentRoots[0].getPath());
                cli.setRedirectErrorStream(myRedirectErrorStream);

                Map<String, String> env = getApplication().getService(OpamEnv.class).getEnv(settings.getSwitchName());
                if (env != null) {
                    for (Map.Entry<String, String> entry : env.entrySet()) {
                        cli.withEnvironment(entry.getKey(), entry.getValue());
                    }
                }

                OCamlExecutable executable = OCamlExecutable.getExecutable(opamLocation, settings.getCygwinBash());
                return executable.patchCommandLine(cli, null, false);
            } else {
                LOG.debug("Content roots", contentRoots);
                LOG.debug("Binary directory", binPath);
            }
        }

        return null;
    }
}


================================================
FILE: src/main/java/com/reason/comp/ocaml/OpamEnv.java
================================================
package com.reason.comp.ocaml;

import com.intellij.openapi.application.*;
import com.intellij.openapi.components.*;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.util.*;

@Service(Service.Level.APP)
public final class OpamEnv {
    private final Map<String, Map<String, String>> myEnvs = new HashMap<>();

    public @Nullable Map<String, String> getEnv(@Nullable String switchName) {
        return switchName == null ? null : myEnvs.get(switchName);
    }

    public void computeEnv(@Nullable String opamLocation, @Nullable String switchName, @Nullable String cygwinBash,
                           @Nullable ORProcessTerminated<Map<String, String>> onEnvTerminated) {
        if (opamLocation != null && switchName != null) {
            ApplicationManager.getApplication()
                    .getService(OpamProcess.class)
                    .env(opamLocation, switchName, cygwinBash, data -> {
                        myEnvs.put(switchName, data);
                        if (onEnvTerminated != null) {
                            onEnvTerminated.run(data);
                        }
                    });
        }
    }
}


================================================
FILE: src/main/java/com/reason/comp/ocaml/OpamProcess.java
================================================
package com.reason.comp.ocaml;

import com.intellij.execution.*;
import com.intellij.execution.configurations.*;
import com.intellij.execution.process.*;
import com.intellij.openapi.components.*;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import jpsplugin.com.reason.*;
import org.jetbrains.annotations.*;

import java.io.*;
import java.util.*;
import java.util.regex.*;

@Service(Service.Level.APP)
public final class OpamProcess {
    private static final Pattern SEXP = Pattern.compile("\\(\"([^\"]+)\" \"([^\"]+)\"\\)");
    public static final ProcessHandler NULL_HANDLER = new ProcessHandler() {
        @Override protected void destroyProcessImpl() {
        }

        @Override protected void detachProcessImpl() {
        }

        @Override public boolean detachIsDefault() {
            return false;
        }

        @Nullable @Override public OutputStream getProcessInput() {
            return null;
        }
    };

    public void list(@NotNull String opamLocation, @NotNull String version, @Nullable String cygwinBash, @NotNull ORProcessTerminated<List<String[]>> onProcessTerminated) {
        ArrayList<String[]> installedLibs = new ArrayList<>();

        if (StringUtil.isEmpty(opamLocation) || StringUtil.isEmpty(version)) {
            onProcessTerminated.run(installedLibs);
            return;
        }

        GeneralCommandLine cli = new GeneralCommandLine("opam", "list", "--installed", "--safe", "--color=never", "--switch=" + version);
        cli.setRedirectErrorStream(true);

        OCamlExecutable executable = OCamlExecutable.getExecutable(opamLocation, cygwinBash);
        executable.patchCommandLine(cli, null, true);

        KillableProcessHandler processHandler;
        try {
            processHandler = new KillableProcessHandler(cli);
            processHandler.addProcessListener(new ProcessListener() {
                @Override
                public void processTerminated(@NotNull ProcessEvent event) {
                    onProcessTerminated.run(installedLibs);
                }

                @Override
                public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) {
                    if (ProcessOutputType.isStdout(outputType)) {
                        String text = event.getText().trim();
                        if (text.charAt(0) != '#') {
                            String[] split = text.split("\\s+", 3);
                            installedLibs.add(new String[]{split[0].trim(), split.length >= 2 ? split[1].trim() : "unknown", split.length >= 3 ? split[2].trim() : ""});
                        }
                    }
                }
            });
            processHandler.startNotify();
        } catch (ExecutionException e) {
            ORNotification.notifyError("Opam", "Can't list libraries", e.getMessage());
            installedLibs.add(new String[]{"Error", e.getMessage()});
            onProcessTerminated.run(installedLibs);
        }
    }

    public void env(@Nullable String opamLocation, @Nullable String version, @Nullable String cygwinBash, @NotNull ORProcessTerminated<Map<String, String>> onProcessTerminated) {
        Map<String, String> result = new HashMap<>();

        if (StringUtil.isEmpty(opamLocation) || StringUtil.isEmpty(version)) {
            result.put("Incorrect setting", "Setup SDK in project settings");
            onProcessTerminated.run(result);
            return;
        }

        GeneralCommandLine cli = new GeneralCommandLine("opam", "config", "env", "--sexp", "--switch=" + version);
        cli.setRedirectErrorStream(true);

        OCamlExecutable executable = OCamlExecutable.getExecutable(opamLocation, cygwinBash);
        executable.patchCommandLine(cli, null, true);

        KillableProcessHandler processHandler;
        try {
            processHandler = new KillableProcessHandler(cli);
            processHandler.addProcessListener(new ProcessListener() {
                @Override
                public void processTerminated(@NotNull ProcessEvent event) {
                    onProcessTerminated.run(result);
                }

                @Override
                public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType) {
                    if (ProcessOutputType.isStdout(outputType)) {
                        String text = event.getText().trim();
                        Matcher matcher = SEXP.matcher(text);
                        if (matcher.matches()) {
                            String key = matcher.group(1);
                            String value = matcher.group(2);
                            result.put(key, value);
                        }
                    }
                }
            });
            processHandler.startNotify();
        } catch (ExecutionException e) {
            ORNotification.notifyError("Opam", "Can't read opam env", e.getMessage());
            onProcessTerminated.run(result);
        }
    }

    public void listSwitch(@NotNull String opamRootPath, @Nullable String cygwinBash, @NotNull ORProcessTerminated<List<OpamSwitch>> onProcessTerminated) {
        ProcessListener processListener = new ListProcessListener(onProcessTerminated);

        OCamlExecutable executable = OCamlExecutable.getExecutable(opamRootPath, cygwinBash);
        GeneralCommandLine cli = new GeneralCommandLine("opam", "switch", "list", "--color=never");
        executable.patchCommandLine(cli, null, true);

        KillableProcessHandler processHandler;
        try {
            processHandler = new KillableProcessHandler(cli);
            processHandler.addProcessListener(processListener);
            processHandler.startNotify();
        } catch (ExecutionException e) {
            ORNotification.notifyError("Dune", "Can't run opam", e.getMessage());
            processListener.processTerminated(new ProcessEvent(NULL_HANDLER));
        }
    }

    public record OpamSwitch(boolean isSelected, String name) {
        @Override public String toString() {
            return (isSelected ? ">" : "") + name;
        }
    }

    static class ListProcessListener implements ProcessListener {
        private final ORProcessTerminated<List<OpamSwitch>> myOnProcessTerminated;
        private final List<OpamSwitch> myResult = new ArrayList<>();

        private boolean myIsHeader = true;
        private boolean myIsFooter = false;

        public ListProcessListener(@NotNull ORProcessTerminated<List<OpamSwitch>> onProcessTerminated) {
            myOnProcessTerminated = onProcessTerminated;
        }

        @Override
        public void processTerminated(@NotNull ProcessEvent event) {
            myOnProcessTerminated.run(myResult);
        }

        @Override
       
Download .txt
gitextract_px5e5xvk/

├── .github/
│   ├── FUNDING.md
│   ├── FUNDING.yml
│   └── workflows/
│       ├── gradle.yml
│       └── website-deploy.yml
├── .gitignore
├── CHANGELOG.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com/
│   │   │   │   └── reason/
│   │   │   │       ├── FileHelper.java
│   │   │   │       ├── comp/
│   │   │   │       │   ├── CliType.java
│   │   │   │       │   ├── CompilerOutputAnalyzer.java
│   │   │   │       │   ├── CompilerOutputListener.java
│   │   │   │       │   ├── ORCompiler.java
│   │   │   │       │   ├── ORCompilerConfigManager.java
│   │   │   │       │   ├── ORCompilerManager.java
│   │   │   │       │   ├── ORCompilerOutputAnalyzer.java
│   │   │   │       │   ├── ORConstants.java
│   │   │   │       │   ├── ORPlatform.java
│   │   │   │       │   ├── ORResolvedCompiler.java
│   │   │   │       │   ├── ProcessFinishedListener.java
│   │   │   │       │   ├── bs/
│   │   │   │       │   │   ├── BsColoredProcessHandler.java
│   │   │   │       │   │   ├── BsCompiler.java
│   │   │   │       │   │   ├── BsConfig.java
│   │   │   │       │   │   ├── BsConfigReader.java
│   │   │   │       │   │   ├── BsFormatProcess.java
│   │   │   │       │   │   ├── BsLineProcessor.java
│   │   │   │       │   │   ├── BsNotification.java
│   │   │   │       │   │   ├── BsPlatform.java
│   │   │   │       │   │   ├── BsProcess.java
│   │   │   │       │   │   ├── BsResolvedCompiler.java
│   │   │   │       │   │   └── Ninja.java
│   │   │   │       │   ├── dune/
│   │   │   │       │   │   ├── DuneCompiler.java
│   │   │   │       │   │   ├── DuneOutputAnalyzer.java
│   │   │   │       │   │   ├── DunePlatform.java
│   │   │   │       │   │   └── DuneProcess.java
│   │   │   │       │   ├── esy/
│   │   │   │       │   │   ├── Esy.java
│   │   │   │       │   │   ├── EsyCompiler.java
│   │   │   │       │   │   ├── EsyConstants.java
│   │   │   │       │   │   ├── EsyNotification.java
│   │   │   │       │   │   ├── EsyPackageJson.java
│   │   │   │       │   │   ├── EsyPlatform.java
│   │   │   │       │   │   └── EsyProcess.java
│   │   │   │       │   ├── ocaml/
│   │   │   │       │   │   ├── OcamlFormatProcess.java
│   │   │   │       │   │   ├── OpamCommandLine.java
│   │   │   │       │   │   ├── OpamEnv.java
│   │   │   │       │   │   └── OpamProcess.java
│   │   │   │       │   └── rescript/
│   │   │   │       │       ├── ResCompiler.java
│   │   │   │       │       ├── ResConfigReader.java
│   │   │   │       │       ├── ResFormatProcess.java
│   │   │   │       │       ├── ResPlatform.java
│   │   │   │       │       ├── ResProcessHandler.java
│   │   │   │       │       ├── ResResolvedCompiler.java
│   │   │   │       │       └── RescriptOutputAnalyzer.java
│   │   │   │       ├── hints/
│   │   │   │       │   ├── InsightManager.java
│   │   │   │       │   ├── Rincewind.java
│   │   │   │       │   ├── RincewindDownloader.java
│   │   │   │       │   └── RincewindProcess.java
│   │   │   │       ├── ide/
│   │   │   │       │   ├── CompileOnSave.java
│   │   │   │       │   ├── EditorPosition.java
│   │   │   │       │   ├── IconProvider.java
│   │   │   │       │   ├── OREditorFactoryListener.java
│   │   │   │       │   ├── OREditorTracker.java
│   │   │   │       │   ├── ORFileDocumentListener.java
│   │   │   │       │   ├── ORFileUtils.java
│   │   │   │       │   ├── ORIcons.java
│   │   │   │       │   ├── ORPostStartupActivity.java
│   │   │   │       │   ├── ORVirtualFileListener.java
│   │   │   │       │   ├── actions/
│   │   │   │       │   │   ├── ConvertAction.java
│   │   │   │       │   │   └── TransformAction.java
│   │   │   │       │   ├── annotations/
│   │   │   │       │   │   ├── BsErrorAnnotator.java
│   │   │   │       │   │   ├── ErrorFileHighlighter.java
│   │   │   │       │   │   ├── ErrorsManager.java
│   │   │   │       │   │   ├── ORErrorAnnotator.java
│   │   │   │       │   │   ├── OutputInfo.java
│   │   │   │       │   │   └── ResErrorAnnotator.java
│   │   │   │       │   ├── comment/
│   │   │   │       │   │   ├── DuneCommenter.java
│   │   │   │       │   │   ├── MlyCommenter.java
│   │   │   │       │   │   ├── OclCommenter.java
│   │   │   │       │   │   └── RmlCommenter.java
│   │   │   │       │   ├── console/
│   │   │   │       │   │   ├── ClearLogAction.java
│   │   │   │       │   │   ├── CompilerAction.java
│   │   │   │       │   │   ├── ORConsoleFilter.java
│   │   │   │       │   │   ├── ORConsoleFilterProvider.java
│   │   │   │       │   │   ├── ORToolWindowFactory.java
│   │   │   │       │   │   ├── ORToolWindowManager.java
│   │   │   │       │   │   ├── bs/
│   │   │   │       │   │   │   ├── BsConsoleView.java
│   │   │   │       │   │   │   ├── BsMakeAction.java
│   │   │   │       │   │   │   ├── BsMakeWorldAction.java
│   │   │   │       │   │   │   └── BsToolWindowFactory.java
│   │   │   │       │   │   ├── dune/
│   │   │   │       │   │   │   ├── DuneBuildAction.java
│   │   │   │       │   │   │   ├── DuneCleanAction.java
│   │   │   │       │   │   │   ├── DuneConsoleView.java
│   │   │   │       │   │   │   ├── DuneToolWindowFactory.java
│   │   │   │       │   │   │   └── OCamlConsoleFilter.java
│   │   │   │       │   │   ├── esy/
│   │   │   │       │   │   │   ├── EsyBuildAction.java
│   │   │   │       │   │   │   ├── EsyConsoleView.java
│   │   │   │       │   │   │   └── EsyToolWindowFactory.java
│   │   │   │       │   │   └── rescript/
│   │   │   │       │   │       ├── RescriptBuildAction.java
│   │   │   │       │   │       ├── RescriptConsoleFilter.java
│   │   │   │       │   │       ├── RescriptConsoleView.java
│   │   │   │       │   │       ├── RescriptResetAction.java
│   │   │   │       │   │       └── RescriptToolWindowFactory.java
│   │   │   │       │   ├── debug/
│   │   │   │       │   │   ├── OCamlApplicationConfiguration.java
│   │   │   │       │   │   ├── OCamlApplicationRunningState.java
│   │   │   │       │   │   ├── OCamlDebugRunner.java
│   │   │   │       │   │   ├── OCamlModuleBasedConfiguration.java
│   │   │   │       │   │   ├── ORLineBreakpointProperties.java
│   │   │   │       │   │   ├── ORLineBreakpointType.java
│   │   │   │       │   │   └── OclDebuggerRunnerSettings.java
│   │   │   │       │   ├── docs/
│   │   │   │       │   │   ├── DocFormatter.java
│   │   │   │       │   │   └── ORDocumentationProvider.java
│   │   │   │       │   ├── editors/
│   │   │   │       │   │   ├── CmtFileEditor.java
│   │   │   │       │   │   ├── CmtFileEditorProvider.java
│   │   │   │       │   │   └── CmtXmlComponent.java
│   │   │   │       │   ├── files/
│   │   │   │       │   │   ├── CmtFileType.java
│   │   │   │       │   │   ├── DuneFile.java
│   │   │   │       │   │   ├── DuneFileType.java
│   │   │   │       │   │   ├── FileBase.java
│   │   │   │       │   │   ├── Ml4File.java
│   │   │   │       │   │   ├── Ml4FileType.java
│   │   │   │       │   │   ├── MlgFile.java
│   │   │   │       │   │   ├── MlgFileType.java
│   │   │   │       │   │   ├── MlgFileViewProvider.java
│   │   │   │       │   │   ├── MlgFileViewProviderFactory.java
│   │   │   │       │   │   ├── MllFile.java
│   │   │   │       │   │   ├── MllFileType.java
│   │   │   │       │   │   ├── MllFileViewProvider.java
│   │   │   │       │   │   ├── MllFileViewProviderFactory.java
│   │   │   │       │   │   ├── MlyFile.java
│   │   │   │       │   │   ├── MlyFileType.java
│   │   │   │       │   │   ├── MlyFileViewProvider.java
│   │   │   │       │   │   ├── MlyFileViewProviderFactory.java
│   │   │   │       │   │   ├── ORConfigJsonFileType.java
│   │   │   │       │   │   ├── ORTargetElementEvaluator.java
│   │   │   │       │   │   ├── OclFile.java
│   │   │   │       │   │   ├── OclFileType.java
│   │   │   │       │   │   ├── OclInterfaceFile.java
│   │   │   │       │   │   ├── OclInterfaceFileType.java
│   │   │   │       │   │   ├── ResFile.java
│   │   │   │       │   │   ├── ResFileType.java
│   │   │   │       │   │   ├── ResInterfaceFile.java
│   │   │   │       │   │   ├── ResInterfaceFileType.java
│   │   │   │       │   │   ├── RmlFile.java
│   │   │   │       │   │   ├── RmlFileType.java
│   │   │   │       │   │   ├── RmlInterfaceFile.java
│   │   │   │       │   │   └── RmlInterfaceFileType.java
│   │   │   │       │   ├── folding/
│   │   │   │       │   │   ├── DuneFoldingBuilder.java
│   │   │   │       │   │   └── ORFoldingBuilder.java
│   │   │   │       │   ├── format/
│   │   │   │       │   │   ├── FormatterProcessor.java
│   │   │   │       │   │   ├── ORPostFormatProcessor.java
│   │   │   │       │   │   └── ReformatOnSave.java
│   │   │   │       │   ├── go/
│   │   │   │       │   │   ├── FileModuleDataModuleRendererFactory.java
│   │   │   │       │   │   ├── ORLineMarkerProvider.java
│   │   │   │       │   │   └── ORModuleContributor.java
│   │   │   │       │   ├── handlers/
│   │   │   │       │   │   ├── ORTypedHandler.java
│   │   │   │       │   │   ├── OclQuoteHandler.java
│   │   │   │       │   │   ├── ResQuoteHandler.java
│   │   │   │       │   │   └── RmlQuoteHandler.java
│   │   │   │       │   ├── highlight/
│   │   │   │       │   │   ├── DuneSyntaxAnnotator.java
│   │   │   │       │   │   ├── DuneSyntaxHighlighter.java
│   │   │   │       │   │   ├── DuneSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── ORSyntaxAnnotator.java
│   │   │   │       │   │   ├── ORSyntaxHighlighter.java
│   │   │   │       │   │   ├── OclGrammarEditorHighlighter.java
│   │   │   │       │   │   ├── OclGrammarSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclLexEditorHighlighter.java
│   │   │   │       │   │   ├── OclLexSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclSyntaxAnnotator.java
│   │   │   │       │   │   ├── OclSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── OclYaccEditorHighlighter.java
│   │   │   │       │   │   ├── OclYaccSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── ResSyntaxAnnotator.java
│   │   │   │       │   │   ├── ResSyntaxHighlighterFactory.java
│   │   │   │       │   │   ├── RmlSyntaxAnnotator.java
│   │   │   │       │   │   └── RmlSyntaxHighlighterFactory.java
│   │   │   │       │   ├── hints/
│   │   │   │       │   │   ├── CodeLens.java
│   │   │   │       │   │   ├── InferredTypes.java
│   │   │   │       │   │   ├── InferredTypesImplementation.java
│   │   │   │       │   │   ├── InferredTypesService.java
│   │   │   │       │   │   ├── OREditorLinePainter.java
│   │   │   │       │   │   ├── ORParameterInfoHandler.java
│   │   │   │       │   │   ├── OclParameterInfoHandler.java
│   │   │   │       │   │   ├── ResParameterInfoHandler.java
│   │   │   │       │   │   ├── RmlParameterInfoHandler.java
│   │   │   │       │   │   ├── RmlTypeProvider.java
│   │   │   │       │   │   └── SignatureProvider.java
│   │   │   │       │   ├── importWizard/
│   │   │   │       │   │   ├── DuneExternalConstants.java
│   │   │   │       │   │   ├── DuneProjectImportBuilder.java
│   │   │   │       │   │   ├── DuneProjectImportProvider.java
│   │   │   │       │   │   ├── DuneProjectOpenProcessor.java
│   │   │   │       │   │   ├── DuneProjectRootStep.form
│   │   │   │       │   │   ├── DuneProjectRootStep.java
│   │   │   │       │   │   └── ImportedDuneBuild.java
│   │   │   │       │   ├── insight/
│   │   │   │       │   │   ├── CompletionUtils.java
│   │   │   │       │   │   ├── KeywordCompletionContributor.java
│   │   │   │       │   │   ├── ORCompletionContributor.java
│   │   │   │       │   │   ├── OclCompletionContributor.java
│   │   │   │       │   │   ├── OclKeywordCompletionContributor.java
│   │   │   │       │   │   ├── ResCompletionContributor.java
│   │   │   │       │   │   ├── ResKeywordCompletionContributor.java
│   │   │   │       │   │   ├── RmlCompletionContributor.java
│   │   │   │       │   │   ├── RmlKeywordCompletionContributor.java
│   │   │   │       │   │   ├── pattern/
│   │   │   │       │   │   │   └── ORElementPatternMatcher.java
│   │   │   │       │   │   └── provider/
│   │   │   │       │   │       ├── DotExpressionCompletionProvider.java
│   │   │   │       │   │       ├── FreeExpressionCompletionProvider.java
│   │   │   │       │   │       ├── JsxAttributeCompletionProvider.java
│   │   │   │       │   │       ├── JsxNameCompletionProvider.java
│   │   │   │       │   │       ├── ModuleCompletionProvider.java
│   │   │   │       │   │       └── ObjectCompletionProvider.java
│   │   │   │       │   ├── intentions/
│   │   │   │       │   │   ├── ExpandLocalOpenIntention.java
│   │   │   │       │   │   └── FunctionBracesIntention.java
│   │   │   │       │   ├── js/
│   │   │   │       │   │   ├── JsIconProvider.java
│   │   │   │       │   │   ├── JsInjector.java
│   │   │   │       │   │   ├── ORIndexableFileNamesProvider.java
│   │   │   │       │   │   └── ORJsLibraryManager.java
│   │   │   │       │   ├── library/
│   │   │   │       │   │   ├── OclLibraryKind.java
│   │   │   │       │   │   ├── OclLibraryRootProvider.java
│   │   │   │       │   │   ├── OclLibraryRootsComponentDescriptor.java
│   │   │   │       │   │   ├── OclLibraryType.java
│   │   │   │       │   │   └── OclSdkSetupValidator.java
│   │   │   │       │   ├── match/
│   │   │   │       │   │   ├── DunePairedBraceMatcher.java
│   │   │   │       │   │   ├── OclPairedBraceMatcher.java
│   │   │   │       │   │   ├── ResPairedBraceMatcher.java
│   │   │   │       │   │   └── RmlPairedBraceMatcher.java
│   │   │   │       │   ├── module/
│   │   │   │       │   │   ├── DuneModuleEditor.form
│   │   │   │       │   │   ├── DuneModuleEditor.java
│   │   │   │       │   │   └── DuneModuleEditorProvider.java
│   │   │   │       │   ├── refactor/
│   │   │   │       │   │   └── ORRefactoringSupportProvider.java
│   │   │   │       │   ├── repl/
│   │   │   │       │   │   ├── PromptConsole.java
│   │   │   │       │   │   ├── PromptConsoleView.java
│   │   │   │       │   │   ├── PromptHistory.java
│   │   │   │       │   │   ├── ReplConfigurationFactory.java
│   │   │   │       │   │   ├── ReplGenericState.java
│   │   │   │       │   │   ├── ReplRunConfiguration.java
│   │   │   │       │   │   ├── ReplRunConfigurationType.java
│   │   │   │       │   │   ├── ReplRunSettingsEditor.form
│   │   │   │       │   │   └── ReplRunSettingsEditor.java
│   │   │   │       │   ├── search/
│   │   │   │       │   │   ├── FileModuleData.java
│   │   │   │       │   │   ├── IndexedFileModule.java
│   │   │   │       │   │   ├── ModuleIndexService.java
│   │   │   │       │   │   ├── ORFindUsagesProvider.java
│   │   │   │       │   │   ├── ORImplementationSearch.java
│   │   │   │       │   │   ├── OclFindUsagesProvider.java
│   │   │   │       │   │   ├── PsiTypeElementProvider.java
│   │   │   │       │   │   ├── ResFindUsagesProvider.java
│   │   │   │       │   │   ├── RmlFindUsagesProvider.java
│   │   │   │       │   │   ├── index/
│   │   │   │       │   │   │   ├── ClassFqnIndex.java
│   │   │   │       │   │   │   ├── ClassMethodFqnIndex.java
│   │   │   │       │   │   │   ├── ExceptionFqnIndex.java
│   │   │   │       │   │   │   ├── ExceptionIndex.java
│   │   │   │       │   │   │   ├── ExternalFqnIndex.java
│   │   │   │       │   │   │   ├── ExternalIndex.java
│   │   │   │       │   │   │   ├── FileModuleIndex.java
│   │   │   │       │   │   │   ├── FileModuleIndexService.java
│   │   │   │       │   │   │   ├── IncludeIndex.java
│   │   │   │       │   │   │   ├── IndexKeys.java
│   │   │   │       │   │   │   ├── LetComponentFqnIndex.java
│   │   │   │       │   │   │   ├── LetFqnIndex.java
│   │   │   │       │   │   │   ├── ModuleFqnIndex.java
│   │   │   │       │   │   │   ├── ModuleIndex.java
│   │   │   │       │   │   │   ├── ModuleSignatureIndex.java
│   │   │   │       │   │   │   ├── NamespaceIndex.java
│   │   │   │       │   │   │   ├── ObjectFieldIndex.java
│   │   │   │       │   │   │   ├── OpenIndex.java
│   │   │   │       │   │   │   ├── ParameterFqnIndex.java
│   │   │   │       │   │   │   ├── ParameterIndex.java
│   │   │   │       │   │   │   ├── RecordFieldIndex.java
│   │   │   │       │   │   │   ├── TypeFqnIndex.java
│   │   │   │       │   │   │   ├── TypeIndex.java
│   │   │   │       │   │   │   ├── ValFqnIndex.java
│   │   │   │       │   │   │   └── VariantFqnIndex.java
│   │   │   │       │   │   └── reference/
│   │   │   │       │   │       ├── ORFakeResolvedElement.java
│   │   │   │       │   │       ├── ORModuleResolutionPsiGist.java
│   │   │   │       │   │       ├── ORMultiSymbolReference.java
│   │   │   │       │   │       ├── ORPsiLiteralStringReference.java
│   │   │   │       │   │       ├── ORPsiLowerSymbolReference.java
│   │   │   │       │   │       ├── ORPsiPropertyNameReference.java
│   │   │   │       │   │       ├── ORPsiUpperSymbolReference.java
│   │   │   │       │   │       └── ORReferenceAnalyzer.java
│   │   │   │       │   ├── settings/
│   │   │   │       │   │   ├── DuneColorSettingsPage.java
│   │   │   │       │   │   ├── ORColorSettingsPage.java
│   │   │   │       │   │   ├── ORSettings.java
│   │   │   │       │   │   ├── ORSettingsConfigurable.form
│   │   │   │       │   │   ├── ORSettingsConfigurable.java
│   │   │   │       │   │   ├── OpamConfigurationTab.form
│   │   │   │       │   │   └── OpamConfigurationTab.java
│   │   │   │       │   ├── spellcheckers/
│   │   │   │       │   │   ├── ORSpellCheckerStrategy.java
│   │   │   │       │   │   ├── OclSpellCheckerStrategy.java
│   │   │   │       │   │   ├── ResSpellCheckerStrategy.java
│   │   │   │       │   │   └── RmlSpellCheckerStrategy.java
│   │   │   │       │   ├── structure/
│   │   │   │       │   │   ├── NestedFunctionsFilter.java
│   │   │   │       │   │   ├── ORStructureViewModel.java
│   │   │   │       │   │   ├── ShowVariableFilter.java
│   │   │   │       │   │   ├── StructureViewElement.java
│   │   │   │       │   │   └── StructureViewFactory.java
│   │   │   │       │   ├── template/
│   │   │   │       │   │   ├── OCamlBaseLiveTemplateContextType.java
│   │   │   │       │   │   ├── OCamlCodeLiveTemplateContextType.java
│   │   │   │       │   │   ├── OCamlCommentLiveTemplateContextType.java
│   │   │   │       │   │   ├── ResBaseLiveTemplateContextType.java
│   │   │   │       │   │   └── RmlBaseLiveTemplateContextType.java
│   │   │   │       │   └── testAssistant/
│   │   │   │       │       ├── GotoTestDataAction.java
│   │   │   │       │       └── TestDataNavigationHandler.java
│   │   │   │       └── lang/
│   │   │   │           ├── CommonPsiParser.java
│   │   │   │           ├── Marker.java
│   │   │   │           ├── ModuleHelper.java
│   │   │   │           ├── ORLanguageParser.java
│   │   │   │           ├── ORLanguageProperties.java
│   │   │   │           ├── ORParser.java
│   │   │   │           ├── core/
│   │   │   │           │   ├── LiteralStringManipulator.java
│   │   │   │           │   ├── ORCodeFactory.java
│   │   │   │           │   ├── ORUtil.java
│   │   │   │           │   ├── psi/
│   │   │   │           │   │   ├── RPsiClass.java
│   │   │   │           │   │   ├── RPsiClassMethod.java
│   │   │   │           │   │   ├── RPsiConditional.java
│   │   │   │           │   │   ├── RPsiException.java
│   │   │   │           │   │   ├── RPsiExternal.java
│   │   │   │           │   │   ├── RPsiField.java
│   │   │   │           │   │   ├── RPsiFunctor.java
│   │   │   │           │   │   ├── RPsiInclude.java
│   │   │   │           │   │   ├── RPsiInferredType.java
│   │   │   │           │   │   ├── RPsiInnerModule.java
│   │   │   │           │   │   ├── RPsiLanguageConverter.java
│   │   │   │           │   │   ├── RPsiLet.java
│   │   │   │           │   │   ├── RPsiModule.java
│   │   │   │           │   │   ├── RPsiOCamlInjection.java
│   │   │   │           │   │   ├── RPsiOpen.java
│   │   │   │           │   │   ├── RPsiParameterDeclaration.java
│   │   │   │           │   │   ├── RPsiQualifiedPathElement.java
│   │   │   │           │   │   ├── RPsiRecordField.java
│   │   │   │           │   │   ├── RPsiSignature.java
│   │   │   │           │   │   ├── RPsiSignatureElement.java
│   │   │   │           │   │   ├── RPsiSignatureItem.java
│   │   │   │           │   │   ├── RPsiSignatureUtil.java
│   │   │   │           │   │   ├── RPsiStructuredElement.java
│   │   │   │           │   │   ├── RPsiType.java
│   │   │   │           │   │   ├── RPsiVal.java
│   │   │   │           │   │   ├── RPsiVar.java
│   │   │   │           │   │   ├── impl/
│   │   │   │           │   │   │   ├── ORASTFactory.java
│   │   │   │           │   │   │   ├── RPsiAnnotation.java
│   │   │   │           │   │   │   ├── RPsiArray.java
│   │   │   │           │   │   │   ├── RPsiAssert.java
│   │   │   │           │   │   │   ├── RPsiBinaryCondition.java
│   │   │   │           │   │   │   ├── RPsiClassConstructor.java
│   │   │   │           │   │   │   ├── RPsiClassField.java
│   │   │   │           │   │   │   ├── RPsiClassImpl.java
│   │   │   │           │   │   │   ├── RPsiClassInitializer.java
│   │   │   │           │   │   │   ├── RPsiClassMethodImpl.java
│   │   │   │           │   │   │   ├── RPsiConstraints.java
│   │   │   │           │   │   │   ├── RPsiDeconstruction.java
│   │   │   │           │   │   │   ├── RPsiDefaultValue.java
│   │   │   │           │   │   │   ├── RPsiDirective.java
│   │   │   │           │   │   │   ├── RPsiDuneField.java
│   │   │   │           │   │   │   ├── RPsiDuneFields.java
│   │   │   │           │   │   │   ├── RPsiDuneSExpr.java
│   │   │   │           │   │   │   ├── RPsiDuneStanza.java
│   │   │   │           │   │   │   ├── RPsiDuneVar.java
│   │   │   │           │   │   │   ├── RPsiExceptionImpl.java
│   │   │   │           │   │   │   ├── RPsiExternalImpl.java
│   │   │   │           │   │   │   ├── RPsiFieldValue.java
│   │   │   │           │   │   │   ├── RPsiFirstClass.java
│   │   │   │           │   │   │   ├── RPsiForLoop.java
│   │   │   │           │   │   │   ├── RPsiFunSwitch.java
│   │   │   │           │   │   │   ├── RPsiFunction.java
│   │   │   │           │   │   │   ├── RPsiFunctionBody.java
│   │   │   │           │   │   │   ├── RPsiFunctionCall.java
│   │   │   │           │   │   │   ├── RPsiFunctorBinding.java
│   │   │   │           │   │   │   ├── RPsiFunctorCall.java
│   │   │   │           │   │   │   ├── RPsiFunctorImpl.java
│   │   │   │           │   │   │   ├── RPsiFunctorResult.java
│   │   │   │           │   │   │   ├── RPsiGuard.java
│   │   │   │           │   │   │   ├── RPsiIfStatement.java
│   │   │   │           │   │   │   ├── RPsiIncludeImpl.java
│   │   │   │           │   │   │   ├── RPsiInherit.java
│   │   │   │           │   │   │   ├── RPsiInnerModuleImpl.java
│   │   │   │           │   │   │   ├── RPsiInterpolation.java
│   │   │   │           │   │   │   ├── RPsiInterpolationReference.java
│   │   │   │           │   │   │   ├── RPsiJsObject.java
│   │   │   │           │   │   │   ├── RPsiLeafPropertyName.java
│   │   │   │           │   │   │   ├── RPsiLetAttribute.java
│   │   │   │           │   │   │   ├── RPsiLetBinding.java
│   │   │   │           │   │   │   ├── RPsiLetImpl.java
│   │   │   │           │   │   │   ├── RPsiLiteralString.java
│   │   │   │           │   │   │   ├── RPsiLocalOpen.java
│   │   │   │           │   │   │   ├── RPsiLowerName.java
│   │   │   │           │   │   │   ├── RPsiLowerSymbol.java
│   │   │   │           │   │   │   ├── RPsiMacro.java
│   │   │   │           │   │   │   ├── RPsiMacroBody.java
│   │   │   │           │   │   │   ├── RPsiMacroName.java
│   │   │   │           │   │   │   ├── RPsiMethodCall.java
│   │   │   │           │   │   │   ├── RPsiMixinField.java
│   │   │   │           │   │   │   ├── RPsiModuleBinding.java
│   │   │   │           │   │   │   ├── RPsiModuleSignature.java
│   │   │   │           │   │   │   ├── RPsiMultiLineInterpolator.java
│   │   │   │           │   │   │   ├── RPsiObject.java
│   │   │   │           │   │   │   ├── RPsiObjectField.java
│   │   │   │           │   │   │   ├── RPsiOpenImpl.java
│   │   │   │           │   │   │   ├── RPsiOption.java
│   │   │   │           │   │   │   ├── RPsiOptionValue.java
│   │   │   │           │   │   │   ├── RPsiParameterDeclarationImpl.java
│   │   │   │           │   │   │   ├── RPsiParameterReference.java
│   │   │   │           │   │   │   ├── RPsiParameters.java
│   │   │   │           │   │   │   ├── RPsiPatternMatch.java
│   │   │   │           │   │   │   ├── RPsiPatternMatchBody.java
│   │   │   │           │   │   │   ├── RPsiPolyVariantConstraint.java
│   │   │   │           │   │   │   ├── RPsiRecord.java
│   │   │   │           │   │   │   ├── RPsiRecordFieldImpl.java
│   │   │   │           │   │   │   ├── RPsiScopedExpr.java
│   │   │   │           │   │   │   ├── RPsiSignatureImpl.java
│   │   │   │           │   │   │   ├── RPsiSignatureItemImpl.java
│   │   │   │           │   │   │   ├── RPsiStruct.java
│   │   │   │           │   │   │   ├── RPsiSwitch.java
│   │   │   │           │   │   │   ├── RPsiSwitchBody.java
│   │   │   │           │   │   │   ├── RPsiTag.java
│   │   │   │           │   │   │   ├── RPsiTagBody.java
│   │   │   │           │   │   │   ├── RPsiTagClose.java
│   │   │   │           │   │   │   ├── RPsiTagProperty.java
│   │   │   │           │   │   │   ├── RPsiTagPropertyValue.java
│   │   │   │           │   │   │   ├── RPsiTagStart.java
│   │   │   │           │   │   │   ├── RPsiTernary.java
│   │   │   │           │   │   │   ├── RPsiTokenStub.java
│   │   │   │           │   │   │   ├── RPsiTry.java
│   │   │   │           │   │   │   ├── RPsiTryBody.java
│   │   │   │           │   │   │   ├── RPsiTryHandler.java
│   │   │   │           │   │   │   ├── RPsiTryHandlerBody.java
│   │   │   │           │   │   │   ├── RPsiTuple.java
│   │   │   │           │   │   │   ├── RPsiTypeBinding.java
│   │   │   │           │   │   │   ├── RPsiTypeConstraint.java
│   │   │   │           │   │   │   ├── RPsiTypeImpl.java
│   │   │   │           │   │   │   ├── RPsiUnit.java
│   │   │   │           │   │   │   ├── RPsiUnpack.java
│   │   │   │           │   │   │   ├── RPsiUpperSymbol.java
│   │   │   │           │   │   │   ├── RPsiUpperTagName.java
│   │   │   │           │   │   │   ├── RPsiValImpl.java
│   │   │   │           │   │   │   ├── RPsiVariantDeclaration.java
│   │   │   │           │   │   │   └── RPsiWhile.java
│   │   │   │           │   │   ├── ocamlgrammar/
│   │   │   │           │   │   │   ├── RPsiGrammarArgument.java
│   │   │   │           │   │   │   ├── RPsiGrammarGrammar.java
│   │   │   │           │   │   │   ├── RPsiGrammarTactic.java
│   │   │   │           │   │   │   └── RPsiGrammarVernac.java
│   │   │   │           │   │   ├── ocamllex/
│   │   │   │           │   │   │   ├── RPsiLexLet.java
│   │   │   │           │   │   │   ├── RPsiLexPattern.java
│   │   │   │           │   │   │   └── RPsiLexRule.java
│   │   │   │           │   │   └── ocamlyacc/
│   │   │   │           │   │       ├── RPsiYaccDeclaration.java
│   │   │   │           │   │       ├── RPsiYaccHeader.java
│   │   │   │           │   │       ├── RPsiYaccRule.java
│   │   │   │           │   │       └── RPsiYaccRuleBody.java
│   │   │   │           │   ├── stub/
│   │   │   │           │   │   ├── OclFileStub.java
│   │   │   │           │   │   ├── OclStubBasedElementTypes.java
│   │   │   │           │   │   ├── PsiExceptionStub.java
│   │   │   │           │   │   ├── PsiExternalStub.java
│   │   │   │           │   │   ├── PsiIncludeStub.java
│   │   │   │           │   │   ├── PsiLetStub.java
│   │   │   │           │   │   ├── PsiModuleStub.java
│   │   │   │           │   │   ├── PsiObjectFieldStub.java
│   │   │   │           │   │   ├── PsiOpenStub.java
│   │   │   │           │   │   ├── PsiParameterDeclarationStub.java
│   │   │   │           │   │   ├── PsiQualifiedNameStub.java
│   │   │   │           │   │   ├── PsiTypeStub.java
│   │   │   │           │   │   ├── PsiValStub.java
│   │   │   │           │   │   ├── PsiVariantDeclarationStub.java
│   │   │   │           │   │   ├── ResFileStub.java
│   │   │   │           │   │   ├── ResStubBasedElementTypes.java
│   │   │   │           │   │   ├── RmlFileStub.java
│   │   │   │           │   │   ├── RmlStubBasedElementTypes.java
│   │   │   │           │   │   ├── RsiClassMethodStub.java
│   │   │   │           │   │   ├── RsiClassStub.java
│   │   │   │           │   │   ├── RsiRecordFieldStub.java
│   │   │   │           │   │   └── type/
│   │   │   │           │   │       ├── ORStubElementType.java
│   │   │   │           │   │       ├── ORStubVersions.java
│   │   │   │           │   │       ├── OclFileStubElementType.java
│   │   │   │           │   │       ├── PsiExceptionStubElementType.java
│   │   │   │           │   │       ├── PsiExternalStubElementType.java
│   │   │   │           │   │       ├── PsiFunctorModuleStubElementType.java
│   │   │   │           │   │       ├── PsiIncludeStubElementType.java
│   │   │   │           │   │       ├── PsiInnerModuleStubElementType.java
│   │   │   │           │   │       ├── PsiLetStubElementType.java
│   │   │   │           │   │       ├── PsiModuleStubElementType.java
│   │   │   │           │   │       ├── PsiObjectFieldStubElementType.java
│   │   │   │           │   │       ├── PsiOpenStubElementType.java
│   │   │   │           │   │       ├── PsiParameterDeclarationStubElementType.java
│   │   │   │           │   │       ├── PsiTypeStubElementType.java
│   │   │   │           │   │       ├── PsiValStubElementType.java
│   │   │   │           │   │       ├── PsiVariantStubElementType.java
│   │   │   │           │   │       ├── RPsiClassMethodStubElementType.java
│   │   │   │           │   │       ├── RPsiClassStubElementType.java
│   │   │   │           │   │       ├── RPsiRecordFieldStubElementType.java
│   │   │   │           │   │       ├── ResFileStubElementType.java
│   │   │   │           │   │       ├── RmlFileStubElementType.java
│   │   │   │           │   │       └── SerializerUtil.java
│   │   │   │           │   └── type/
│   │   │   │           │       ├── ORCompositeElementType.java
│   │   │   │           │       ├── ORCompositePsiElement.java
│   │   │   │           │       ├── ORCompositeType.java
│   │   │   │           │       ├── ORLangTypes.java
│   │   │   │           │       ├── ORTokenElementType.java
│   │   │   │           │       ├── ORTypes.java
│   │   │   │           │       └── ORTypesUtil.java
│   │   │   │           ├── doc/
│   │   │   │           │   ├── ORDocConverter.java
│   │   │   │           │   ├── ocaml/
│   │   │   │           │   │   ├── ODocLexer.java
│   │   │   │           │   │   ├── OclDocConverter.java
│   │   │   │           │   │   ├── OclDocLanguage.java
│   │   │   │           │   │   ├── OclDocTypes.java
│   │   │   │           │   │   └── odoc.flex
│   │   │   │           │   └── reason/
│   │   │   │           │       ├── RDocLexer.java
│   │   │   │           │       ├── RmlDocConverter.java
│   │   │   │           │       ├── RmlDocLanguage.java
│   │   │   │           │       ├── RmlDocTypes.java
│   │   │   │           │       └── rdoc.flex
│   │   │   │           ├── dune/
│   │   │   │           │   ├── Dune.flex
│   │   │   │           │   ├── DuneASTFactory.java
│   │   │   │           │   ├── DuneLanguage.java
│   │   │   │           │   ├── DuneLexer.java
│   │   │   │           │   ├── DuneParser.java
│   │   │   │           │   ├── DuneParserDefinition.java
│   │   │   │           │   └── DuneTypes.java
│   │   │   │           ├── extra/
│   │   │   │           │   ├── OclP4Language.java
│   │   │   │           │   └── OclP4ParserDefinition.java
│   │   │   │           ├── ocaml/
│   │   │   │           │   ├── OCaml.flex
│   │   │   │           │   ├── OCamlLexer.java
│   │   │   │           │   ├── OclASTFactory.java
│   │   │   │           │   ├── OclLanguage.java
│   │   │   │           │   ├── OclLexer.java
│   │   │   │           │   ├── OclParser.java
│   │   │   │           │   ├── OclParserDefinition.java
│   │   │   │           │   ├── OclSafeParserDefinition.java
│   │   │   │           │   └── OclTypes.java
│   │   │   │           ├── ocamlgrammar/
│   │   │   │           │   ├── OclGrammarAstFactory.java
│   │   │   │           │   ├── OclGrammarElementType.java
│   │   │   │           │   ├── OclGrammarLanguage.java
│   │   │   │           │   ├── OclGrammarLexer.java
│   │   │   │           │   ├── OclGrammarParser.java
│   │   │   │           │   ├── OclGrammarParserDefinition.java
│   │   │   │           │   ├── OclGrammarTypes.java
│   │   │   │           │   └── mlg.flex
│   │   │   │           ├── ocamllex/
│   │   │   │           │   ├── OclLexAstFactory.java
│   │   │   │           │   ├── OclLexElementType.java
│   │   │   │           │   ├── OclLexLanguage.java
│   │   │   │           │   ├── OclLexLexer.java
│   │   │   │           │   ├── OclLexParser.java
│   │   │   │           │   ├── OclLexParserDefinition.java
│   │   │   │           │   ├── OclLexTypes.java
│   │   │   │           │   └── mll.flex
│   │   │   │           ├── ocamlyacc/
│   │   │   │           │   ├── OclYaccAstFactory.java
│   │   │   │           │   ├── OclYaccElementType.java
│   │   │   │           │   ├── OclYaccLanguage.java
│   │   │   │           │   ├── OclYaccLexer.java
│   │   │   │           │   ├── OclYaccParser.java
│   │   │   │           │   ├── OclYaccParserDefinition.java
│   │   │   │           │   ├── OclYaccTypes.java
│   │   │   │           │   └── mly.flex
│   │   │   │           ├── reason/
│   │   │   │           │   ├── ReasonML.flex
│   │   │   │           │   ├── ReasonMLLexer.java
│   │   │   │           │   ├── RmlASTFactory.java
│   │   │   │           │   ├── RmlLanguage.java
│   │   │   │           │   ├── RmlLexer.java
│   │   │   │           │   ├── RmlParser.java
│   │   │   │           │   ├── RmlParserDefinition.java
│   │   │   │           │   ├── RmlSafeParserDefinition.java
│   │   │   │           │   └── RmlTypes.java
│   │   │   │           └── rescript/
│   │   │   │               ├── ResASTFactory.java
│   │   │   │               ├── ResFlexLexer.java
│   │   │   │               ├── ResLanguage.java
│   │   │   │               ├── ResLexer.java
│   │   │   │               ├── ResParser.java
│   │   │   │               ├── ResParserDefinition.java
│   │   │   │               ├── ResSafeParserDefinition.java
│   │   │   │               ├── ResTypes.java
│   │   │   │               └── Rescript.flex
│   │   │   └── jpsplugin/
│   │   │       └── com/
│   │   │           └── reason/
│   │   │               ├── AutoDeletingTempFile.java
│   │   │               ├── FileUtil.java
│   │   │               ├── Interrupted.java
│   │   │               ├── Joiner.java
│   │   │               ├── Log.java
│   │   │               ├── OCamlExecutable.java
│   │   │               ├── OClSourcesOrderRootTypeUIFactory.java
│   │   │               ├── ORNotification.java
│   │   │               ├── ORProcessTerminated.java
│   │   │               ├── OclSourcesOrderRootType.java
│   │   │               ├── Platform.java
│   │   │               ├── Streams.java
│   │   │               ├── StringUtil.java
│   │   │               ├── WGet.java
│   │   │               ├── sdk/
│   │   │               │   └── SdkDownloader.java
│   │   │               └── wizard/
│   │   │                   ├── OCamlModuleWizardStep.java
│   │   │                   └── WizardStepForm.form
│   │   └── resources/
│   │       ├── META-INF/
│   │       │   ├── java-deps.xml
│   │       │   ├── js-deps.xml
│   │       │   └── plugin.xml
│   │       ├── fileTemplates/
│   │       │   ├── OCaml Interface.mli.ft
│   │       │   ├── OCaml Module.ml.ft
│   │       │   ├── Reason Interface.rei.ft
│   │       │   ├── Reason Module.re.ft
│   │       │   ├── Rescript Interface.resi.ft
│   │       │   └── Rescript Module.res.ft
│   │       ├── icons/
│   │       │   ├── reasonml-icon-file.xcf
│   │       │   └── reasonml-icon.xcf
│   │       ├── intentionDescriptions/
│   │       │   ├── ExpandLocalOpenIntention/
│   │       │   │   ├── after.re.template
│   │       │   │   ├── before.re.template
│   │       │   │   └── description.html
│   │       │   └── FunctionBracesIntention/
│   │       │       ├── after.re.template
│   │       │       ├── before.re.template
│   │       │       └── description.html
│   │       └── liveTemplates/
│   │           ├── OCaml.xml
│   │           ├── Reason.xml
│   │           └── Rescript.xml
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── reason/
│       │           ├── FileHelperTest.java
│       │           ├── comp/
│       │           │   ├── bs/
│       │           │   │   ├── BsConfigReaderTest.java
│       │           │   │   ├── BsLineProcessorTest.java
│       │           │   │   ├── NinjaTest.java
│       │           │   │   └── ResConfigReaderTest.java
│       │           │   ├── dune/
│       │           │   │   └── DuneOutputAnalyzerTest.java
│       │           │   ├── esy/
│       │           │   │   └── EsyPackageJsonTest.java
│       │           │   ├── ocaml/
│       │           │   │   └── OpamProcessTest.java
│       │           │   └── rescript/
│       │           │       ├── RescriptOutputAnalyzerTest.java
│       │           │       └── error-syntax.txt
│       │           ├── hints/
│       │           │   └── RincewindTest.java
│       │           ├── ide/
│       │           │   ├── ORBasePlatformTestCase.java
│       │           │   ├── ORFileUtilsTest.java
│       │           │   ├── RenameLowerTest.java
│       │           │   ├── RenameUpper_OCL_Test.java
│       │           │   ├── RenameUpper_RES_Test.java
│       │           │   ├── RenameUpper_RML_Test.java
│       │           │   ├── TypeConversionOclTest.java
│       │           │   ├── comment/
│       │           │   │   └── OclCommenterTest.java
│       │           │   ├── completion/
│       │           │   │   ├── CommentCompletion_OCL_Test.java
│       │           │   │   ├── CommentCompletion_RES_Test.java
│       │           │   │   ├── CommentCompletion_RML_Test.java
│       │           │   │   ├── DotCompletion_OCL_Test.java
│       │           │   │   ├── DotCompletion_RES_Test.java
│       │           │   │   ├── DotCompletion_RML_Test.java
│       │           │   │   ├── FreeCompletion_OCL_Test.java
│       │           │   │   ├── FreeCompletion_RES_Test.java
│       │           │   │   ├── FreeCompletion_RML_Test.java
│       │           │   │   ├── JsObjectCompletion_RES_Test.java
│       │           │   │   ├── JsObjectCompletion_RML_Test.java
│       │           │   │   ├── Jsx3NameCompletion_RES_Test.java
│       │           │   │   ├── Jsx3NameCompletion_RML_Test.java
│       │           │   │   ├── Jsx3PropertyCompletion_RES_Test.java
│       │           │   │   ├── Jsx3PropertyCompletion_RML_Test.java
│       │           │   │   ├── Jsx4PropertyCompletion_RES_Test.java
│       │           │   │   ├── KeywordCompletion_OCL_Test.java
│       │           │   │   ├── KeywordCompletion_RES_Test.java
│       │           │   │   ├── KeywordCompletion_RML_Test.java
│       │           │   │   ├── ModuleCompletion_OCL_Test.java
│       │           │   │   ├── ModuleCompletion_RES_Test.java
│       │           │   │   ├── ModuleCompletion_RML_Test.java
│       │           │   │   ├── RecordCompletion_OCL_Test.java
│       │           │   │   ├── RecordCompletion_RES_Test.java
│       │           │   │   └── RecordCompletion_RML_Test.java
│       │           │   ├── console/
│       │           │   │   ├── OCamlMessages.java
│       │           │   │   ├── ocaml/
│       │           │   │   │   └── OCamlConsoleFilterTest.java
│       │           │   │   └── rescript/
│       │           │   │       └── RescriptConsoleFilterTest.java
│       │           │   ├── docs/
│       │           │   │   ├── ORDocumentationProviderTest.java
│       │           │   │   ├── QuickDocRESTest.java
│       │           │   │   ├── QuickDocRMLTest.java
│       │           │   │   ├── ShowDocOCLTest.java
│       │           │   │   ├── ShowDocRESTest.java
│       │           │   │   └── ShowDocRMLTest.java
│       │           │   ├── go/
│       │           │   │   ├── GotoImplementationOCLTest.java
│       │           │   │   ├── GotoImplementationRESTest.java
│       │           │   │   ├── GotoImplementationRMLTest.java
│       │           │   │   ├── LineMarkerProviderOCLTest.java
│       │           │   │   ├── LineMarkerProviderRESTest.java
│       │           │   │   └── LineMarkerProviderRMLTest.java
│       │           │   ├── hints/
│       │           │   │   ├── OclParameterInfoHandlerTest.java
│       │           │   │   ├── ResParameterInfoHandlerTest.java
│       │           │   │   └── RmlParameterInfoHandlerTest.java
│       │           │   ├── intention/
│       │           │   │   ├── ExpandLocalOpenIntentionRMLTest.java
│       │           │   │   ├── FunctionBracesIntentionRESTest.java
│       │           │   │   └── FunctionBracesIntentionRMLTest.java
│       │           │   ├── search/
│       │           │   │   └── reference/
│       │           │   │       ├── FindLIdentUsagesOCLTest.java
│       │           │   │       ├── FindLIdentUsagesRESTest.java
│       │           │   │       ├── FindLIdentUsagesRMLTest.java
│       │           │   │       ├── FindUIdentUsagesOCLTest.java
│       │           │   │       ├── FindUIdentUsagesRESTest.java
│       │           │   │       ├── FindUIdentUsagesRMLTest.java
│       │           │   │       ├── ORModuleResolutionPsiGist_OCL_Test.java
│       │           │   │       ├── ORModuleResolutionPsiGist_RES_Test.java
│       │           │   │       ├── ORModuleResolutionPsiGist_RML_Test.java
│       │           │   │       ├── ResolveJsxPropertyElementRESTest.java
│       │           │   │       ├── ResolveJsxPropertyElementRMLTest.java
│       │           │   │       ├── ResolveJsxTagElementRESTest.java
│       │           │   │       ├── ResolveJsxTagElementRMLTest.java
│       │           │   │       ├── ResolveLowerElement_OCL_Test.java
│       │           │   │       ├── ResolveLowerElement_RES_Test.java
│       │           │   │       ├── ResolveLowerElement_RML_Test.java
│       │           │   │       ├── ResolveUpperElement_OCL_Test.java
│       │           │   │       ├── ResolveUpperElement_RES_Test.java
│       │           │   │       └── ResolveUpperElement_RML_Test.java
│       │           │   └── structure/
│       │           │       ├── ProjectStructure_DUNE_Test.java
│       │           │       ├── ProjectStructure_OCL_Test.java
│       │           │       └── ValPresentation_OCL_Test.java
│       │           └── lang/
│       │               ├── BaseParsingTestCase.java
│       │               ├── core/
│       │               │   ├── FileBaseTest.java
│       │               │   ├── ORSignatureTest.java
│       │               │   └── ORUtilTest.java
│       │               ├── doc/
│       │               │   ├── ocaml/
│       │               │   │   └── OclDocConverterTest.java
│       │               │   └── reason/
│       │               │       └── RmlDocConverterTest.java
│       │               ├── dune/
│       │               │   ├── CommentParsingTest.java
│       │               │   ├── DuneParsingTestCase.java
│       │               │   ├── DuneStanzaParsingTest.java
│       │               │   ├── DuneVarParsingTest.java
│       │               │   └── SExprParsingTest.java
│       │               ├── ocaml/
│       │               │   ├── AndParsingTest.java
│       │               │   ├── AnnotationParsingTest.java
│       │               │   ├── AssertParsingTest.java
│       │               │   ├── BeginParsingTest.java
│       │               │   ├── ChainingParsingTest.java
│       │               │   ├── ClassParsingTest.java
│       │               │   ├── CommentParsingTest.java
│       │               │   ├── DirectiveParsingTest.java
│       │               │   ├── ExceptionParsingTest.java
│       │               │   ├── ExpressionsParsingTest.java
│       │               │   ├── ExternalParsingTest.java
│       │               │   ├── FirstClassModuleParsingTest.java
│       │               │   ├── FunctionCallParsingTest.java
│       │               │   ├── FunctionParsingTest.java
│       │               │   ├── FunctorCallParsingTest.java
│       │               │   ├── FunctorParsingTest.java
│       │               │   ├── IfParsingTest.java
│       │               │   ├── ImmediateObjectParsingTest.java
│       │               │   ├── IncludeParsingTest.java
│       │               │   ├── LetParsingTest.java
│       │               │   ├── LocalOpenParsingTest.java
│       │               │   ├── LoopParsingTest.java
│       │               │   ├── MatchParsingTest.java
│       │               │   ├── ModuleParsingTest.java
│       │               │   ├── OclParsingTestCase.java
│       │               │   ├── OpenParsingTest.java
│       │               │   ├── OperatorParsingTest.java
│       │               │   ├── PolyVariantParsingTest.java
│       │               │   ├── RecordParsingTest.java
│       │               │   ├── SamplesParsingTest.java
│       │               │   ├── SignatureParsingTest.java
│       │               │   ├── TryWithParsingTest.java
│       │               │   ├── TypeParsingTest.java
│       │               │   ├── ValParsingTest.java
│       │               │   ├── VariantCallParsingTest.java
│       │               │   └── VariantDeclarationParsingTest.java
│       │               ├── reason/
│       │               │   ├── AndParsingTest.java
│       │               │   ├── AnnotationParsingTest.java
│       │               │   ├── AssertParsingTest.java
│       │               │   ├── ClassParsingTest.java
│       │               │   ├── CommentTest.java
│       │               │   ├── ComponentJsx3ParsingTest.java
│       │               │   ├── ExceptionParsingTest.java
│       │               │   ├── ExternalParsingTest.java
│       │               │   ├── FirstClassModuleParsingTest.java
│       │               │   ├── FunParsingTest.java
│       │               │   ├── FunctionCallParsingTest.java
│       │               │   ├── FunctionParsingTest.java
│       │               │   ├── FunctorCallParsingTest.java
│       │               │   ├── FunctorParsingTest.java
│       │               │   ├── IfParsingTest.java
│       │               │   ├── IncludeParsingTest.java
│       │               │   ├── JsObjectParsingTest.java
│       │               │   ├── JsxParsingTest.java
│       │               │   ├── LetParsingTest.java
│       │               │   ├── LocalOpenParsingTest.java
│       │               │   ├── MacroParsingTest.java
│       │               │   ├── ModuleParsingTest.java
│       │               │   ├── OpenParsingTest.java
│       │               │   ├── PolyVariantParsingTest.java
│       │               │   ├── PolyVariantTest.java
│       │               │   ├── RecordParsingTest.java
│       │               │   ├── RmlParsingTestCase.java
│       │               │   ├── SamplesParsingTest.java
│       │               │   ├── SignatureParsingTest.java
│       │               │   ├── StringTemplateParsingTest.java
│       │               │   ├── SwitchParsingTest.java
│       │               │   ├── TryParsingTest.java
│       │               │   ├── TypeParsingTest.java
│       │               │   ├── VariantCallParsingTest.java
│       │               │   └── VariantDeclarationParsingTest.java
│       │               └── rescript/
│       │                   ├── AndParsingTest.java
│       │                   ├── AnnotationParsingTest.java
│       │                   ├── AssertParsingTest.java
│       │                   ├── ChainingParsingTest.java
│       │                   ├── CommentTest.java
│       │                   ├── ComponentJsx3ParsingTest.java
│       │                   ├── ExceptionParsingTest.java
│       │                   ├── ExpressionChainingParsingTest.java
│       │                   ├── ExternalParsingTest.java
│       │                   ├── FileFromJarTest.java
│       │                   ├── FirstClassModuleParsingTest.java
│       │                   ├── FunctionCallParsingTest.java
│       │                   ├── FunctionParsingTest.java
│       │                   ├── FunctorCallParsingTest.java
│       │                   ├── FunctorParsingTest.java
│       │                   ├── IfParsingTest.java
│       │                   ├── IncludeParsingTest.java
│       │                   ├── JsObjectParsingTest.java
│       │                   ├── JsxParsingTest.java
│       │                   ├── LetParsingTest.java
│       │                   ├── LocalOpenParsingTest.java
│       │                   ├── MacroParsingTest.java
│       │                   ├── ModuleParsingTest.java
│       │                   ├── OpenParsingTest.java
│       │                   ├── PolyVariantParsingTest.java
│       │                   ├── RecordParsingTest.java
│       │                   ├── ResParsingTestCase.java
│       │                   ├── SignatureParsingTest.java
│       │                   ├── StringTemplateParsingTest.java
│       │                   ├── SwitchParsingTest.java
│       │                   ├── TryParsingTest.java
│       │                   ├── TypeParsingTest.java
│       │                   ├── VariantCallParsingTest.java
│       │                   └── VariantDeclarationParsingTest.java
│       └── testData/
│           ├── com/
│           │   └── reason/
│           │       ├── bs/
│           │       │   ├── bsplatform.json
│           │       │   ├── comments.json
│           │       │   ├── deps.json
│           │       │   ├── issue_214.json
│           │       │   ├── ninja-rescript.build
│           │       │   ├── src_array.json
│           │       │   ├── src_object.json
│           │       │   └── src_string.json
│           │       ├── esy/
│           │       │   └── package.json
│           │       └── lang/
│           │           ├── ReactDOM.res
│           │           ├── component/
│           │           │   ├── AnotherComp.re
│           │           │   ├── CompMessage.res
│           │           │   ├── Component.re
│           │           │   ├── Inner.re
│           │           │   └── Inner.res
│           │           ├── jsxDOMU.res
│           │           ├── pervasives.ml
│           │           └── samples/
│           │               ├── belt_Map.ml
│           │               ├── stream.ml
│           │               └── toto.re
│           ├── icu4j/
│           │   └── mt.res
│           └── ns/
│               └── bsconfig.json
└── website/
    ├── .gitignore
    ├── README.md
    ├── babel.config.js
    ├── docs/
    │   ├── Other/
    │   │   ├── faq.md
    │   │   └── live-templates.md
    │   ├── build-tools/
    │   │   ├── _category_.json
    │   │   ├── bucklescript.md
    │   │   ├── dune.md
    │   │   └── esy.md
    │   ├── contributing/
    │   │   ├── _category_.json
    │   │   ├── how-to-contribute.md
    │   │   ├── plugin-architecture.md
    │   │   ├── plugin-development.md
    │   │   └── resources.md
    │   ├── intro.md
    │   ├── language-support/
    │   │   ├── _category_.json
    │   │   ├── ocaml.md
    │   │   ├── reason.md
    │   │   └── rescript.md
    │   └── project-types.md
    ├── docusaurus.config.js
    ├── package.json
    ├── sidebars.js
    ├── src/
    │   ├── components/
    │   │   └── HomepageFeatures/
    │   │       ├── index.js
    │   │       └── styles.module.css
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       ├── index.js
    │       └── index.module.css
    └── static/
        ├── .nojekyll
        └── img/
            └── arch/
                ├── fake_module.excalidraw
                ├── parser.excalidraw
                ├── psihier.excalidraw
                ├── stub_keys.excalidraw
                ├── tokens.xcf
                └── types.excalidraw
Download .txt
Showing preview only (446K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5705 symbols across 765 files)

FILE: src/main/java/com/reason/FileHelper.java
  class FileHelper (line 20) | public class FileHelper {
    method FileHelper (line 21) | private FileHelper() {
    method isCompilable (line 24) | public static boolean isCompilable(@Nullable FileType fileType) {
    method isBsConfigJson (line 32) | public static boolean isBsConfigJson(@Nullable VirtualFile file) {
    method isRescriptConfigJson (line 36) | public static boolean isRescriptConfigJson(@Nullable VirtualFile file) {
    method isCompilerConfigJson (line 40) | public static boolean isCompilerConfigJson(@Nullable VirtualFile file) {
    method isReason (line 48) | public static boolean isReason(@Nullable FileType fileType) {
    method isRescript (line 52) | public static boolean isRescript(@Nullable FileType fileType) {
    method isOCamlLexer (line 56) | private static boolean isOCamlLexer(@Nullable FileType fileType) {
    method isOCamlParser (line 60) | private static boolean isOCamlParser(@Nullable FileType fileType) {
    method isOCaml (line 64) | public static boolean isOCaml(@Nullable FileType fileType) {
    method isNinja (line 68) | public static boolean isNinja(@Nullable VirtualFile file) {
    method isInterface (line 72) | public static boolean isInterface(@Nullable FileType fileType) {
    method shortLocation (line 78) | @NotNull
    method getPsiModule (line 89) | public static @Nullable RPsiModule getPsiModule(@Nullable FileModuleDa...

FILE: src/main/java/com/reason/comp/CliType.java
  type CliType (line 6) | public interface CliType {
    method getCompilerType (line 7) | @NotNull CompilerType getCompilerType();
    type Bs (line 9) | enum Bs implements CliType {
      method getCompilerType (line 13) | @Override
    type Rescript (line 19) | enum Rescript implements CliType {
      method getCompilerType (line 23) | @Override
    type Dune (line 29) | enum Dune implements CliType {
      method getCompilerType (line 35) | @Override
    type Esy (line 41) | enum Esy implements CliType {
      method getCompilerType (line 46) | @Override

FILE: src/main/java/com/reason/comp/CompilerOutputAnalyzer.java
  type CompilerOutputAnalyzer (line 9) | public interface CompilerOutputAnalyzer {
    method getOutputInfo (line 13) | @NotNull List<OutputInfo> getOutputInfo();
    method onTextAvailable (line 15) | void onTextAvailable(@NotNull String line);

FILE: src/main/java/com/reason/comp/CompilerOutputListener.java
  class CompilerOutputListener (line 15) | public class CompilerOutputListener implements ProcessListener {
    method CompilerOutputListener (line 21) | public CompilerOutputListener(@NotNull Project project, @NotNull Compi...
    method startNotified (line 26) | @Override
    method processTerminated (line 31) | @Override
    method onTextAvailable (line 56) | @Override

FILE: src/main/java/com/reason/comp/ORCompiler.java
  type ORCompiler (line 8) | public interface ORCompiler {
    type CompilerType (line 9) | enum CompilerType {
      method CompilerType (line 17) | CompilerType(String displayName) {
      method displayName (line 21) | public @NotNull String displayName() {
    method getType (line 26) | @NotNull CompilerType getType();
    method isConfigured (line 28) | boolean isConfigured(@NotNull Project project);
    method isAvailable (line 30) | boolean isAvailable(@NotNull Project project);
    method getFullVersion (line 32) | @NotNull String getFullVersion(@Nullable VirtualFile file);
    method runDefault (line 34) | void runDefault(@NotNull VirtualFile file, @Nullable ORProcessTerminat...
    method run (line 36) | void run(@Nullable VirtualFile file, @NotNull CliType cliType, @Nullab...
    method isAvailable (line 38) | boolean isAvailable();

FILE: src/main/java/com/reason/comp/ORCompilerConfigManager.java
  class ORCompilerConfigManager (line 20) | @Service(Service.Level.PROJECT)
    method ORCompilerConfigManager (line 25) | public ORCompilerConfigManager(@NotNull Project project) {
    method refresh (line 29) | public void refresh(@NotNull VirtualFile configFile) {
    method getConfig (line 34) | public @Nullable BsConfig getConfig(@Nullable VirtualFile configFile) {
    method findNearestConfigFile (line 56) | public @Nullable VirtualFile findNearestConfigFile(@NotNull VirtualFil...
    method getNearestConfig (line 60) | public @Nullable BsConfig getNearestConfig(@Nullable VirtualFile sourc...
    method getNearestConfig (line 65) | public @Nullable BsConfig getNearestConfig(@Nullable PsiFile psiFile) {

FILE: src/main/java/com/reason/comp/ORCompilerManager.java
  class ORCompilerManager (line 18) | @Service(Service.Level.PROJECT)
    method ORCompilerManager (line 23) | public ORCompilerManager(@NotNull Project project) {
    method getCompiler (line 27) | public @Nullable ORCompiler getCompiler(@NotNull CliType cliType) {
    method getCompiler (line 31) | public @Nullable ORCompiler getCompiler(@NotNull CompilerType compiler...
    method getCompiler (line 36) | public @Nullable <T extends ORCompiler> T getCompiler(@NotNull Class<T...
    method getCompiler (line 41) | public @Nullable ORResolvedCompiler<? extends ORCompiler> getCompiler(...
    method traverseAncestorsForCompiler (line 46) | private @Nullable ORResolvedCompiler<? extends ORCompiler> traverseAnc...
    method getCompilerClass (line 74) | private static @NotNull Class<? extends ORCompiler> getCompilerClass(@...
    class CompilerVisitor (line 83) | private class CompilerVisitor extends VirtualFileVisitor<VirtualFile> {
      method CompilerVisitor (line 86) | CompilerVisitor() {
      method visitFile (line 90) | @Override

FILE: src/main/java/com/reason/comp/ORCompilerOutputAnalyzer.java
  class ORCompilerOutputAnalyzer (line 12) | public abstract class ORCompilerOutputAnalyzer implements CompilerOutput...
    method getOutputInfo (line 16) | @Override
    method onTextAvailable (line 21) | @Override
    method extractExtendedFilePositions (line 24) | protected @Nullable OutputInfo extractExtendedFilePositions(@NotNull L...
    method extractSyntaxErrorFilePosition (line 44) | protected @Nullable OutputInfo extractSyntaxErrorFilePosition(@NotNull...
    method addInfo (line 74) | protected @NotNull OutputInfo addInfo(@NotNull String path, @NotNull S...

FILE: src/main/java/com/reason/comp/ORConstants.java
  class ORConstants (line 3) | public class ORConstants {
    method ORConstants (line 19) | private ORConstants() {

FILE: src/main/java/com/reason/comp/ORPlatform.java
  class ORPlatform (line 13) | public class ORPlatform {
    method ORPlatform (line 16) | private ORPlatform() {
    method findCompilerPathInNodeModules (line 19) | public static @Nullable VirtualFile findCompilerPathInNodeModules(@Not...
    method findBinary (line 58) | public static @Nullable VirtualFile findBinary(@NotNull VirtualFile bi...
    method getOsBinaryWrapperExtension (line 84) | @VisibleForTesting
    method getOsPrefix (line 89) | @VisibleForTesting

FILE: src/main/java/com/reason/comp/ORResolvedCompiler.java
  class ORResolvedCompiler (line 11) | public class ORResolvedCompiler<C extends ORCompiler> {
    method ORResolvedCompiler (line 16) | public ORResolvedCompiler(@NotNull C compiler, @NotNull VirtualFile co...
    method getType (line 22) | public @NotNull ORCompiler.CompilerType getType() {
    method runDefault (line 26) | public void runDefault(@NotNull VirtualFile file, @Nullable ORProcessT...
    method getFullVersion (line 30) | public @NotNull String getFullVersion() {
    method getConfigFile (line 34) | public @NotNull VirtualFile getConfigFile() {
    method getContentRoot (line 38) | public @Nullable VirtualFile getContentRoot() {
    method getPath (line 42) | public @NotNull String getPath() {

FILE: src/main/java/com/reason/comp/ProcessFinishedListener.java
  class ProcessFinishedListener (line 6) | public class ProcessFinishedListener extends ProcessAdapter {
    method ProcessFinishedListener (line 9) | public ProcessFinishedListener() {
    method ProcessFinishedListener (line 13) | public ProcessFinishedListener(long start) {
    method processTerminated (line 17) | @Override
    method formatBuildTime (line 26) | private static @NotNull String formatBuildTime(long milliSeconds) {

FILE: src/main/java/com/reason/comp/bs/BsColoredProcessHandler.java
  class BsColoredProcessHandler (line 10) | class BsColoredProcessHandler extends KillableProcessHandler implements ...
    method BsColoredProcessHandler (line 15) | BsColoredProcessHandler(@NotNull GeneralCommandLine commandLine, @Null...
    method onOSProcessTerminated (line 20) | @Override
    method notifyTextAvailable (line 28) | @Override
    method coloredTextAvailable (line 33) | @Override

FILE: src/main/java/com/reason/comp/bs/BsCompiler.java
  class BsCompiler (line 21) | @Service(Service.Level.PROJECT)
    method BsCompiler (line 33) | private BsCompiler(@NotNull Project project) {
    method getType (line 37) | @Override
    method refreshNinjaBuild (line 42) | public void refreshNinjaBuild() {
    method getFullVersion (line 46) | @Override
    method getNamespace (line 51) | public @NotNull String getNamespace(@NotNull VirtualFile sourceFile) {
    method runDefault (line 56) | @Override
    method run (line 61) | @Override
    method isConfigured (line 95) | @Override
    method isAvailable (line 101) | @Override
    method convert (line 106) | public @Nullable String convert(@Nullable VirtualFile virtualFile, boo...
    method readNinjaBuild (line 118) | public @NotNull Ninja readNinjaBuild(@Nullable VirtualFile contentRoot) {
    method isDisabled (line 130) | private boolean isDisabled() {
    method isAvailable (line 142) | @Override

FILE: src/main/java/com/reason/comp/bs/BsConfig.java
  class BsConfig (line 7) | public class BsConfig {
    method BsConfig (line 22) | BsConfig(@NotNull String name, @Nullable String namespace, @Nullable S...
    method getNamespace (line 56) | public @NotNull String getNamespace() {
    method hasNamespace (line 60) | public boolean hasNamespace() {
    method getSources (line 64) | public @NotNull Set<String> getSources() {
    method getDevSources (line 68) | public @NotNull Set<String> getDevSources() {
    method getName (line 72) | public @NotNull String getName() {
    method getDependencies (line 76) | public @NotNull Set<String> getDependencies() {
    method getBscFlags (line 80) | public @NotNull Set<String> getBscFlags() {
    method getOpenedDeps (line 84) | public @NotNull Set<String> getOpenedDeps() {
    method getJsxVersion (line 88) | public @Nullable String getJsxVersion() {
    method getJsxMode (line 92) | public @Nullable String getJsxMode() {
    method isUncurried (line 96) | public boolean isUncurried() {
    method getPpx (line 100) | public @NotNull String[] getPpx() {
    method setUseExternalAsSource (line 104) | public void setUseExternalAsSource(boolean useExternalAsSource) {

FILE: src/main/java/com/reason/comp/bs/BsConfigReader.java
  class BsConfigReader (line 19) | public class BsConfigReader {
    method BsConfigReader (line 22) | private BsConfigReader() {
    method read (line 25) | @NotNull
    method read (line 30) | @NotNull
    method parse (line 37) | @NotNull
    method toNamespace (line 173) | @NotNull
    method readSources (line 188) | private static void readSources(
    method parseSourceItem (line 216) | @Nullable

FILE: src/main/java/com/reason/comp/bs/BsFormatProcess.java
  class BsFormatProcess (line 16) | @Service(Service.Level.PROJECT)
    method BsFormatProcess (line 22) | public BsFormatProcess(@NotNull Project project) {
    method convert (line 26) | @NotNull

FILE: src/main/java/com/reason/comp/bs/BsLineProcessor.java
  class BsLineProcessor (line 17) | public class BsLineProcessor implements CompilerOutputAnalyzer {
    method getOutputInfo (line 24) | @Override
    type BuildStatus (line 32) | enum BuildStatus {
    method BsLineProcessor (line 48) | public BsLineProcessor(Log log) {
    method onTextAvailable (line 52) | @Override
    method reset (line 132) | public void reset() {
    method extractExtendedFilePositions (line 138) | private @Nullable OutputInfo extractExtendedFilePositions(@Nullable St...
    method extractFilePositions (line 161) | private @Nullable OutputInfo extractFilePositions(@Nullable String tex...
    method addInfo (line 203) | private @NotNull OutputInfo addInfo(@NotNull String path, @NotNull Str...
    method addInfo (line 215) | private @NotNull OutputInfo addInfo(@NotNull String path, @NotNull Str...

FILE: src/main/java/com/reason/comp/bs/BsNotification.java
  class BsNotification (line 14) | public class BsNotification {
    method BsNotification (line 16) | private BsNotification() {
    method showBsbNotFound (line 19) | @Nls
    method showWorkingDirectoryNotFound (line 41) | @Nls

FILE: src/main/java/com/reason/comp/bs/BsPlatform.java
  class BsPlatform (line 15) | public class BsPlatform {
    method BsPlatform (line 18) | private BsPlatform() {
    method findConfigFiles (line 21) | public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Proj...
    method findConfigFile (line 40) | public static @Nullable VirtualFile findConfigFile(@NotNull Project pr...
    method findBsbExecutable (line 46) | public static @Nullable VirtualFile findBsbExecutable(@NotNull Project...
    method findBscExecutable (line 52) | public static @Nullable VirtualFile findBscExecutable(@NotNull Project...
    method findRefmtExecutable (line 58) | public static @Nullable VirtualFile findRefmtExecutable(@NotNull Proje...

FILE: src/main/java/com/reason/comp/bs/BsProcess.java
  class BsProcess (line 18) | public final class BsProcess {
    method BsProcess (line 22) | public BsProcess(@NotNull Project project) {
    method create (line 26) | @Nullable ProcessHandler create(@NotNull VirtualFile source, @NotNull ...
    method createProcessHandler (line 40) | @Nullable
    method killIt (line 57) | private void killIt() {
    method getGeneralCommandLine (line 64) | @Nullable
    method getFullVersion (line 88) | public @NotNull String getFullVersion(@Nullable VirtualFile sourceFile) {

FILE: src/main/java/com/reason/comp/bs/BsResolvedCompiler.java
  class BsResolvedCompiler (line 7) | public class BsResolvedCompiler extends ORResolvedCompiler<BsCompiler> {
    method BsResolvedCompiler (line 8) | public BsResolvedCompiler(@NotNull BsCompiler compiler, @NotNull Virtu...
    method readNinja (line 12) | public @Nullable Ninja readNinja() {

FILE: src/main/java/com/reason/comp/bs/Ninja.java
  class Ninja (line 60) | public final class Ninja {
    method Ninja (line 70) | public Ninja(@Nullable String contents) {
    method extractRuleAstj (line 86) | private @NotNull List<String> extractRuleAstj(@NotNull String contents) {
    method extractMijCommand (line 109) | private @NotNull List<String> extractMijCommand(int rulePos, @NotNull ...
    method extractRuleMij (line 122) | private @NotNull List<String> extractRuleMij(@NotNull String contents) {
    method extractRuleMijDev (line 139) | private @NotNull List<String> extractRuleMijDev(@NotNull String conten...
    method getArgs (line 147) | public @NotNull List<String> getArgs() {
    method getArgsDev (line 151) | public @NotNull List<String> getArgsDev() {
    method readIncludes (line 155) | private @NotNull List<String> readIncludes(@Nullable String contents) {
    method readPpxIncludes (line 196) | public @NotNull List<String> readPpxIncludes(@Nullable String contents) {
    method readPkgFlags (line 222) | private @NotNull List<String> readPkgFlags(@Nullable String contents) {
    method readBscFlags (line 243) | private @NotNull List<String> readBscFlags(@Nullable String contents) {
    method addInclude (line 264) | public void addInclude(@NotNull String source) {
    method getPkgFlags (line 268) | public @NotNull List<String> getPkgFlags() {
    method getBscFlags (line 272) | public @NotNull List<String> getBscFlags() {
    method getPpxIncludes (line 276) | public @NotNull List<String> getPpxIncludes() {
    method getIncludes (line 280) | public @NotNull List<String> getIncludes() {
    method isRescriptFormat (line 284) | public boolean isRescriptFormat() {

FILE: src/main/java/com/reason/comp/dune/DuneCompiler.java
  class DuneCompiler (line 18) | @Service(Service.Level.PROJECT)
    method DuneCompiler (line 25) | DuneCompiler(@NotNull Project project) {
    method getType (line 29) | @Override
    method getFullVersion (line 34) | @Override
    method isConfigured (line 69) | @Override
    method isAvailable (line 75) | @Override
    method runDefault (line 80) | @Override
    method run (line 85) | @Override
    method isAvailable (line 119) | @Override

FILE: src/main/java/com/reason/comp/dune/DuneOutputAnalyzer.java
  class DuneOutputAnalyzer (line 9) | public class DuneOutputAnalyzer extends ORCompilerOutputAnalyzer {
    type OutputState (line 20) | enum OutputState {
    method onTextAvailable (line 29) | @Override

FILE: src/main/java/com/reason/comp/dune/DunePlatform.java
  class DunePlatform (line 14) | public class DunePlatform {
    method DunePlatform (line 20) | private DunePlatform() {
    method findConfigFiles (line 23) | public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Proj...
    method findContentRoot (line 31) | public static @Nullable VirtualFile findContentRoot(@NotNull Project p...

FILE: src/main/java/com/reason/comp/dune/DuneProcess.java
  class DuneProcess (line 15) | public final class DuneProcess {
    method DuneProcess (line 19) | DuneProcess(@NotNull Project project) {
    method startNotify (line 24) | public void startNotify() {
    method create (line 34) | public @Nullable ProcessHandler create(@NotNull VirtualFile source, @N...
    method killIt (line 60) | private void killIt() {
    class DuneCommandLine (line 67) | static class DuneCommandLine extends OpamCommandLine {
      method DuneCommandLine (line 70) | DuneCommandLine(@NotNull Project project, @NotNull String binary) {
      method getParameters (line 74) | @Override
      method addParameters (line 79) | @NotNull DuneCommandLine addParameters(@NotNull CliType.Dune cliType) {

FILE: src/main/java/com/reason/comp/esy/Esy.java
  class Esy (line 11) | public class Esy {
    method Esy (line 13) | private Esy() {}
    method findEsyExecutable (line 15) | public static Optional<VirtualFile> findEsyExecutable() {
    method findEsyExecutableInstalledWithN (line 24) | private static Optional<VirtualFile> findEsyExecutableInstalledWithN() {
    method findEsyExecutableInPath (line 31) | private static @NotNull Optional<Path> findEsyExecutableInPath() {

FILE: src/main/java/com/reason/comp/esy/EsyCompiler.java
  class EsyCompiler (line 18) | @Service(Service.Level.PROJECT)
    method EsyCompiler (line 25) | EsyCompiler(@NotNull Project project) {
    method getType (line 29) | @Override
    method getFullVersion (line 34) | @Override
    method runDefault (line 39) | @Override
    method run (line 44) | @Override
    method isConfigured (line 81) | @Override
    method isAvailable (line 87) | @Override
    method isAvailable (line 92) | @Override

FILE: src/main/java/com/reason/comp/esy/EsyConstants.java
  class EsyConstants (line 3) | public class EsyConstants {
    method EsyConstants (line 9) | private EsyConstants() {}

FILE: src/main/java/com/reason/comp/esy/EsyNotification.java
  class EsyNotification (line 10) | public class EsyNotification {
    method EsyNotification (line 11) | private EsyNotification() {
    method showEsyProjectNotFound (line 14) | @Nls
    method showExecutionException (line 20) | @Nls

FILE: src/main/java/com/reason/comp/esy/EsyPackageJson.java
  class EsyPackageJson (line 16) | public class EsyPackageJson {
    method EsyPackageJson (line 17) | private EsyPackageJson() {
    method isEsyPackageJson (line 21) | public static boolean isEsyPackageJson(@Nullable VirtualFile file) {
    class FileContentPatternCondition (line 35) | private static class FileContentPatternCondition extends PatternCondit...
      method FileContentPatternCondition (line 36) | public FileContentPatternCondition() {
      method accepts (line 41) | @Override

FILE: src/main/java/com/reason/comp/esy/EsyPlatform.java
  class EsyPlatform (line 15) | public class EsyPlatform {
    method EsyPlatform (line 16) | private EsyPlatform() {
    method findConfigFiles (line 19) | public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Proj...
    method isEsyProject (line 23) | public static boolean isEsyProject(@NotNull Project project) {
    method findEsyConfigurationFiles (line 27) | public static List<VirtualFile> findEsyConfigurationFiles(@NotNull Pro...
    method findEsyContentRoots (line 35) | public static List<VirtualFile> findEsyContentRoots(@NotNull Project p...
    method findEsyExecutable (line 42) | public static Optional<VirtualFile> findEsyExecutable(@NotNull Project...

FILE: src/main/java/com/reason/comp/esy/EsyProcess.java
  class EsyProcess (line 15) | public class EsyProcess {
    method EsyProcess (line 23) | EsyProcess(@NotNull Project project) {
    method startNotify (line 27) | public void startNotify() {
    method create (line 37) | @Nullable
    method killIt (line 68) | private void killIt() {
    method newCommandLine (line 76) | private static GeneralCommandLine newCommandLine(@NotNull VirtualFile ...
    method getCommand (line 85) | private static @NotNull String getCommand(@NotNull CliType.Esy cliType) {
    method findWorkingDirectory (line 93) | private static @Nullable VirtualFile findWorkingDirectory(@NotNull Pro...
    method processTerminated (line 103) | @Override

FILE: src/main/java/com/reason/comp/ocaml/OcamlFormatProcess.java
  class OcamlFormatProcess (line 16) | @Service(Service.Level.PROJECT)
    method OcamlFormatProcess (line 22) | public OcamlFormatProcess(Project project) {
    method format (line 26) | public @NotNull String format(@NotNull VirtualFile file, @NotNull Stri...
    class OCamlFormatCommandLine (line 75) | static class OCamlFormatCommandLine extends OpamCommandLine {
      method OCamlFormatCommandLine (line 78) | OCamlFormatCommandLine(@NotNull Project project, @NotNull String bin...
      method addParameters (line 82) | @NotNull OCamlFormatCommandLine addParameters(@NotNull VirtualFile f...
      method getParameters (line 89) | @Override

FILE: src/main/java/com/reason/comp/ocaml/OpamCommandLine.java
  class OpamCommandLine (line 17) | public abstract class OpamCommandLine {
    method OpamCommandLine (line 25) | OpamCommandLine(@NotNull Project project, @NotNull String binary, bool...
    method OpamCommandLine (line 31) | protected OpamCommandLine(@NotNull Project project, @NotNull String bi...
    method getParameters (line 35) | protected abstract @NotNull List<String> getParameters();
    method create (line 37) | public @Nullable GeneralCommandLine create(@NotNull VirtualFile source) {

FILE: src/main/java/com/reason/comp/ocaml/OpamEnv.java
  class OpamEnv (line 10) | @Service(Service.Level.APP)
    method getEnv (line 14) | public @Nullable Map<String, String> getEnv(@Nullable String switchNam...
    method computeEnv (line 18) | public void computeEnv(@Nullable String opamLocation, @Nullable String...

FILE: src/main/java/com/reason/comp/ocaml/OpamProcess.java
  class OpamProcess (line 16) | @Service(Service.Level.APP)
    method destroyProcessImpl (line 20) | @Override protected void destroyProcessImpl() {
    method detachProcessImpl (line 23) | @Override protected void detachProcessImpl() {
    method detachIsDefault (line 26) | @Override public boolean detachIsDefault() {
    method getProcessInput (line 30) | @Nullable @Override public OutputStream getProcessInput() {
    method list (line 35) | public void list(@NotNull String opamLocation, @NotNull String version...
    method env (line 77) | public void env(@Nullable String opamLocation, @Nullable String versio...
    method listSwitch (line 121) | public void listSwitch(@NotNull String opamRootPath, @Nullable String ...
    method toString (line 140) | @Override public String toString() {
    class ListProcessListener (line 145) | static class ListProcessListener implements ProcessListener {
      method ListProcessListener (line 152) | public ListProcessListener(@NotNull ORProcessTerminated<List<OpamSwi...
      method processTerminated (line 156) | @Override
      method onTextAvailable (line 161) | @Override

FILE: src/main/java/com/reason/comp/rescript/ResCompiler.java
  class ResCompiler (line 25) | @Service(Service.Level.PROJECT)
    method ResCompiler (line 32) | private ResCompiler(@NotNull Project project) {
    method getType (line 36) | @Override
    method getFullVersion (line 41) | @Override
    method runDefault (line 57) | @Override
    method run (line 62) | @Override
    method getCommandLine (line 118) | private @NotNull GeneralCommandLine getCommandLine(@NotNull String bin...
    method readNinjaBuild (line 125) | public @NotNull Ninja readNinjaBuild(@Nullable VirtualFile contentRoot) {
    method isConfigured (line 138) | @Override
    method isAvailable (line 143) | @Override
    method isAvailable (line 149) | @Override

FILE: src/main/java/com/reason/comp/rescript/ResConfigReader.java
  class ResConfigReader (line 7) | public class ResConfigReader {
    method ResConfigReader (line 8) | private ResConfigReader() {
    method read (line 11) | public static @NotNull BsConfig read(@NotNull VirtualFile bsConfigFile) {
    method read (line 15) | public static @NotNull BsConfig read(@NotNull VirtualFile configFile, ...

FILE: src/main/java/com/reason/comp/rescript/ResFormatProcess.java
  class ResFormatProcess (line 14) | @Service(Service.Level.PROJECT)
    method ResFormatProcess (line 20) | public ResFormatProcess(@NotNull Project project) {
    method format (line 24) | @NotNull

FILE: src/main/java/com/reason/comp/rescript/ResPlatform.java
  class ResPlatform (line 17) | public class ResPlatform {
    method ResPlatform (line 20) | private ResPlatform() {
    method findConfigFiles (line 23) | public static @NotNull List<VirtualFile> findConfigFiles(@NotNull Proj...
    method findConfigFile (line 41) | static @Nullable VirtualFile findConfigFile(@NotNull Project project, ...
    method findBscExecutable (line 47) | public static @Nullable VirtualFile findBscExecutable(@NotNull Project...
    method findRescriptExecutable (line 53) | public static @Nullable VirtualFile findRescriptExecutable(@NotNull Pr...
    method findRefmtExecutable (line 59) | public static @Nullable VirtualFile findRefmtExecutable(@NotNull Proje...
    method isDevSource (line 65) | public static boolean isDevSource(@NotNull VirtualFile sourceFile, @No...

FILE: src/main/java/com/reason/comp/rescript/ResProcessHandler.java
  class ResProcessHandler (line 9) | public class ResProcessHandler extends KillableProcessHandler implements...
    method ResProcessHandler (line 12) | public ResProcessHandler(@NotNull GeneralCommandLine commandLine) thro...
    method notifyTextAvailable (line 16) | @Override
    method coloredTextAvailable (line 21) | @Override

FILE: src/main/java/com/reason/comp/rescript/ResResolvedCompiler.java
  class ResResolvedCompiler (line 8) | public class ResResolvedCompiler extends ORResolvedCompiler<ResCompiler> {
    method ResResolvedCompiler (line 9) | public ResResolvedCompiler(@NotNull ResCompiler compiler, @NotNull Vir...
    method readNinjaBuild (line 13) | public @Nullable Ninja readNinjaBuild() {

FILE: src/main/java/com/reason/comp/rescript/RescriptOutputAnalyzer.java
  class RescriptOutputAnalyzer (line 8) | public class RescriptOutputAnalyzer extends ORCompilerOutputAnalyzer {
    type OutputState (line 11) | enum OutputState {
    method onTextAvailable (line 26) | @Override

FILE: src/main/java/com/reason/hints/InsightManager.java
  class InsightManager (line 20) | @Service(Service.Level.PROJECT)
    method InsightManager (line 27) | InsightManager(@NotNull Project project) {
    method downloadRincewindIfNeeded (line 31) | public void downloadRincewindIfNeeded(@NotNull VirtualFile sourceFile) {
    method queryTypes (line 50) | public void queryTypes(@Nullable VirtualFile sourceFile, @NotNull Path...
    method dumpMeta (line 59) | public @NotNull List<String> dumpMeta(@NotNull VirtualFile cmtFile) {
    method dumpTree (line 67) | public @NotNull String dumpTree(@NotNull VirtualFile cmtFile) {
    method dumpInferredTypes (line 75) | public @NotNull List<String> dumpInferredTypes(@NotNull VirtualFile cm...
    method getRincewindTarget (line 83) | @Nullable File getRincewindTarget(@Nullable String filename) {
    method getRincewindFilename (line 92) | @Nullable String getRincewindFilename(@Nullable VirtualFile sourceFile...

FILE: src/main/java/com/reason/hints/Rincewind.java
  class Rincewind (line 7) | public class Rincewind {
    method Rincewind (line 10) | private Rincewind() {
    method extractOcamlVersion (line 13) | static @Nullable String extractOcamlVersion(@Nullable String fullVersi...
    method getLatestVersion (line 27) | static @NotNull String getLatestVersion(@Nullable String ocamlVersion) {

FILE: src/main/java/com/reason/hints/RincewindDownloader.java
  class RincewindDownloader (line 19) | public class RincewindDownloader extends Task.Backgroundable {
    method RincewindDownloader (line 27) | RincewindDownloader(@Nullable Project project, @NotNull File rincewind...
    method run (line 35) | @Override

FILE: src/main/java/com/reason/hints/RincewindProcess.java
  class RincewindProcess (line 19) | @Service(Service.Level.PROJECT)
    method RincewindProcess (line 24) | RincewindProcess(@NotNull Project project) {
    method types (line 28) | public void types(@NotNull VirtualFile sourceFile, @NotNull String rin...
    method dumpTree (line 99) | public @NotNull String dumpTree(@NotNull VirtualFile cmtFile, @NotNull...
    method dumpMeta (line 109) | public @NotNull List<String> dumpMeta(@NotNull String rincewindBinary,...
    method dumpTypes (line 118) | public @NotNull List<String> dumpTypes(@NotNull String rincewindBinary...
    type DumpVisitor (line 128) | public interface DumpVisitor {
      method visitLine (line 129) | void visitLine(String line);
    method dumper (line 132) | public void dumper(@NotNull String rincewindBinary, @NotNull VirtualFi...
    method decodePosition (line 180) | private @NotNull LogicalPosition decodePosition(@NotNull String locati...

FILE: src/main/java/com/reason/ide/CompileOnSave.java
  class CompileOnSave (line 12) | public class CompileOnSave implements PropertyChangeListener {
    method CompileOnSave (line 18) | public CompileOnSave(@NotNull Project project, @NotNull VirtualFile fi...
    method propertyChange (line 25) | @Override

FILE: src/main/java/com/reason/ide/EditorPosition.java
  class EditorPosition (line 9) | public class EditorPosition {
    method EditorPosition (line 15) | public EditorPosition(@NotNull String[] lines) {
    method getPositionFromOffset (line 27) | @Nullable

FILE: src/main/java/com/reason/ide/IconProvider.java
  class IconProvider (line 14) | public class IconProvider extends com.intellij.ide.IconProvider {
    method getIcon (line 15) | @Nullable
    method getDataModuleIcon (line 62) | public static @NotNull Icon getDataModuleIcon(@NotNull FileModuleData ...
    method getDataModuleFileIcon (line 73) | public static @NotNull Icon getDataModuleFileIcon(@NotNull FileModuleD...
    method isEsyPackageJson (line 84) | private boolean isEsyPackageJson(@Nullable PsiFile element) {

FILE: src/main/java/com/reason/ide/OREditorFactoryListener.java
  class OREditorFactoryListener (line 7) | public class OREditorFactoryListener implements EditorFactoryListener {
    method editorCreated (line 8) | @Override

FILE: src/main/java/com/reason/ide/OREditorTracker.java
  class OREditorTracker (line 21) | @Service(Service.Level.PROJECT)
    method OREditorTracker (line 25) | public OREditorTracker(@NotNull Project project) {
    method dispose (line 67) | @Override
    class ORDocumentEventListener (line 72) | static class ORDocumentEventListener implements DocumentListener {
      method ORDocumentEventListener (line 76) | public ORDocumentEventListener(TextEditor textEditor) {
      method beforeDocumentChange (line 80) | @Override
      method documentChanged (line 87) | @Override

FILE: src/main/java/com/reason/ide/ORFileDocumentListener.java
  class ORFileDocumentListener (line 12) | @Service(Service.Level.PROJECT)
    method ensureSubscribed (line 16) | public static void ensureSubscribed(@NotNull Project project) {
    method ORFileDocumentListener (line 20) | private ORFileDocumentListener(@NotNull Project project) {
    method dispose (line 33) | @Override

FILE: src/main/java/com/reason/ide/ORFileUtils.java
  class ORFileUtils (line 15) | public class ORFileUtils {
    method ORFileUtils (line 20) | private ORFileUtils() {
    method findCmtFileFromSource (line 23) | public static VirtualFile findCmtFileFromSource(@NotNull Project proje...
    method toRelativeSourceName (line 47) | public static @NotNull String toRelativeSourceName(@NotNull Project pr...
    method findAncestor (line 66) | public static @Nullable VirtualFile findAncestor(@NotNull Project proj...
    method findOneOfAncestor (line 100) | public static @Nullable VirtualFile findOneOfAncestor(@NotNull Project...
    method oneOfAncestor (line 118) | public static @Nullable VirtualFile oneOfAncestor(@Nullable String bas...
    method getVirtualFile (line 147) | public static @Nullable VirtualFile getVirtualFile(@Nullable PsiFile p...
    method getVirtualFile (line 156) | public static @Nullable VirtualFile getVirtualFile(@Nullable PsiElemen...
    method getParentPath (line 160) | public static @NotNull String getParentPath(@Nullable VirtualFile virt...
    method getParentPath (line 165) | public static String getParentPath(@Nullable PsiFile file) {

FILE: src/main/java/com/reason/ide/ORIcons.java
  class ORIcons (line 19) | public class ORIcons {
    method ORIcons (line 93) | private ORIcons() {

FILE: src/main/java/com/reason/ide/ORPostStartupActivity.java
  class ORPostStartupActivity (line 18) | public class ORPostStartupActivity implements ProjectActivity, DumbAware {
    method execute (line 21) | @Override

FILE: src/main/java/com/reason/ide/ORVirtualFileListener.java
  class ORVirtualFileListener (line 26) | class ORVirtualFileListener implements AsyncFileListener {
    method prepareChange (line 29) | @Override
    class ORChangeApplier (line 34) | private static class ORChangeApplier implements ChangeApplier {
      method ORChangeApplier (line 37) | private ORChangeApplier(@NotNull List<? extends VFileEvent> events) {
      method apply (line 41) | public static @NotNull ChangeApplier apply(@NotNull List<? extends V...
      method afterVfsChange (line 45) | @Override
      method handleEvent (line 50) | private static <E extends VFileEvent> void handleEvent(@NotNull E ev...
      method showHideToolWindowsForConfigurationFiles (line 61) | private static <E extends VFileEvent> void showHideToolWindowsForCon...
      method handleFileContentChangeEvent (line 80) | private static void handleFileContentChangeEvent(@NotNull VFileConte...
      method handleCompilerConfigContentChange (line 93) | private static void handleCompilerConfigContentChange(@NotNull Virtu...

FILE: src/main/java/com/reason/ide/actions/ConvertAction.java
  class ConvertAction (line 24) | public class ConvertAction extends AnAction {
    method actionPerformed (line 25) | @Override
    method apply (line 35) | protected void apply(@NotNull Project project, @NotNull PsiFile file, ...

FILE: src/main/java/com/reason/ide/actions/TransformAction.java
  class TransformAction (line 10) | public class TransformAction extends ConvertAction {
    method actionPerformed (line 11) | @Override

FILE: src/main/java/com/reason/ide/annotations/BsErrorAnnotator.java
  class BsErrorAnnotator (line 22) | public class BsErrorAnnotator {
    method BsErrorAnnotator (line 25) | private BsErrorAnnotator() {
    method collectInformation (line 28) | public static @Nullable ORErrorAnnotator.InitialInfo<BsResolvedCompile...
    method doAnnotate (line 114) | public static @Nullable AnnotationResult doAnnotate(@NotNull InitialIn...
    method compile (line 201) | public static @NotNull List<OutputInfo> compile(@NotNull BsResolvedCom...

FILE: src/main/java/com/reason/ide/annotations/ErrorFileHighlighter.java
  class ErrorFileHighlighter (line 9) | public class ErrorFileHighlighter implements Condition<VirtualFile> {
    method value (line 10) | @Override

FILE: src/main/java/com/reason/ide/annotations/ErrorsManager.java
  class ErrorsManager (line 12) | @Service(Service.Level.PROJECT)
    method addAllInfo (line 19) | public void addAllInfo(@NotNull Collection<OutputInfo> bsbInfo) {
    method clearErrors (line 54) | public void clearErrors() {

FILE: src/main/java/com/reason/ide/annotations/ORErrorAnnotator.java
  class ORErrorAnnotator (line 30) | public class ORErrorAnnotator extends ExternalAnnotator<InitialInfo<? ex...
    method collectInformation (line 33) | @Override
    method doAnnotate (line 54) | @Override
    method apply (line 71) | @Override
    method updateCodeLens (line 123) | private void updateCodeLens(@NotNull Project project, @Nullable ORLang...
    method makeAnnotation (line 135) | private static @Nullable Annotation makeAnnotation(@NotNull OutputInfo...
    method getOrCreateTempDirectory (line 165) | static @NotNull File getOrCreateTempDirectory(@NotNull Project project) {
    method cleanTempDirectory (line 187) | static void cleanTempDirectory(@NotNull File directory, @NotNull Strin...
    method copyToTempFile (line 194) | static @Nullable File copyToTempFile(@NotNull File tempCompilationDire...
    class CompilerProcessListener (line 220) | static class CompilerProcessListener {
      method CompilerProcessListener (line 224) | CompilerProcessListener(CompilerOutputAnalyzer lineProcessor) {
      method onTextAvailable (line 228) | public void onTextAvailable(@NotNull String line, @NotNull Key<?> ou...
      method getOutputInfo (line 234) | public @NotNull List<OutputInfo> getOutputInfo() {
    class InitialInfo (line 239) | static public class InitialInfo<R extends ORResolvedCompiler<? extends...
      method InitialInfo (line 251) | InitialInfo(R compiler, @NotNull PsiFile sourcePsiFile, @NotNull Vir...
    method AnnotationResult (line 266) | public AnnotationResult(@NotNull List<OutputInfo> outputInfo, @NotNull...
    method Annotation (line 274) | Annotation(boolean isError, @NotNull String message, @NotNull TextRang...

FILE: src/main/java/com/reason/ide/annotations/OutputInfo.java
  class OutputInfo (line 5) | public class OutputInfo {
    method toString (line 15) | @Override

FILE: src/main/java/com/reason/ide/annotations/ResErrorAnnotator.java
  class ResErrorAnnotator (line 22) | public class ResErrorAnnotator {
    method ResErrorAnnotator (line 25) | private ResErrorAnnotator() {
    method collectInformation (line 28) | public static @Nullable ORErrorAnnotator.InitialInfo<ResResolvedCompil...
    method doAnnotate (line 45) | public static @Nullable ORErrorAnnotator.AnnotationResult doAnnotate(@...
    method compile (line 116) | static @NotNull List<OutputInfo> compile(@NotNull ResResolvedCompiler ...

FILE: src/main/java/com/reason/ide/comment/DuneCommenter.java
  class DuneCommenter (line 6) | public class DuneCommenter implements Commenter {
    method getLineCommentPrefix (line 7) | @Nullable
    method getBlockCommentPrefix (line 13) | @Nullable
    method getBlockCommentSuffix (line 19) | @Nullable
    method getCommentedBlockCommentPrefix (line 25) | @Nullable
    method getCommentedBlockCommentSuffix (line 31) | @Nullable

FILE: src/main/java/com/reason/ide/comment/MlyCommenter.java
  class MlyCommenter (line 6) | public class MlyCommenter implements Commenter {
    method getLineCommentPrefix (line 7) | @Nullable
    method getBlockCommentPrefix (line 13) | @Nullable
    method getBlockCommentSuffix (line 19) | @Nullable
    method getCommentedBlockCommentPrefix (line 25) | @Nullable
    method getCommentedBlockCommentSuffix (line 31) | @Nullable

FILE: src/main/java/com/reason/ide/comment/OclCommenter.java
  class OclCommenter (line 14) | public class OclCommenter implements SelfManagingCommenter<OclCommenter....
    method getLineCommentPrefix (line 15) | @Override
    method getLineCommentSuffix (line 20) | @Override
    method getBlockCommentPrefix (line 25) | @Override
    method getBlockCommentSuffix (line 30) | @Override
    method getCommentedBlockCommentPrefix (line 35) | @Override
    method getCommentedBlockCommentSuffix (line 40) | @Override
    method createLineCommentingState (line 45) | @Override
    method createBlockCommentingState (line 50) | @Override
    method commentLine (line 57) | @Override
    method uncommentLine (line 68) | @Override
    method isLineCommented (line 78) | @Override
    method getCommentPrefix (line 84) | @Override
    method getBlockCommentRange (line 89) | @Override
    method getBlockCommentPrefix (line 94) | @Override
    method getBlockCommentSuffix (line 99) | @Override
    method uncommentBlockComment (line 104) | @Override
    method insertBlockComment (line 120) | @Override
    method findMaximumCommentedRange (line 133) | @Override
    method getCommentRangesToDelete (line 177) | @Override
    method expandRange (line 193) | private @NotNull TextRange expandRange(@NotNull CharSequence chars, in...
    method getNearest (line 214) | private static int getNearest(@NotNull String text) {
    class CommenterData (line 219) | public static class CommenterData extends CommenterDataHolder {
      method CommenterData (line 223) | public CommenterData(int startLine, int endLine) {
      method getStartLine (line 228) | public int getStartLine() {
      method getEndLine (line 232) | public int getEndLine() {

FILE: src/main/java/com/reason/ide/comment/RmlCommenter.java
  class RmlCommenter (line 6) | public class RmlCommenter implements Commenter {
    method getLineCommentPrefix (line 7) | @Nullable
    method getBlockCommentPrefix (line 13) | @Nullable
    method getBlockCommentSuffix (line 19) | @Nullable
    method getCommentedBlockCommentPrefix (line 25) | @Nullable
    method getCommentedBlockCommentSuffix (line 31) | @Nullable

FILE: src/main/java/com/reason/ide/console/ClearLogAction.java
  class ClearLogAction (line 10) | public class ClearLogAction extends DumbAwareAction {
    method ClearLogAction (line 13) | public ClearLogAction(ConsoleView consoleView) {
    method update (line 18) | @Override
    method actionPerformed (line 24) | @Override
    method getActionUpdateThread (line 29) | @Override

FILE: src/main/java/com/reason/ide/console/CompilerAction.java
  class CompilerAction (line 14) | public abstract class CompilerAction extends DumbAwareAction {
    method CompilerAction (line 15) | protected CompilerAction(@NotNull String text, @NotNull String descrip...
    method doAction (line 19) | protected void doAction(@NotNull Project project, @NotNull CliType cli...
    method compileDirectory (line 28) | private static void compileDirectory(@NotNull Project project, @NotNul...
    method compileFile (line 35) | private static void compileFile(@NotNull Project project, @NotNull Edi...
    method getActiveFile (line 45) | private static @Nullable PsiFile getActiveFile(@NotNull Project projec...
    method getActiveEditor (line 50) | private static @Nullable Editor getActiveEditor(@NotNull Project proje...

FILE: src/main/java/com/reason/ide/console/ORConsoleFilter.java
  class ORConsoleFilter (line 8) | public abstract class ORConsoleFilter implements Filter {
    method ORConsoleFilter (line 13) | protected ORConsoleFilter(@NotNull Project project) {
    method getHyperlinkInfo (line 17) | protected abstract @Nullable OpenFileHyperlinkInfo getHyperlinkInfo(St...

FILE: src/main/java/com/reason/ide/console/ORConsoleFilterProvider.java
  class ORConsoleFilterProvider (line 16) | public class ORConsoleFilterProvider extends ConsoleDependentFilterProvi...
    method getDefaultFilters (line 17) | @Override

FILE: src/main/java/com/reason/ide/console/ORToolWindowFactory.java
  class ORToolWindowFactory (line 7) | public abstract class ORToolWindowFactory implements ToolWindowFactory, ...
    method getId (line 9) | public abstract @NotNull String getId();
    method getStripeTitle (line 11) | public abstract @NotNull String getStripeTitle();
    method shouldBeAvailable (line 16) | @Override
    method createToolWindowContent (line 21) | @Override
    method init (line 24) | @Override

FILE: src/main/java/com/reason/ide/console/ORToolWindowManager.java
  class ORToolWindowManager (line 22) | @Service(Service.Level.PROJECT)
    method ORToolWindowManager (line 26) | private ORToolWindowManager(@NotNull Project project) {
    method getConsoleView (line 30) | public @Nullable ConsoleView getConsoleView(@NotNull String id) {
    method shouldShowToolWindows (line 39) | public void shouldShowToolWindows() {
    method setToolWindowAvailable (line 61) | private void setToolWindowAvailable(@NotNull String id, @Nullable ORCo...
    method getAvailableCompiler (line 77) | private @Nullable ORCompiler getAvailableCompiler(@NotNull CompilerTyp...

FILE: src/main/java/com/reason/ide/console/bs/BsConsoleView.java
  class BsConsoleView (line 7) | public class BsConsoleView extends ConsoleViewImpl {
    method BsConsoleView (line 8) | public BsConsoleView(@NotNull Project project) {

FILE: src/main/java/com/reason/ide/console/bs/BsMakeAction.java
  class BsMakeAction (line 11) | public class BsMakeAction extends CompilerAction {
    method BsMakeAction (line 12) | public BsMakeAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/bs/BsMakeWorldAction.java
  class BsMakeWorldAction (line 11) | public class BsMakeWorldAction extends CompilerAction {
    method BsMakeWorldAction (line 12) | public BsMakeWorldAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/bs/BsToolWindowFactory.java
  class BsToolWindowFactory (line 13) | public class BsToolWindowFactory extends ORToolWindowFactory {
    method getId (line 16) | @Override
    method getStripeTitle (line 21) | @Override
    method createToolWindowContent (line 26) | @Override
    method createToolbar (line 43) | private @NotNull ActionToolbar createToolbar(@NotNull BsConsoleView co...

FILE: src/main/java/com/reason/ide/console/dune/DuneBuildAction.java
  class DuneBuildAction (line 11) | public class DuneBuildAction extends CompilerAction {
    method DuneBuildAction (line 12) | public DuneBuildAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/dune/DuneCleanAction.java
  class DuneCleanAction (line 11) | public class DuneCleanAction extends CompilerAction {
    method DuneCleanAction (line 12) | public DuneCleanAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/dune/DuneConsoleView.java
  class DuneConsoleView (line 8) | public class DuneConsoleView extends ConsoleViewImpl {
    method DuneConsoleView (line 9) | public DuneConsoleView(@NotNull Project project) {
    method getFilters (line 13) | public @NotNull Filter[] getFilters() {

FILE: src/main/java/com/reason/ide/console/dune/DuneToolWindowFactory.java
  class DuneToolWindowFactory (line 13) | public class DuneToolWindowFactory extends ORToolWindowFactory {
    method getId (line 16) | @Override
    method getStripeTitle (line 21) | @Override
    method createToolWindowContent (line 26) | @Override
    method createToolbar (line 43) | @NotNull

FILE: src/main/java/com/reason/ide/console/dune/OCamlConsoleFilter.java
  class OCamlConsoleFilter (line 20) | public class OCamlConsoleFilter extends ORConsoleFilter {
    method OCamlConsoleFilter (line 23) | public OCamlConsoleFilter(@NotNull Project project) {
    method applyFilter (line 27) | @Override
    method getHyperlinkInfo (line 50) | @Override

FILE: src/main/java/com/reason/ide/console/esy/EsyBuildAction.java
  class EsyBuildAction (line 11) | public class EsyBuildAction extends CompilerAction {
    method EsyBuildAction (line 12) | public EsyBuildAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/esy/EsyConsoleView.java
  class EsyConsoleView (line 14) | public class EsyConsoleView extends ConsoleViewImpl {
    method EsyConsoleView (line 17) | public EsyConsoleView(@NotNull Project project) {
    method getFilters (line 21) | public @NotNull Filter[] getFilters() {
    class DuneConsoleFilter (line 32) | class DuneConsoleFilter implements Filter {
      method applyFilter (line 33) | @Override

FILE: src/main/java/com/reason/ide/console/esy/EsyToolWindowFactory.java
  class EsyToolWindowFactory (line 13) | public class EsyToolWindowFactory extends ORToolWindowFactory {
    method getId (line 16) | @Override
    method getStripeTitle (line 21) | @Override
    method createToolWindowContent (line 26) | @Override
    method createToolbar (line 43) | @NotNull

FILE: src/main/java/com/reason/ide/console/rescript/RescriptBuildAction.java
  class RescriptBuildAction (line 11) | public class RescriptBuildAction extends CompilerAction {
    method RescriptBuildAction (line 12) | public RescriptBuildAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/rescript/RescriptConsoleFilter.java
  class RescriptConsoleFilter (line 21) | public class RescriptConsoleFilter extends ORConsoleFilter {
    method RescriptConsoleFilter (line 23) | public RescriptConsoleFilter(@NotNull Project project) {
    method applyFilter (line 27) | @Override
    method getHyperlinkInfo (line 49) | @Override

FILE: src/main/java/com/reason/ide/console/rescript/RescriptConsoleView.java
  class RescriptConsoleView (line 8) | public class RescriptConsoleView extends ConsoleViewImpl {
    method RescriptConsoleView (line 9) | public RescriptConsoleView(@NotNull Project project) {
    method getFilters (line 13) | public @NotNull Filter[] getFilters() {

FILE: src/main/java/com/reason/ide/console/rescript/RescriptResetAction.java
  class RescriptResetAction (line 11) | public class RescriptResetAction extends CompilerAction {
    method RescriptResetAction (line 12) | public RescriptResetAction() {
    method update (line 16) | @Override
    method actionPerformed (line 25) | @Override
    method getActionUpdateThread (line 34) | @Override

FILE: src/main/java/com/reason/ide/console/rescript/RescriptToolWindowFactory.java
  class RescriptToolWindowFactory (line 13) | public class RescriptToolWindowFactory extends ORToolWindowFactory {
    method getId (line 17) | @Override
    method getStripeTitle (line 22) | @Override
    method createToolWindowContent (line 27) | @Override
    method createToolbar (line 44) | private @NotNull ActionToolbar createToolbar(@NotNull RescriptConsoleV...

FILE: src/main/java/com/reason/ide/debug/OCamlApplicationConfiguration.java
  class OCamlApplicationConfiguration (line 14) | public class OCamlApplicationConfiguration extends ModuleBasedConfigurat...
    method OCamlApplicationConfiguration (line 15) | public OCamlApplicationConfiguration(String name, @NotNull OCamlModule...
    method getValidModules (line 19) | @Override
    method getConfigurationEditor (line 24) | @Override
    method getState (line 42) | @Override

FILE: src/main/java/com/reason/ide/debug/OCamlApplicationRunningState.java
  class OCamlApplicationRunningState (line 14) | public class OCamlApplicationRunningState extends CommandLineState {
    method OCamlApplicationRunningState (line 17) | protected OCamlApplicationRunningState(ExecutionEnvironment environmen...
    method startProcess (line 22) | @NotNull
    method getCommand (line 29) | @NotNull

FILE: src/main/java/com/reason/ide/debug/OCamlDebugRunner.java
  class OCamlDebugRunner (line 8) | public class OCamlDebugRunner extends GenericProgramRunner<OclDebuggerRu...
    method getRunnerId (line 11) | @Override
    method canRun (line 16) | @Override

FILE: src/main/java/com/reason/ide/debug/OCamlModuleBasedConfiguration.java
  class OCamlModuleBasedConfiguration (line 7) | public class OCamlModuleBasedConfiguration extends RunConfigurationModule {
    method OCamlModuleBasedConfiguration (line 8) | public OCamlModuleBasedConfiguration(@NotNull Project project) {

FILE: src/main/java/com/reason/ide/debug/ORLineBreakpointProperties.java
  class ORLineBreakpointProperties (line 7) | public class ORLineBreakpointProperties extends XBreakpointProperties<OR...
    method getState (line 8) | @Nullable
    method loadState (line 14) | @Override

FILE: src/main/java/com/reason/ide/debug/ORLineBreakpointType.java
  class ORLineBreakpointType (line 20) | public class ORLineBreakpointType extends XLineBreakpointType<ORLineBrea...
    method ORLineBreakpointType (line 24) | protected ORLineBreakpointType() {
    method createBreakpointProperties (line 28) | @Nullable
    method canPutAt (line 35) | @Override
    class LineBreakpointAvailabilityProcessor (line 52) | private static final class LineBreakpointAvailabilityProcessor impleme...
      method LineBreakpointAvailabilityProcessor (line 56) | LineBreakpointAvailabilityProcessor(ORLangTypes types) {
      method process (line 60) | @Override
      method isLineBreakpointAvailable (line 78) | boolean isLineBreakpointAvailable() {

FILE: src/main/java/com/reason/ide/debug/OclDebuggerRunnerSettings.java
  class OclDebuggerRunnerSettings (line 7) | public class OclDebuggerRunnerSettings implements RunnerSettings {
    method readExternal (line 8) | @Override public void readExternal(Element element) throws InvalidData...
    method writeExternal (line 11) | @Override public void writeExternal(Element element) throws WriteExter...

FILE: src/main/java/com/reason/ide/docs/DocFormatter.java
  class DocFormatter (line 20) | class DocFormatter {
    method DocFormatter (line 23) | private DocFormatter() {
    method format (line 26) | static @NotNull String format(@NotNull PsiFile file, @NotNull PsiEleme...
    method escapeCodeForHtml (line 79) | static @NotNull String escapeCodeForHtml(@Nullable PsiElement code) {
    method escapeCodeForHtml (line 87) | @Nullable

FILE: src/main/java/com/reason/ide/docs/ORDocumentationProvider.java
  class ORDocumentationProvider (line 28) | public class ORDocumentationProvider extends AbstractDocumentationProvid...
    method generateDoc (line 33) | @Override
    method getQuickNavigateInfo (line 117) | @Override
    method getCustomDocumentationElement (line 187) | @Override
    method findComment (line 221) | private @Nullable PsiElement findComment(@Nullable PsiElement resolved...
    method findAboveComment (line 234) | private @Nullable PsiElement findAboveComment(@Nullable PsiElement ele...
    method findBelowComment (line 265) | private @Nullable PsiElement findBelowComment(@Nullable PsiElement ele...
    method getInferredSignature (line 279) | private @Nullable String getInferredSignature(@NotNull PsiElement elem...
    method createQuickDocTemplate (line 290) | private @NotNull String createQuickDocTemplate(@Nullable String[] path...
    method isSpecialComment (line 298) | public static boolean isSpecialComment(@Nullable PsiElement element) {

FILE: src/main/java/com/reason/ide/editors/CmtFileEditor.java
  class CmtFileEditor (line 20) | public class CmtFileEditor extends UserDataHolderBase implements FileEdi...
    method CmtFileEditor (line 25) | public CmtFileEditor(@NotNull Project project, @NotNull VirtualFile fi...
    method getFile (line 30) | @Override
    method getComponent (line 35) | @Override
    method getPreferredFocusedComponent (line 55) | @Override
    method getName (line 60) | @Override
    method isModified (line 65) | @Override
    method isValid (line 70) | @Override
    method dispose (line 75) | @Override
    method setState (line 80) | @Override
    method addPropertyChangeListener (line 84) | @Override
    method removePropertyChangeListener (line 88) | @Override
    class Table (line 92) | static class Table extends JBTable {
      method Table (line 93) | private Table(TableModel model) {
      method create (line 97) | public static @NotNull Table create(TableModel model) {
    class MetaTableModel (line 105) | static class MetaTableModel extends AbstractTableModel {
      method MetaTableModel (line 108) | public MetaTableModel(@NotNull List<String> entries) {
      method getRowCount (line 114) | @Override
      method getColumnCount (line 119) | @Override
      method getColumnName (line 124) | @Override
      method getColumnClass (line 129) | @Override
      method getValueAt (line 134) | @Override
    class InferredTableModel (line 144) | static class InferredTableModel extends AbstractTableModel {
      method InferredTableModel (line 147) | public InferredTableModel(@NotNull List<String> types) {
      method getRowCount (line 153) | @Override
      method getColumnCount (line 158) | @Override
      method getColumnName (line 163) | @Override
      method getColumnClass (line 175) | @Override
      method getValueAt (line 180) | @Override

FILE: src/main/java/com/reason/ide/editors/CmtFileEditorProvider.java
  class CmtFileEditorProvider (line 9) | public class CmtFileEditorProvider implements com.intellij.openapi.fileE...
    method accept (line 10) | @Override
    method createEditor (line 15) | @Override
    method getEditorTypeId (line 20) | @Override
    method getPolicy (line 25) | @Override

FILE: src/main/java/com/reason/ide/editors/CmtXmlComponent.java
  class CmtXmlComponent (line 14) | public class CmtXmlComponent extends BorderLayoutPanel implements Change...
    method CmtXmlComponent (line 19) | public CmtXmlComponent(@NotNull Project project, @NotNull TabbedPaneWr...
    method stateChanged (line 25) | @Override
    method addChildren (line 33) | private void addChildren() {

FILE: src/main/java/com/reason/ide/files/CmtFileType.java
  class CmtFileType (line 9) | public class CmtFileType implements FileType {
    method getName (line 12) | @NotNull
    method getDescription (line 18) | @NotNull
    method getDefaultExtension (line 24) | @NotNull
    method getIcon (line 30) | @Nullable
    method isBinary (line 36) | @Override
    method isReadOnly (line 41) | @Override
    method getCharset (line 46) | @Override

FILE: src/main/java/com/reason/ide/files/DuneFile.java
  class DuneFile (line 11) | public class DuneFile extends PsiFileBase {
    method DuneFile (line 12) | public DuneFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 16) | @Override
    method getStanza (line 21) | public @Nullable RPsiDuneStanza getStanza(@NotNull String name) {

FILE: src/main/java/com/reason/ide/files/DuneFileType.java
  class DuneFileType (line 15) | public class DuneFileType extends LanguageFileType {
    method getDefaultFilenames (line 19) | public static Set<String> getDefaultFilenames() {
    method isDuneFile (line 23) | public static boolean isDuneFile(@NotNull VirtualFile file) {
    method DuneFileType (line 27) | private DuneFileType() {
    method getName (line 31) | @NotNull
    method getDescription (line 37) | @NotNull
    method getDefaultExtension (line 43) | @NotNull
    method getIcon (line 49) | @Nullable

FILE: src/main/java/com/reason/ide/files/FileBase.java
  class FileBase (line 16) | public abstract class FileBase extends PsiFileBase implements RPsiModule...
    method FileBase (line 19) | FileBase(@NotNull FileViewProvider viewProvider, @NotNull Language lan...
    method getModuleName (line 24) | public @NotNull String getModuleName() {
    method getPath (line 29) | @Override
    method getQualifiedName (line 34) | @Override
    method getBody (line 41) | @Override
    method isComponent (line 46) | public boolean isComponent() {
    method getMakeFunction (line 54) | @Override
    method getQualifiedExpressions (line 64) | @SafeVarargs
    method isInterface (line 80) | public boolean isInterface() {
    method equals (line 84) | @Override
    method hashCode (line 96) | @Override

FILE: src/main/java/com/reason/ide/files/Ml4File.java
  class Ml4File (line 9) | public class Ml4File extends PsiFileBase {
    method Ml4File (line 10) | public Ml4File(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 14) | @NotNull
    method toString (line 20) | @NotNull

FILE: src/main/java/com/reason/ide/files/Ml4FileType.java
  class Ml4FileType (line 10) | public class Ml4FileType extends LanguageFileType {
    method Ml4FileType (line 13) | private Ml4FileType() {
    method getName (line 17) | @NotNull
    method getDescription (line 23) | @NotNull
    method getDefaultExtension (line 29) | @NotNull
    method getIcon (line 35) | @Nullable

FILE: src/main/java/com/reason/ide/files/MlgFile.java
  class MlgFile (line 9) | public class MlgFile extends PsiFileBase {
    method MlgFile (line 10) | public MlgFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 14) | @Override
    method toString (line 19) | @Override

FILE: src/main/java/com/reason/ide/files/MlgFileType.java
  class MlgFileType (line 13) | public class MlgFileType extends LanguageFileType {
    method MlgFileType (line 16) | private MlgFileType() {
    method getName (line 21) | @Override
    method getDescription (line 26) | @Override
    method getDefaultExtension (line 31) | @Override
    method getIcon (line 36) | @Override

FILE: src/main/java/com/reason/ide/files/MlgFileViewProvider.java
  class MlgFileViewProvider (line 15) | public class MlgFileViewProvider extends MultiplePsiFilesPerDocumentFile...
    method MlgFileViewProvider (line 19) | public MlgFileViewProvider(@NotNull PsiManager manager, @NotNull Virtu...
    method getBaseLanguage (line 23) | @Override
    method getTemplateDataLanguage (line 28) | @Override
    method getLanguages (line 33) | @Override
    method cloneInner (line 38) | @Override
    method createFile (line 43) | @Nullable

FILE: src/main/java/com/reason/ide/files/MlgFileViewProviderFactory.java
  class MlgFileViewProviderFactory (line 8) | public class MlgFileViewProviderFactory implements FileViewProviderFacto...
    method createFileViewProvider (line 9) | @Override

FILE: src/main/java/com/reason/ide/files/MllFile.java
  class MllFile (line 9) | public class MllFile extends PsiFileBase {
    method MllFile (line 10) | public MllFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 14) | @Override
    method toString (line 19) | @Override

FILE: src/main/java/com/reason/ide/files/MllFileType.java
  class MllFileType (line 11) | public class MllFileType extends LanguageFileType {
    method MllFileType (line 14) | private MllFileType() {
    method getName (line 19) | @Override
    method getDescription (line 24) | @Override
    method getDefaultExtension (line 29) | @Override
    method getIcon (line 34) | @Override

FILE: src/main/java/com/reason/ide/files/MllFileViewProvider.java
  class MllFileViewProvider (line 15) | public class MllFileViewProvider extends MultiplePsiFilesPerDocumentFile...
    method MllFileViewProvider (line 19) | public MllFileViewProvider(@NotNull PsiManager manager, @NotNull Virtu...
    method getBaseLanguage (line 23) | @Override
    method getTemplateDataLanguage (line 28) | @Override
    method getLanguages (line 33) | @Override
    method cloneInner (line 38) | @Override
    method createFile (line 43) | @Override

FILE: src/main/java/com/reason/ide/files/MllFileViewProviderFactory.java
  class MllFileViewProviderFactory (line 8) | public class MllFileViewProviderFactory implements FileViewProviderFacto...
    method createFileViewProvider (line 9) | @Override

FILE: src/main/java/com/reason/ide/files/MlyFile.java
  class MlyFile (line 9) | public class MlyFile extends PsiFileBase {
    method MlyFile (line 10) | public MlyFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 14) | @Override
    method toString (line 19) | @Override

FILE: src/main/java/com/reason/ide/files/MlyFileType.java
  class MlyFileType (line 11) | public class MlyFileType extends LanguageFileType {
    method MlyFileType (line 14) | private MlyFileType() {
    method getName (line 19) | @Override
    method getDescription (line 24) | @Override
    method getDefaultExtension (line 29) | @Override
    method getIcon (line 34) | @Override

FILE: src/main/java/com/reason/ide/files/MlyFileViewProvider.java
  class MlyFileViewProvider (line 15) | public class MlyFileViewProvider extends MultiplePsiFilesPerDocumentFile...
    method MlyFileViewProvider (line 19) | public MlyFileViewProvider(@NotNull PsiManager manager, @NotNull Virtu...
    method getBaseLanguage (line 23) | @Override
    method getTemplateDataLanguage (line 28) | @Override
    method getLanguages (line 33) | @Override
    method cloneInner (line 38) | @Override
    method createFile (line 43) | @Override

FILE: src/main/java/com/reason/ide/files/MlyFileViewProviderFactory.java
  class MlyFileViewProviderFactory (line 8) | public class MlyFileViewProviderFactory implements FileViewProviderFacto...
    method createFileViewProvider (line 9) | @Override

FILE: src/main/java/com/reason/ide/files/ORConfigJsonFileType.java
  class ORConfigJsonFileType (line 9) | public class ORConfigJsonFileType extends JsonFileType {
    method getName (line 12) | @Override
    method getDescription (line 17) | @Override
    method getIcon (line 22) | @Override

FILE: src/main/java/com/reason/ide/files/ORTargetElementEvaluator.java
  class ORTargetElementEvaluator (line 12) | public class ORTargetElementEvaluator extends TargetElementEvaluatorEx2 {
    method includeSelfInGotoImplementation (line 13) | @Override
    method getGotoDeclarationTarget (line 18) | @Override

FILE: src/main/java/com/reason/ide/files/OclFile.java
  class OclFile (line 8) | public class OclFile extends FileBase {
    method OclFile (line 9) | public OclFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @Override
    method toString (line 18) | @Override

FILE: src/main/java/com/reason/ide/files/OclFileType.java
  class OclFileType (line 12) | public class OclFileType extends LanguageFileType {
    method OclFileType (line 15) | private OclFileType() {
    method getName (line 19) | @Override
    method getDescription (line 24) | @Override
    method getDefaultExtension (line 29) | @Override
    method getIcon (line 34) | @Override
    method toString (line 39) | @Override

FILE: src/main/java/com/reason/ide/files/OclInterfaceFile.java
  class OclInterfaceFile (line 8) | public class OclInterfaceFile extends FileBase {
    method OclInterfaceFile (line 9) | public OclInterfaceFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @NotNull
    method toString (line 19) | @NotNull

FILE: src/main/java/com/reason/ide/files/OclInterfaceFileType.java
  class OclInterfaceFileType (line 10) | public class OclInterfaceFileType extends LanguageFileType {
    method OclInterfaceFileType (line 13) | private OclInterfaceFileType() {
    method getName (line 17) | @Override
    method getDisplayName (line 22) | @Override public @NotNull @Nls String getDisplayName() {
    method getDescription (line 26) | @Override
    method getDefaultExtension (line 31) | @Override
    method getIcon (line 36) | @Override
    method toString (line 41) | @Override

FILE: src/main/java/com/reason/ide/files/ResFile.java
  class ResFile (line 8) | public class ResFile extends FileBase {
    method ResFile (line 9) | public ResFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @Override
    method toString (line 18) | @Override

FILE: src/main/java/com/reason/ide/files/ResFileType.java
  class ResFileType (line 14) | public class ResFileType extends LanguageFileType implements FileTypeIde...
    method ResFileType (line 18) | private ResFileType() {
    method isMyFileType (line 22) | @Override
    method getName (line 36) | @Override
    method getDescription (line 41) | @Override
    method getDefaultExtension (line 46) | @Override
    method getIcon (line 51) | @Override
    method toString (line 56) | @Override

FILE: src/main/java/com/reason/ide/files/ResInterfaceFile.java
  class ResInterfaceFile (line 8) | public class ResInterfaceFile extends FileBase {
    method ResInterfaceFile (line 9) | public ResInterfaceFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @Override
    method toString (line 18) | @Override

FILE: src/main/java/com/reason/ide/files/ResInterfaceFileType.java
  class ResInterfaceFileType (line 11) | public class ResInterfaceFileType extends LanguageFileType {
    method ResInterfaceFileType (line 14) | private ResInterfaceFileType() {
    method getName (line 18) | @Override
    method getDisplayName (line 23) | @Override
    method getDescription (line 28) | @Override
    method getDefaultExtension (line 33) | @Override
    method getIcon (line 38) | @Override
    method toString (line 43) | @Override

FILE: src/main/java/com/reason/ide/files/RmlFile.java
  class RmlFile (line 8) | public class RmlFile extends FileBase {
    method RmlFile (line 9) | public RmlFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @NotNull
    method toString (line 19) | @NotNull

FILE: src/main/java/com/reason/ide/files/RmlFileType.java
  class RmlFileType (line 10) | public class RmlFileType extends LanguageFileType {
    method RmlFileType (line 13) | private RmlFileType() {
    method getName (line 17) | @NotNull
    method getDescription (line 23) | @NotNull
    method getDefaultExtension (line 29) | @NotNull
    method getIcon (line 35) | @Nullable
    method toString (line 41) | @NotNull

FILE: src/main/java/com/reason/ide/files/RmlInterfaceFile.java
  class RmlInterfaceFile (line 8) | public class RmlInterfaceFile extends FileBase {
    method RmlInterfaceFile (line 9) | public RmlInterfaceFile(@NotNull FileViewProvider viewProvider) {
    method getFileType (line 13) | @NotNull
    method toString (line 19) | @NotNull

FILE: src/main/java/com/reason/ide/files/RmlInterfaceFileType.java
  class RmlInterfaceFileType (line 10) | public class RmlInterfaceFileType extends LanguageFileType {
    method RmlInterfaceFileType (line 13) | private RmlInterfaceFileType() {
    method getName (line 17) | @Override
    method getDisplayName (line 22) | @Override
    method getDescription (line 27) | @Override
    method getDefaultExtension (line 32) | @Override
    method getIcon (line 37) | @Override
    method toString (line 42) | @Override

FILE: src/main/java/com/reason/ide/folding/DuneFoldingBuilder.java
  class DuneFoldingBuilder (line 16) | public class DuneFoldingBuilder extends FoldingBuilderEx {
    method buildFoldRegions (line 17) | @Override
    method isMultiline (line 40) | private static boolean isMultiline(@NotNull TextRange range, @NotNull ...
    method foldStanza (line 45) | private @Nullable FoldingDescriptor foldStanza(@NotNull RPsiDuneStanza...
    method fold (line 50) | private @Nullable FoldingDescriptor fold(@Nullable PsiElement root) {
    method getPlaceholderText (line 70) | @Override
    method isCollapsedByDefault (line 75) | @Override

FILE: src/main/java/com/reason/ide/folding/ORFoldingBuilder.java
  class ORFoldingBuilder (line 24) | public class ORFoldingBuilder extends FoldingBuilderEx {
    method buildFoldRegions (line 25) | @Override
    method foldLet (line 86) | private void foldLet(@NotNull List<FoldingDescriptor> descriptors, @No...
    method foldType (line 93) | private void foldType(@NotNull List<FoldingDescriptor> descriptors, @N...
    method foldModule (line 103) | private void foldModule(@NotNull List<FoldingDescriptor> descriptors, ...
    method foldFunction (line 115) | private void foldFunction(@NotNull List<FoldingDescriptor> descriptors...
    method foldFunctor (line 122) | private void foldFunctor(@NotNull List<FoldingDescriptor> descriptors,...
    method foldFunctorResult (line 129) | private void foldFunctorResult(@NotNull List<FoldingDescriptor> descri...
    method foldTag (line 136) | private void foldTag(@NotNull List<FoldingDescriptor> descriptors, @No...
    method foldSwitch (line 147) | private void foldSwitch(@NotNull List<FoldingDescriptor> descriptors, ...
    method foldTry (line 159) | private void foldTry(@NotNull List<FoldingDescriptor> descriptors, @No...
    method foldPatternMatch (line 166) | private void foldPatternMatch(@NotNull List<FoldingDescriptor> descrip...
    method getPlaceholderText (line 173) | @Override
    method isCollapsedByDefault (line 197) | @Override
    method fold (line 202) | @Nullable

FILE: src/main/java/com/reason/ide/format/FormatterProcessor.java
  type FormatterProcessor (line 5) | public interface FormatterProcessor {
    method apply (line 6) | @Nullable String apply(@NotNull String textToFormat);

FILE: src/main/java/com/reason/ide/format/ORPostFormatProcessor.java
  class ORPostFormatProcessor (line 34) | public class ORPostFormatProcessor implements PostFormatProcessor {
    method processElement (line 37) | @Override
    method processText (line 50) | @Override
    method getFormatterProcessor (line 85) | public static @Nullable FormatterProcessor getFormatterProcessor(@NotN...
    class RmlFormatProcessor (line 99) | static class RmlFormatProcessor implements FormatterProcessor {
      method RmlFormatProcessor (line 104) | RmlFormatProcessor(@NotNull PsiFile file) {
      method apply (line 110) | @Override
    class ResFormatProcessor (line 121) | static class ResFormatProcessor implements FormatterProcessor {
      method ResFormatProcessor (line 126) | ResFormatProcessor(@NotNull PsiFile file) {
      method apply (line 132) | @Override
    class OclFormatProcessor (line 143) | private static class OclFormatProcessor implements FormatterProcessor {
      method OclFormatProcessor (line 147) | public OclFormatProcessor(@NotNull PsiFile file) {
      method apply (line 152) | @Override

FILE: src/main/java/com/reason/ide/format/ReformatOnSave.java
  class ReformatOnSave (line 26) | public class ReformatOnSave {
    method ReformatOnSave (line 30) | private ReformatOnSave() {
    method apply (line 33) | public static void apply(@NotNull Project project, @NotNull Document d...

FILE: src/main/java/com/reason/ide/go/FileModuleDataModuleRendererFactory.java
  class FileModuleDataModuleRendererFactory (line 7) | public class FileModuleDataModuleRendererFactory extends ModuleRendererF...
    method handles (line 8) | @Override protected boolean handles(Object element) {
    method getModuleTextWithIcon (line 12) | @Override public @Nullable TextWithIcon getModuleTextWithIcon(Object e...

FILE: src/main/java/com/reason/ide/go/ORLineMarkerProvider.java
  class ORLineMarkerProvider (line 30) | public class ORLineMarkerProvider extends RelatedItemLineMarkerProvider {
    method collectNavigationMarkers (line 33) | @Override
    method collectLetNavigationMarkers (line 68) | private void collectLetNavigationMarkers(@NotNull RPsiLet element, @No...
    method collectValNavigationMarkers (line 186) | private void collectValNavigationMarkers(@NotNull RPsiVal element, @No...
    method collectTypeNavigationMarkers (line 269) | private void collectTypeNavigationMarkers(@NotNull RPsiType element, @...
    method collectExternalNavigationMarkers (line 296) | private void collectExternalNavigationMarkers(@NotNull RPsiExternal el...
    method collectClassNavigationMarkers (line 323) | private void collectClassNavigationMarkers(@NotNull RPsiClass element,...
    method collectClassMethodNavigationMarkers (line 349) | private void collectClassMethodNavigationMarkers(@NotNull RPsiClassMet...
    method collectExceptionNavigationMarkers (line 376) | private void collectExceptionNavigationMarkers(@NotNull RPsiException ...
    method collectInnerModuleNavigationMarkers (line 403) | private void collectInnerModuleNavigationMarkers(@NotNull RPsiInnerMod...
    method findModulesUsingSignatureName (line 450) | private static @NotNull List<RPsiInnerModule> findModulesUsingSignatur...
    method resolveTargetFromIndex (line 475) | private static @NotNull <T extends RPsiQualifiedPathElement> List<T> r...
    method findTargetFromImplementationModule (line 490) | private @NotNull <T extends RPsiQualifiedPathElement> List<T> findTarg...
    method findTargetFromInterfaceModule (line 516) | private @NotNull <T extends RPsiQualifiedPathElement> List<T> findTarg...
    method createMarkerInfo (line 555) | private <T extends PsiElement> void createMarkerInfo(@NotNull Collecti...
    class PresentationRenderer (line 587) | static class PresentationRenderer extends PsiTargetPresentationRendere...
      method PresentationRenderer (line 590) | public PresentationRenderer(PsiNameIdentifierOwner psiSource) {
      method getPresentation (line 594) | @Override

FILE: src/main/java/com/reason/ide/go/ORModuleContributor.java
  class ORModuleContributor (line 24) | public class ORModuleContributor implements GotoClassContributor, Choose...
    method processNames (line 25) | @Override
    method processElementsWithName (line 40) | @Override
    method getQualifiedName (line 60) | @Override
    method getQualifiedNameSeparator (line 70) | @Override
    class FileModuleDataPresentation (line 75) | private static class FileModuleDataPresentation implements ItemPresent...
      method FileModuleDataPresentation (line 78) | public FileModuleDataPresentation(@NotNull FileModuleData moduleDatu...
      method getPresentableText (line 82) | @Override
      method getLocationString (line 87) | @Override
      method getIcon (line 92) | @Override
    class FileModuleDataNavigationItem (line 98) | public static class FileModuleDataNavigationItem implements Navigation...
      method FileModuleDataNavigationItem (line 102) | public FileModuleDataNavigationItem(FileModuleData moduleDatum, Proj...
      method getName (line 107) | @Override
      method getPresentation (line 112) | @Override
      method navigate (line 117) | @Override
      method canNavigate (line 125) | @Override
      method canNavigateToSource (line 130) | @Override
      method getLocation (line 135) | public String getLocation() {
      method getLocationIcon (line 139) | public Icon getLocationIcon() {

FILE: src/main/java/com/reason/ide/handlers/ORTypedHandler.java
  class ORTypedHandler (line 17) | public class ORTypedHandler extends TypedHandlerDelegate {
    method beforeCharTyped (line 18) | @NotNull

FILE: src/main/java/com/reason/ide/handlers/OclQuoteHandler.java
  class OclQuoteHandler (line 7) | public class OclQuoteHandler extends SimpleTokenSetQuoteHandler {
    method OclQuoteHandler (line 9) | public OclQuoteHandler() {

FILE: src/main/java/com/reason/ide/handlers/ResQuoteHandler.java
  class ResQuoteHandler (line 7) | public class ResQuoteHandler extends SimpleTokenSetQuoteHandler {
    method ResQuoteHandler (line 8) | public ResQuoteHandler() {

FILE: src/main/java/com/reason/ide/handlers/RmlQuoteHandler.java
  class RmlQuoteHandler (line 7) | public class RmlQuoteHandler extends SimpleTokenSetQuoteHandler {
    method RmlQuoteHandler (line 9) | public RmlQuoteHandler() {

FILE: src/main/java/com/reason/ide/highlight/DuneSyntaxAnnotator.java
  class DuneSyntaxAnnotator (line 15) | public class DuneSyntaxAnnotator implements Annotator {
    method annotate (line 17) | @Override
    method color (line 37) | private void color(

FILE: src/main/java/com/reason/ide/highlight/DuneSyntaxHighlighter.java
  class DuneSyntaxHighlighter (line 14) | public class DuneSyntaxHighlighter extends SyntaxHighlighterBase {
    method getHighlightingLexer (line 46) | @Override
    method getTokenHighlights (line 51) | @Override

FILE: src/main/java/com/reason/ide/highlight/DuneSyntaxHighlighterFactory.java
  class DuneSyntaxHighlighterFactory (line 8) | public class DuneSyntaxHighlighterFactory extends SyntaxHighlighterFacto...
    method getSyntaxHighlighter (line 9) | @NotNull

FILE: src/main/java/com/reason/ide/highlight/ORSyntaxAnnotator.java
  class ORSyntaxAnnotator (line 18) | public abstract class ORSyntaxAnnotator implements Annotator {
    method ORSyntaxAnnotator (line 21) | ORSyntaxAnnotator(@NotNull ORLangTypes types) {
    method annotate (line 25) | public void annotate(@NotNull PsiElement element, @NotNull AnnotationH...
    method eraseColor (line 78) | private static void eraseColor(@NotNull PsiElement element, @NotNull A...
    method enforceColor (line 82) | @SuppressWarnings("SameParameterValue")
    method enforceColor (line 88) | private void enforceColor(@NotNull AnnotationHolder holder, @Nullable ...

FILE: src/main/java/com/reason/ide/highlight/ORSyntaxHighlighter.java
  class ORSyntaxHighlighter (line 19) | public class ORSyntaxHighlighter extends SyntaxHighlighterBase {
    method ORSyntaxHighlighter (line 71) | public ORSyntaxHighlighter(ORLangTypes types, Set<IElementType> keywor...
    method getHighlightingLexer (line 79) | @Override
    method getTokenHighlights (line 86) | @Override
    method of (line 134) | @NotNull

FILE: src/main/java/com/reason/ide/highlight/OclGrammarEditorHighlighter.java
  class OclGrammarEditorHighlighter (line 14) | public final class OclGrammarEditorHighlighter extends LayeredLexerEdito...
    method OclGrammarEditorHighlighter (line 15) | public OclGrammarEditorHighlighter(@Nullable Project project, @Nullabl...

FILE: src/main/java/com/reason/ide/highlight/OclGrammarSyntaxHighlighterFactory.java
  class OclGrammarSyntaxHighlighterFactory (line 17) | public class OclGrammarSyntaxHighlighterFactory extends SyntaxHighlighte...
    method getSyntaxHighlighter (line 28) | @Override

FILE: src/main/java/com/reason/ide/highlight/OclLexEditorHighlighter.java
  class OclLexEditorHighlighter (line 14) | public final class OclLexEditorHighlighter extends LayeredLexerEditorHig...
    method OclLexEditorHighlighter (line 15) | public OclLexEditorHighlighter(@Nullable Project project, @Nullable Vi...

FILE: src/main/java/com/reason/ide/highlight/OclLexSyntaxHighlighterFactory.java
  class OclLexSyntaxHighlighterFactory (line 17) | public class OclLexSyntaxHighlighterFactory extends SyntaxHighlighterFac...
    method getSyntaxHighlighter (line 25) | @Override

FILE: src/main/java/com/reason/ide/highlight/OclSyntaxAnnotator.java
  class OclSyntaxAnnotator (line 5) | public class OclSyntaxAnnotator extends ORSyntaxAnnotator {
    method OclSyntaxAnnotator (line 6) | public OclSyntaxAnnotator() {

FILE: src/main/java/com/reason/ide/highlight/OclSyntaxHighlighterFactory.java
  class OclSyntaxHighlighterFactory (line 14) | public class OclSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
    method getSyntaxHighlighter (line 57) | @Override

FILE: src/main/java/com/reason/ide/highlight/OclYaccEditorHighlighter.java
  class OclYaccEditorHighlighter (line 14) | public final class OclYaccEditorHighlighter extends LayeredLexerEditorHi...
    method OclYaccEditorHighlighter (line 15) | public OclYaccEditorHighlighter(@Nullable Project project, @Nullable V...

FILE: src/main/java/com/reason/ide/highlight/OclYaccSyntaxHighlighterFactory.java
  class OclYaccSyntaxHighlighterFactory (line 17) | public class OclYaccSyntaxHighlighterFactory extends SyntaxHighlighterFa...
    method getSyntaxHighlighter (line 29) | @Override

FILE: src/main/java/com/reason/ide/highlight/ResSyntaxAnnotator.java
  class ResSyntaxAnnotator (line 5) | public class ResSyntaxAnnotator extends ORSyntaxAnnotator {
    method ResSyntaxAnnotator (line 6) | public ResSyntaxAnnotator() {

FILE: src/main/java/com/reason/ide/highlight/ResSyntaxHighlighterFactory.java
  class ResSyntaxHighlighterFactory (line 14) | public class ResSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
    method getSyntaxHighlighter (line 56) | @Override

FILE: src/main/java/com/reason/ide/highlight/RmlSyntaxAnnotator.java
  class RmlSyntaxAnnotator (line 5) | public class RmlSyntaxAnnotator extends ORSyntaxAnnotator {
    method RmlSyntaxAnnotator (line 7) | public RmlSyntaxAnnotator() {

FILE: src/main/java/com/reason/ide/highlight/RmlSyntaxHighlighterFactory.java
  class RmlSyntaxHighlighterFactory (line 14) | public class RmlSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
    method getSyntaxHighlighter (line 52) | @Override

FILE: src/main/java/com/reason/ide/hints/CodeLens.java
  class CodeLens (line 9) | public class CodeLens {
    method get (line 15) | public synchronized @Nullable String get(int line) {
    method putAll (line 20) | public synchronized void putAll(@NotNull Map<Integer, InferredTypes.Lo...
    method move (line 25) | public synchronized void move(@NotNull LogicalPosition cursorPosition,...
    method remove (line 49) | public void remove(int line) {

FILE: src/main/java/com/reason/ide/hints/InferredTypes.java
  type InferredTypes (line 10) | public interface InferredTypes {
    class LogicalPositionSignature (line 11) | class LogicalPositionSignature {
    method signaturesByLines (line 17) | @NotNull
    method getSignatureByPosition (line 20) | @Nullable

FILE: src/main/java/com/reason/ide/hints/InferredTypesImplementation.java
  class InferredTypesImplementation (line 16) | public class InferredTypesImplementation implements InferredTypes {
    method signaturesByLines (line 28) | public @NotNull Map<Integer, LogicalPositionSignature> signaturesByLin...
    method makeLogicalPositionSignature (line 47) | private @NotNull LogicalPositionSignature makeLogicalPositionSignature...
    method makeLogicalPositionSignature (line 51) | private @NotNull LogicalPositionSignature makeLogicalPositionSignature...
    method getSignatureByPosition (line 59) | @Override
    method add (line 64) | public void add(@NotNull Project project, @NotNull String entry, @NotN...
    method addVisibleSignature (line 139) | private void addVisibleSignature(@NotNull LogicalPosition lStart, @Not...
    class OpenModule (line 146) | static class OpenModule {
      method OpenModule (line 151) | OpenModule(@NotNull LogicalPosition start) {
      method getLine (line 155) | Integer getLine() {
      method getExposing (line 159) | @Nullable
      method addId (line 164) | void addId(String id) {
    class LogicalORSignature (line 169) | static class LogicalORSignature {
      method LogicalORSignature (line 177) | LogicalORSignature(@NotNull LogicalPosition lStart, @NotNull Logical...
      method getLogicalStart (line 183) | @NotNull
      method getLogicalEnd (line 188) | @NotNull
      method getSignature (line 193) | @NotNull

FILE: src/main/java/com/reason/ide/hints/InferredTypesService.java
  class InferredTypesService (line 27) | public class InferredTypesService {
    method InferredTypesService (line 30) | private InferredTypesService() {
    method getPsiFile (line 33) | public static @Nullable PsiFile getPsiFile(@NotNull Project project) {
    method queryTypes (line 47) | public static void queryTypes(@NotNull Project project, @NotNull PsiFi...
    method annotatePsiFile (line 102) | public static void annotatePsiFile(@NotNull Project project, @Nullable...
    method getSignatures (line 121) | public static @NotNull CodeLens getSignatures(@NotNull VirtualFile fil...

FILE: src/main/java/com/reason/ide/hints/OREditorLinePainter.java
  class OREditorLinePainter (line 15) | public class OREditorLinePainter extends EditorLinePainter {
    method getLineExtensions (line 16) | @Override

FILE: src/main/java/com/reason/ide/hints/ORParameterInfoHandler.java
  class ORParameterInfoHandler (line 12) | public abstract class ORParameterInfoHandler implements ParameterInfoHan...
    method findFunctionParams (line 15) | @Nullable abstract RPsiParameters findFunctionParams(@NotNull PsiFile ...
    method computeParameterIndex (line 17) | abstract int computeParameterIndex(@NotNull RPsiParameters paramsOwner...
    method findElementForParameterInfo (line 19) | @Override
    method findElementForUpdatingParameterInfo (line 31) | @Override
    method showParameterInfo (line 44) | @Override
    method updateParameterInfo (line 49) | @Override
    method updateUI (line 60) | @Override
    method calculateParameterInfo (line 80) | @Nullable ArgumentsDescription[] calculateParameterInfo(@NotNull RPsiP...
    class ArgumentsDescription (line 106) | public static class ArgumentsDescription {
      method ArgumentsDescription (line 111) | public ArgumentsDescription(PsiQualifiedNamedElement resolvedElement...
      method getText (line 117) | String getText() {
      method getRange (line 121) | @NotNull TextRange getRange(int index) {

FILE: src/main/java/com/reason/ide/hints/OclParameterInfoHandler.java
  class OclParameterInfoHandler (line 11) | public class OclParameterInfoHandler extends ORParameterInfoHandler {
    method isWhitespaceSensitive (line 12) | @Override public boolean isWhitespaceSensitive() {
    method computeParameterIndex (line 16) | @Override
    method findFunctionParams (line 21) | @Override

FILE: src/main/java/com/reason/ide/hints/ResParameterInfoHandler.java
  class ResParameterInfoHandler (line 10) | public class ResParameterInfoHandler extends ORParameterInfoHandler {
    method computeParameterIndex (line 11) | @Override
    method findFunctionParams (line 16) | @Override

FILE: src/main/java/com/reason/ide/hints/RmlParameterInfoHandler.java
  class RmlParameterInfoHandler (line 10) | public class RmlParameterInfoHandler extends ORParameterInfoHandler {
    method computeParameterIndex (line 11) | @Override
    method findFunctionParams (line 16) | @Override

FILE: src/main/java/com/reason/ide/hints/RmlTypeProvider.java
  class RmlTypeProvider (line 9) | public class RmlTypeProvider extends ExpressionTypeProvider<PsiElement> {
    method getInformationHint (line 10) | @Override
    method getErrorHint (line 15) | @Override
    method getExpressionsAt (line 20) | @Override

FILE: src/main/java/com/reason/ide/hints/SignatureProvider.java
  class SignatureProvider (line 10) | public class SignatureProvider /*implements InlayParameterHintsProvider*/ {
    method SignatureProvider (line 11) | private SignatureProvider() {
    class InferredTypesWithLines (line 14) | public static class InferredTypesWithLines {
      method InferredTypesWithLines (line 18) | InferredTypesWithLines(@NotNull InferredTypes types, @NotNull String...
      method getSignatureByOffset (line 23) | public @Nullable RPsiSignature getSignatureByOffset(int textOffset) {
      method getTypes (line 28) | public @NotNull InferredTypes getTypes() {

FILE: src/main/java/com/reason/ide/importWizard/DuneExternalConstants.java
  class DuneExternalConstants (line 3) | public class DuneExternalConstants {
    method DuneExternalConstants (line 7) | private DuneExternalConstants() {

FILE: src/main/java/com/reason/ide/importWizard/DuneProjectImportBuilder.java
  class DuneProjectImportBuilder (line 28) | public class DuneProjectImportBuilder extends ProjectImportBuilder<Impor...
    method getName (line 33) | @NonNls
    method getIcon (line 39) | @Override
    method setList (line 44) | @Override
    method isMarked (line 51) | @Override
    method setOpenProjectSettingsAfter (line 56) | @Override
    method cleanup (line 60) | @Override
    method setOpamSettings (line 67) | public void setOpamSettings(OpamSettings settings) {
    method setProjectRoot (line 71) | public void setProjectRoot(@NotNull final VirtualFile projectRoot) {
    method commit (line 102) | @Override
    type OpamSettings (line 149) | public interface OpamSettings {
      method getOpamLocation (line 150) | String getOpamLocation();
      method getOpamSwitch (line 152) | String getOpamSwitch();
      method isWsl (line 154) | boolean isWsl();
      method getCygwinBash (line 156) | String getCygwinBash();

FILE: src/main/java/com/reason/ide/importWizard/DuneProjectImportProvider.java
  class DuneProjectImportProvider (line 11) | public class DuneProjectImportProvider extends ProjectImportProvider {
    method doGetBuilder (line 12) | @Override
    method createSteps (line 17) | @Override
    method canImport (line 24) | public static boolean canImport(@NotNull VirtualFile entry) {
    method canImportFromFile (line 32) | @Override
    method getPathToBeImported (line 37) | @Override
    method getFileSample (line 42) | @Override

FILE: src/main/java/com/reason/ide/importWizard/DuneProjectOpenProcessor.java
  class DuneProjectOpenProcessor (line 8) | public class DuneProjectOpenProcessor extends ProjectOpenProcessorBase<D...
    method getSupportedExtensions (line 9) | @Override
    method doQuickImport (line 14) | @Override
    method doGetBuilder (line 24) | @Override

FILE: src/main/java/com/reason/ide/importWizard/DuneProjectRootStep.java
  class DuneProjectRootStep (line 14) | public class DuneProjectRootStep extends ProjectImportWizardStep {
    method DuneProjectRootStep (line 19) | public DuneProjectRootStep(WizardContext context) {
    method getComponent (line 34) | @Override
    method validate (line 39) | @Override
    method updateDataModel (line 78) | @Override

FILE: src/main/java/com/reason/ide/importWizard/ImportedDuneBuild.java
  class ImportedDuneBuild (line 6) | public class ImportedDuneBuild {
    method ImportedDuneBuild (line 9) | public ImportedDuneBuild(@NotNull VirtualFile build) {
    method getBuild (line 13) | @NotNull
    method getRoot (line 18) | @NotNull

FILE: src/main/java/com/reason/ide/insight/CompletionUtils.java
  class CompletionUtils (line 9) | public class CompletionUtils {
    method CompletionUtils (line 12) | private CompletionUtils() {
    method getPrevNodeType (line 15) | @Nullable

FILE: src/main/java/com/reason/ide/insight/KeywordCompletionContributor.java
  class KeywordCompletionContributor (line 17) | abstract class KeywordCompletionContributor extends com.intellij.codeIns...
    method KeywordCompletionContributor (line 22) | KeywordCompletionContributor(@NotNull ORLangTypes types) {
    method addFileKeywords (line 53) | protected abstract void addFileKeywords(@NotNull CompletionResultSet r...

FILE: src/main/java/com/reason/ide/insight/ORCompletionContributor.java
  class ORCompletionContributor (line 18) | abstract class ORCompletionContributor extends com.intellij.codeInsight....
    method ORCompletionContributor (line 21) | ORCompletionContributor(@NotNull ORLangTypes types) {

FILE: src/main/java/com/reason/ide/insight/OclCompletionContributor.java
  class OclCompletionContributor (line 5) | public class OclCompletionContributor extends ORCompletionContributor {
    method OclCompletionContributor (line 6) | OclCompletionContributor() {

FILE: src/main/java/com/reason/ide/insight/OclKeywordCompletionContributor.java
  class OclKeywordCompletionContributor (line 11) | public class OclKeywordCompletionContributor extends KeywordCompletionCo...
    method OclKeywordCompletionContributor (line 15) | OclKeywordCompletionContributor() {
    method addFileKeywords (line 19) | @Override

FILE: src/main/java/com/reason/ide/insight/ResCompletionContributor.java
  class ResCompletionContributor (line 5) | public class ResCompletionContributor extends ORCompletionContributor {
    method ResCompletionContributor (line 6) | ResCompletionContributor() {

FILE: src/main/java/com/reason/ide/insight/ResKeywordCompletionContributor.java
  class ResKeywordCompletionContributor (line 11) | public class ResKeywordCompletionContributor extends KeywordCompletionCo...
    method ResKeywordCompletionContributor (line 14) | ResKeywordCompletionContributor() {
    method addFileKeywords (line 18) | @Override

FILE: src/main/java/com/reason/ide/insight/RmlCompletionContributor.java
  class RmlCompletionContributor (line 5) | public class RmlCompletionContributor extends ORCompletionContributor {
    method RmlCompletionContributor (line 6) | RmlCompletionContributor() {

FILE: src/main/java/com/reason/ide/insight/RmlKeywordCompletionContributor.java
  class RmlKeywordCompletionContributor (line 11) | public class RmlKeywordCompletionContributor extends KeywordCompletionCo...
    method RmlKeywordCompletionContributor (line 15) | RmlKeywordCompletionContributor() {
    method addFileKeywords (line 19) | @Override

FILE: src/main/java/com/reason/ide/insight/pattern/ORElementPatternMatcher.java
  type ORElementPatternMatcher (line 8) | @FunctionalInterface
    method accepts (line 10) | boolean accepts(@NotNull PsiElement element, @Nullable ProcessingConte...

FILE: src/main/java/com/reason/ide/insight/provider/DotExpressionCompletionProvider.java
  class DotExpressionCompletionProvider (line 25) | public class DotExpressionCompletionProvider {
    method DotExpressionCompletionProvider (line 28) | private DotExpressionCompletionProvider() {
    method addCompletions (line 31) | public static void addCompletions(@NotNull PsiElement element, @NotNul...
    method addRecordFields (line 97) | private static void addRecordFields(@Nullable Collection<RPsiRecordFie...
    method addModuleExpressions (line 108) | private static void addModuleExpressions(@Nullable PsiElement resolved...
    method addInnerModuleExpressions (line 127) | private static void addInnerModuleExpressions(@NotNull RPsiInnerModule...
    method addFileExpressions (line 150) | private static void addFileExpressions(@NotNull FileBase file, @NotNul...
    method addFunctorExpressions (line 179) | private static void addFunctorExpressions(@NotNull RPsiFunctor functor...
    method addExpressions (line 195) | private static void addExpressions(@NotNull CompletionResultSet result...
    method addChildren (line 224) | private static void addChildren(@Nullable PsiElement body, @NotNull Co...

FILE: src/main/java/com/reason/ide/insight/provider/FreeExpressionCompletionProvider.java
  class FreeExpressionCompletionProvider (line 32) | public class FreeExpressionCompletionProvider {
    method FreeExpressionCompletionProvider (line 35) | private FreeExpressionCompletionProvider() {
    method addCompletions (line 38) | public static void addCompletions(@NotNull PsiElement element, @Nullab...
    method completeRecord (line 165) | private static void completeRecord(@NotNull PsiElement element, RPsiRe...
    method expandType (line 187) | private static void expandType(@NotNull RPsiType type, @NotNull Comple...
    method addModuleExpressions (line 203) | private static void addModuleExpressions(@NotNull RPsiModule rootModul...
    method insertExpression (line 246) | private static void insertExpression(@NotNull InsertionContext inserti...

FILE: src/main/java/com/reason/ide/insight/provider/JsxAttributeCompletionProvider.java
  class JsxAttributeCompletionProvider (line 31) | public class JsxAttributeCompletionProvider {
    method JsxAttributeCompletionProvider (line 34) | private JsxAttributeCompletionProvider() {
    method addCompletions (line 37) | public static void addCompletions(@NotNull PsiElement element, @NotNul...
    method getParameterSignature (line 148) | private static @NotNull String getParameterSignature(RPsiParameterDecl...
    method addProperty (line 157) | private static void addProperty(@Nullable PsiElement element, @Nullabl...
    method insertTagAttributeHandler (line 171) | private static void insertTagAttributeHandler(@NotNull InsertionContex...

FILE: src/main/java/com/reason/ide/insight/provider/JsxNameCompletionProvider.java
  class JsxNameCompletionProvider (line 27) | public class JsxNameCompletionProvider {
    method JsxNameCompletionProvider (line 30) | private JsxNameCompletionProvider() {
    method addCompletions (line 33) | public static void addCompletions(@NotNull PsiElement element, @NotNul...
    method insertTagNameHandler (line 94) | private static void insertTagNameHandler(@NotNull Project project, @No...

FILE: src/main/java/com/reason/ide/insight/provider/ModuleCompletionProvider.java
  class ModuleCompletionProvider (line 21) | public class ModuleCompletionProvider {
    method ModuleCompletionProvider (line 24) | private ModuleCompletionProvider() {
    method addCompletions (line 27) | public static void addCompletions(@NotNull PsiElement element, @NotNul...
    method addModule (line 85) | private static void addModule(@NotNull RPsiModule module, @NotNull Com...

FILE: src/main/java/com/reason/ide/insight/provider/ObjectCompletionProvider.java
  class ObjectCompletionProvider (line 19) | public class ObjectCompletionProvider {
    method ObjectCompletionProvider (line 22) | private ObjectCompletionProvider() {
    method addCompletions (line 25) | public static boolean addCompletions(@NotNull PsiElement element, @Nul...
    method getFields (line 71) | static @Nullable Collection<RPsiObjectField> getFields(@Nullable PsiEl...

FILE: src/main/java/com/reason/ide/intentions/ExpandLocalOpenIntention.java
  class ExpandLocalOpenIntention (line 17) | public class ExpandLocalOpenIntention implements IntentionAction {
    method getText (line 18) | @Override
    method getFamilyName (line 23) | @Override
    method isAvailable (line 28) | @Override
    method invoke (line 38) | @Override
    method startInWriteAction (line 69) | @Override

FILE: src/main/java/com/reason/ide/intentions/FunctionBracesIntention.java
  class FunctionBracesIntention (line 20) | public class FunctionBracesIntention implements IntentionAction {
    method getText (line 21) | @Override
    method getFamilyName (line 26) | @Override
    method isAvailable (line 31) | @Override
    method invoke (line 49) | @Override
    method startInWriteAction (line 71) | @Override
    method getTarget (line 76) | @Nullable

FILE: src/main/java/com/reason/ide/js/JsIconProvider.java
  class JsIconProvider (line 11) | public class JsIconProvider extends com.intellij.ide.IconProvider {
    method getIcon (line 12) | @Override
    method isBsJsFile (line 22) | private static boolean isBsJsFile(PsiFile psiFile) {

FILE: src/main/java/com/reason/ide/js/JsInjector.java
  class JsInjector (line 10) | public class JsInjector implements LanguageInjector {
    method getLanguagesToInject (line 11) | public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost hos...

FILE: src/main/java/com/reason/ide/js/ORIndexableFileNamesProvider.java
  class ORIndexableFileNamesProvider (line 9) | public class ORIndexableFileNamesProvider extends NodeModulesIndexableFi...
    method getIndexableFileNames (line 24) | @Override
    method getIndexableExtensions (line 29) | @Override

FILE: src/main/java/com/reason/ide/js/ORJsLibraryManager.java
  class ORJsLibraryManager (line 26) | public class ORJsLibraryManager implements ProjectActivity, DumbAware {
    method execute (line 30) | @Override
    method runActivityLater (line 36) | private void runActivityLater(@NotNull Project project) {
    method readBsConfigDependencies (line 77) | private @NotNull List<VirtualFile> readBsConfigDependencies(@NotNull P...

FILE: src/main/java/com/reason/ide/library/OclLibraryKind.java
  class OclLibraryKind (line 6) | public class OclLibraryKind extends PersistentLibraryKind<DummyLibraryPr...
    method OclLibraryKind (line 9) | public OclLibraryKind() {
    method createDefaultProperties (line 13) | @Override

FILE: src/main/java/com/reason/ide/library/OclLibraryRootProvider.java
  class OclLibraryRootProvider (line 20) | public class OclLibraryRootProvider extends AdditionalLibraryRootsProvid...
    method getAdditionalProjectLibraries (line 23) | @Override
    method getRootsToWatch (line 38) | @Override
    class OpamLibrary (line 48) | static final class OpamLibrary extends SyntheticLibrary implements Ite...
      method getOpamSwitchLocation (line 53) | private @Nullable VirtualFile getOpamSwitchLocation() {
      method OpamLibrary (line 61) | public OpamLibrary(@NotNull String opamRoot, @NotNull String opamSwi...
      method getSourceRoots (line 93) | @Override
      method getPresentableText (line 98) | @Override
      method getLocationString (line 103) | @Override
      method getIcon (line 112) | @Override
      method equals (line 117) | @Override
      method hashCode (line 122) | @Override

FILE: src/main/java/com/reason/ide/library/OclLibraryRootsComponentDescriptor.java
  class OclLibraryRootsComponentDescriptor (line 15) | public class OclLibraryRootsComponentDescriptor extends LibraryRootsComp...
    method getRootTypePresentation (line 16) | @Override
    method getRootDetectors (line 21) | @Override
    method createAttachButtons (line 26) | @Override
    class OclSourceRootDetector (line 31) | static class OclSourceRootDetector extends RootDetector {
      method OclSourceRootDetector (line 32) | protected OclSourceRootDetector() {
      method detectRoots (line 36) | @Override public @NotNull Collection<VirtualFile> detectRoots(@NotNu...

FILE: src/main/java/com/reason/ide/library/OclLibraryType.java
  class OclLibraryType (line 13) | public class OclLibraryType extends LibraryType<DummyLibraryProperties> {
    method OclLibraryType (line 14) | public OclLibraryType() {
    method getCreateActionName (line 18) | @Override
    method getIcon (line 23) | @Override
    method createNewLibrary (line 28) | @Override
    method createLibraryRootsComponentDescriptor (line 34) | @Override
    method createPropertiesEditor (line 39) | @Override

FILE: src/main/java/com/reason/ide/library/OclSdkSetupValidator.java
  class OclSdkSetupValidator (line 24) | public class OclSdkSetupValidator implements ProjectSdkSetupValidator {
    method isApplicableFor (line 27) | @Override
    method getErrorMessage (line 32) | @Override
    method getFixHandler (line 47) | @Override

FILE: src/main/java/com/reason/ide/match/DunePairedBraceMatcher.java
  class DunePairedBraceMatcher (line 9) | public class DunePairedBraceMatcher implements PairedBraceMatcher {
    method getPairs (line 15) | @Override
    method isPairedBracesAllowedBeforeType (line 20) | @Override
    method getCodeConstructStart (line 25) | @Override

FILE: src/main/java/com/reason/ide/match/OclPairedBraceMatcher.java
  class OclPairedBraceMatcher (line 11) | public class OclPairedBraceMatcher implements PairedBraceMatcher {
    method getPairs (line 26) | @Override
    method isPairedBracesAllowedBeforeType (line 31) | @Override
    method getCodeConstructStart (line 36) | @Override

FILE: src/main/java/com/reason/ide/match/ResPairedBraceMatcher.java
  class ResPairedBraceMatcher (line 9) | public class ResPairedBraceMatcher implements PairedBraceMatcher {
    method getPairs (line 19) | @Override
    method isPairedBracesAllowedBeforeType (line 24) | @Override
    method getCodeConstructStart (line 29) | @Override

FILE: src/main/java/com/reason/ide/match/RmlPairedBraceMatcher.java
  class RmlPairedBraceMatcher (line 11) | public class RmlPairedBraceMatcher implements PairedBraceMatcher {
    method getPairs (line 22) | @Override
    method isPairedBracesAllowedBeforeType (line 27) | @Override
    method getCodeConstructStart (line 32) | @Override

FILE: src/main/java/com/reason/ide/module/DuneModuleEditor.java
  class DuneModuleEditor (line 8) | public class DuneModuleEditor extends ModuleElementsEditor {
    method DuneModuleEditor (line 11) | protected DuneModuleEditor(@NotNull ModuleConfigurationState state) {
    method createComponentImpl (line 15) | @Override
    method getDisplayName (line 20) | @NonNls

FILE: src/main/java/com/reason/ide/module/DuneModuleEditorProvider.java
  class DuneModuleEditorProvider (line 6) | public class DuneModuleEditorProvider implements ModuleConfigurationEdit...
    method DuneModuleEditorProvider (line 7) | public DuneModuleEditorProvider() {
    method isCompleteEditorSet (line 10) | public boolean isCompleteEditorSet() {
    method createEditors (line 14) | public ModuleConfigurationEditor[] createEditors(ModuleConfigurationSt...

FILE: src/main/java/com/reason/ide/refactor/ORRefactoringSupportProvider.java
  class ORRefactoringSupportProvider (line 8) | public class ORRefactoringSupportProvider extends RefactoringSupportProv...
    method isInplaceRenameAvailable (line 9) | @Override

FILE: src/main/java/com/reason/ide/repl/PromptConsole.java
  class PromptConsole (line 32) | final class PromptConsole implements Disposable {
    method PromptConsole (line 42) | PromptConsole(@NotNull Project project, ConsoleViewImpl consoleView) {
    method dispose (line 69) | @Override
    method getCenterComponent (line 76) | @NotNull
    method getOutputEditor (line 81) | @NotNull
    method getInputComponent (line 86) | @NotNull
    method disablePrompt (line 91) | void disablePrompt() {
    method setupOutputEditor (line 98) | private void setupOutputEditor() {
    method setupPromptEditor (line 124) | private void setupPromptEditor() {
    method normalizeCommand (line 161) | @NotNull
    method setPromptCommand (line 175) | private void setPromptCommand(@NotNull String text) {

FILE: src/main/java/com/reason/ide/repl/PromptConsoleView.java
  class PromptConsoleView (line 18) | public class PromptConsoleView extends ConsoleViewImpl {
    method PromptConsoleView (line 21) | PromptConsoleView(@NotNull Project project, boolean viewer, final bool...
    method createCenterComponent (line 39) | @NotNull
    method doCreateConsoleEditor (line 45) | @NotNull
    method getPreferredFocusableComponent (line 51) | @NotNull
    method print (line 57) | @Override
    method attachToProcess (line 62) | @Override

FILE: src/main/java/com/reason/ide/repl/PromptHistory.java
  class PromptHistory (line 12) | final class PromptHistory {
    method addInHistory (line 16) | void addInHistory(@NotNull String command) {
    method getFromHistory (line 27) | @Nullable

FILE: src/main/java/com/reason/ide/repl/ReplConfigurationFactory.java
  class ReplConfigurationFactory (line 10) | public class ReplConfigurationFactory extends ConfigurationFactory {
    method ReplConfigurationFactory (line 11) | ReplConfigurationFactory(@NotNull ConfigurationType type) {
    method createTemplateConfiguration (line 15) | @Override
    method getId (line 20) | @Override
    method getIcon (line 25) | @Override
    method getName (line 30) | @Override

FILE: src/main/java/com/reason/ide/repl/ReplGenericState.java
  class ReplGenericState (line 19) | public class ReplGenericState implements RunProfileState {
    method ReplGenericState (line 22) | ReplGenericState(ExecutionEnvironment environment) {
    method execute (line 26) | @Override
    method startProcess (line 39) | private @Nullable ProcessHandler startProcess() throws ExecutionExcept...

FILE: src/main/java/com/reason/ide/repl/ReplRunConfiguration.java
  class ReplRunConfiguration (line 10) | public class ReplRunConfiguration extends RunConfigurationBase<ReplRunCo...
    method ReplRunConfiguration (line 11) | ReplRunConfiguration(@NotNull Project project, @NotNull ConfigurationF...
    method getConfigurationEditor (line 15) | @Override
    method getState (line 20) | @Override

FILE: src/main/java/com/reason/ide/repl/ReplRunConfigurationType.java
  class ReplRunConfigurationType (line 9) | public class ReplRunConfigurationType implements ConfigurationType {
    method getDisplayName (line 10) | @Override
    method getConfigurationTypeDescription (line 15) | @Override
    method getIcon (line 20) | @Override
    method getId (line 25) | @Override
    method getConfigurationFactories (line 30) | @Override

FILE: src/main/java/com/reason/ide/repl/ReplRunSettingsEditor.java
  class ReplRunSettingsEditor (line 10) | public class ReplRunSettingsEditor extends SettingsEditor<ReplRunConfigu...
    method ReplRunSettingsEditor (line 15) | ReplRunSettingsEditor(@NotNull Project project) {
    method createEditor (line 19) | @Override
    method createUIComponents (line 24) | private void createUIComponents() {
    method resetEditorFrom (line 28) | @Override
    method applyEditorTo (line 33) | @Override
    method init (line 37) | private void init() {

FILE: src/main/java/com/reason/ide/search/FileModuleData.java
  class FileModuleData (line 9) | public class FileModuleData implements Comparable<FileModuleData>, Index...
    method FileModuleData (line 20) | public FileModuleData(@NotNull VirtualFile file, @NotNull String names...
    method FileModuleData (line 34) | public FileModuleData(String path, String fullName, String namespace, ...
    method getNamespace (line 46) | @Override
    method hasNamespace (line 51) | public boolean hasNamespace() {
    method getModuleName (line 55) | @Override
    method getPath (line 60) | @NotNull
    method getFullName (line 66) | @NotNull
    method isOCaml (line 72) | @Override
    method isRescript (line 77) | @Override
    method isInterface (line 82) | @Override
    method isComponent (line 87) | @Override
    method hasComponents (line 92) | public boolean hasComponents() {
    method compareTo (line 96) | @Override
    method equals (line 108) | @Override
    method hashCode (line 123) | @Override
    method toString (line 128) | @NotNull

FILE: src/main/java/com/reason/ide/search/IndexedFileModule.java
  type IndexedFileModule (line 5) | public interface IndexedFileModule {
    method getNamespace (line 6) | @NotNull
    method getModuleName (line 9) | @NotNull
    method getPath (line 12) | @NotNull
    method getFullName (line 15) | @NotNull
    method isOCaml (line 18) | boolean isOCaml();
    method isRescript (line 20) | boolean isRescript();
    method isInterface (line 22) | boolean isInterface();
    method isComponent (line 24) | boolean isComponent();

FILE: src/main/java/com/reason/ide/search/ModuleIndexService.java
  class ModuleIndexService (line 15) | @Service(Service.Level.APP)
    method getModules (line 17) | public Collection<RPsiModule> getModules(@Nullable String name, @NotNu...

FILE: src/main/java/com/reason/ide/search/ORFindUsagesProvider.java
  class ORFindUsagesProvider (line 10) | public abstract class ORFindUsagesProvider implements FindUsagesProvider {
    method canFindUsagesFor (line 11) | @Override
    method getHelpId (line 21) | @Override
    method getType (line 26) | @Override
    method getDescriptiveName (line 32) | @Override
    method getNodeText (line 44) | @Override

FILE: src/main/java/com/reason/ide/search/ORImplementationSearch.java
  class ORImplementationSearch (line 17) | public class ORImplementationSearch extends QueryExecutorBase<PsiElement...
    method processQuery (line 20) | @Override

FILE: src/main/java/com/reason/ide/search/OclFindUsagesProvider.java
  class OclFindUsagesProvider (line 11) | public class OclFindUsagesProvider extends ORFindUsagesProvider {
    method getWordsScanner (line 12) | @Override

FILE: src/main/java/com/reason/ide/search/PsiTypeElementProvider.java
  class PsiTypeElementProvider (line 9) | public class PsiTypeElementProvider {
    method PsiTypeElementProvider (line 10) | private PsiTypeElementProvider() {
    method getType (line 13) | @Nullable

FILE: src/main/java/com/reason/ide/search/ResFindUsagesProvider.java
  class ResFindUsagesProvider (line 11) | public class ResFindUsagesProvider extends ORFindUsagesProvider {
    method getWordsScanner (line 12) | @Override

FILE: src/main/java/com/reason/ide/search/RmlFindUsagesProvider.java
  class RmlFindUsagesProvider (line 11) | public class RmlFindUsagesProvider extends ORFindUsagesProvider {
    method getWordsScanner (line 12) | @Override

FILE: src/main/java/com/reason/ide/search/index/ClassFqnIndex.java
  class ClassFqnIndex (line 12) | public class ClassFqnIndex extends IntStubIndexExtension<RPsiClass> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiClass> getElements(@NotNull Stri...

FILE: src/main/java/com/reason/ide/search/index/ClassMethodFqnIndex.java
  class ClassMethodFqnIndex (line 12) | public class ClassMethodFqnIndex extends IntStubIndexExtension<RPsiClass...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiClassMethod> getElements(String ...

FILE: src/main/java/com/reason/ide/search/index/ExceptionFqnIndex.java
  class ExceptionFqnIndex (line 12) | public class ExceptionFqnIndex extends IntStubIndexExtension<RPsiExcepti...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiException> getElements(@NotNull ...

FILE: src/main/java/com/reason/ide/search/index/ExceptionIndex.java
  class ExceptionIndex (line 12) | public class ExceptionIndex extends StringStubIndexExtension<RPsiExcepti...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiException> getElements(@NotNull ...

FILE: src/main/java/com/reason/ide/search/index/ExternalFqnIndex.java
  class ExternalFqnIndex (line 12) | public class ExternalFqnIndex extends IntStubIndexExtension<RPsiExternal> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiExternal> getElements(String qNa...

FILE: src/main/java/com/reason/ide/search/index/ExternalIndex.java
  class ExternalIndex (line 12) | public class ExternalIndex extends StringStubIndexExtension<RPsiExternal> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiExternal> getElements(@NotNull S...

FILE: src/main/java/com/reason/ide/search/index/FileModuleIndex.java
  class FileModuleIndex (line 21) | public class FileModuleIndex extends FileBasedIndexExtension<String, Fil...
    method getAllKeys (line 27) | public static @NotNull Collection<String> getAllKeys(@NotNull Project ...
    method getValues (line 31) | public static @NotNull List<FileModuleData> getValues(@NotNull String ...
    method getContainingFiles (line 35) | public static @NotNull Collection<VirtualFile> getContainingFiles(@Not...
    method getName (line 39) | @Override
    method getKeyDescriptor (line 44) | @Override
    method getIndexer (line 49) | @Override
    method getValueExternalizer (line 91) | @Override
    method getVersion (line 96) | @Override
    method getInputFilter (line 101) | @Override
    method dependsOnFileContent (line 109) | @Override
    class FileModuleDataExternalizer (line 114) | static final class FileModuleDataExternalizer implements DataExternali...
      method save (line 115) | @Override
      method read (line 128) | @Override

FILE: src/main/java/com/reason/ide/search/index/FileModuleIndexService.java
  class FileModuleIndexService (line 17) | @Service(Service.Level.APP)
    method getInstance (line 24) | public static @NotNull FileModuleIndexService getInstance() {
    method getTopModules (line 31) | @NotNull
    method getTopModule (line 42) | public @Nullable RPsiModule getTopModule(@NotNull String name, @NotNul...
    method getTopModuleData (line 51) | public @NotNull List<FileModuleData> getTopModuleData(@NotNull String ...
    method getNamespaces (line 55) | @NotNull
    method getAllKeys (line 70) | public @NotNull Collection<String> getAllKeys(@NotNull Project project) {

FILE: src/main/java/com/reason/ide/search/index/IncludeIndex.java
  class IncludeIndex (line 12) | public class IncludeIndex extends StringStubIndexExtension<RPsiInclude> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiInclude> getElements(@NotNull St...

FILE: src/main/java/com/reason/ide/search/index/IndexKeys.java
  class IndexKeys (line 8) | public class IndexKeys {
    type ProcessElement (line 9) | @FunctionalInterface
      method process (line 12) | void process(@NotNull T element);
    method IndexKeys (line 37) | private IndexKeys() {

FILE: src/main/java/com/reason/ide/search/index/LetComponentFqnIndex.java
  class LetComponentFqnIndex (line 12) | public class LetComponentFqnIndex extends IntStubIndexExtension<RPsiLet> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiLet> getElements(String qName, @...

FILE: src/main/java/com/reason/ide/search/index/LetFqnIndex.java
  class LetFqnIndex (line 12) | public class LetFqnIndex extends IntStubIndexExtension<RPsiLet> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiLet> getElements(String qName, @...

FILE: src/main/java/com/reason/ide/search/index/ModuleFqnIndex.java
  class ModuleFqnIndex (line 12) | public class ModuleFqnIndex extends IntStubIndexExtension<RPsiModule> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiModule> getElements(@NotNull Str...

FILE: src/main/java/com/reason/ide/search/index/ModuleIndex.java
  class ModuleIndex (line 12) | public class ModuleIndex extends StringStubIndexExtension<RPsiModule> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiModule> getElements(@NotNull Str...

FILE: src/main/java/com/reason/ide/search/index/ModuleSignatureIndex.java
  class ModuleSignatureIndex (line 15) | public class ModuleSignatureIndex extends StringStubIndexExtension<RPsiM...
    method getVersion (line 16) | @Override
    method getKey (line 21) | @Override
    method getElements (line 26) | public static @NotNull Collection<RPsiModule> getElements(@NotNull Str...

FILE: src/main/java/com/reason/ide/search/index/NamespaceIndex.java
  class NamespaceIndex (line 16) | public class NamespaceIndex extends ScalarIndexExtension<String> {
    method getName (line 21) | @Override
    method dependsOnFileContent (line 26) | @Override
    method getVersion (line 31) | @Override
    method getIndexer (line 36) | @Override
    method getKeyDescriptor (line 71) | @Override
    method getInputFilter (line 76) | @Override

FILE: src/main/java/com/reason/ide/search/index/ObjectFieldIndex.java
  class ObjectFieldIndex (line 12) | public class ObjectFieldIndex extends StringStubIndexExtension<RPsiObjec...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiObjectField> getElements(@NotNul...

FILE: src/main/java/com/reason/ide/search/index/OpenIndex.java
  class OpenIndex (line 12) | public class OpenIndex extends StringStubIndexExtension<RPsiOpen> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiOpen> getElements(@NotNull Strin...

FILE: src/main/java/com/reason/ide/search/index/ParameterFqnIndex.java
  class ParameterFqnIndex (line 12) | public class ParameterFqnIndex extends IntStubIndexExtension<RPsiParamet...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiParameterDeclaration> getElement...

FILE: src/main/java/com/reason/ide/search/index/ParameterIndex.java
  class ParameterIndex (line 12) | public class ParameterIndex extends StringStubIndexExtension<RPsiParamet...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiParameterDeclaration> getElement...

FILE: src/main/java/com/reason/ide/search/index/RecordFieldIndex.java
  class RecordFieldIndex (line 12) | public class RecordFieldIndex extends StringStubIndexExtension<RPsiRecor...
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiRecordField> getElements(@NotNul...

FILE: src/main/java/com/reason/ide/search/index/TypeFqnIndex.java
  class TypeFqnIndex (line 12) | public class TypeFqnIndex extends IntStubIndexExtension<RPsiType> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiType> getElements(String qName, ...

FILE: src/main/java/com/reason/ide/search/index/TypeIndex.java
  class TypeIndex (line 12) | public class TypeIndex extends StringStubIndexExtension<RPsiType> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiType> getElements(@NotNull Strin...

FILE: src/main/java/com/reason/ide/search/index/ValFqnIndex.java
  class ValFqnIndex (line 12) | public class ValFqnIndex extends IntStubIndexExtension<RPsiVal> {
    method getVersion (line 13) | @Override
    method getKey (line 18) | @Override
    method getElements (line 23) | public static @NotNull Collection<RPsiVal> getElements(String qName, @...

FILE: src/main/java/com/reason/ide/search/index/VariantFqnIndex.java
  class VariantFqnIndex (line 14) | public class VariantFqnIndex extends IntStubIndexExtension<RPsiVariantDe...
    method getVersion (line 15) | @Override
    method getKey (line 20) | @Override
    method getElements (line 25) | public static @NotNull Collection<RPsiVariantDeclaration> getElements(...
    method getElement (line 29) | public static @Nullable RPsiVariantDeclaration getElement(@Nullable St...

FILE: src/main/java/com/reason/ide/search/reference/ORFakeResolvedElement.java
  class ORFakeResolvedElement (line 8) | public class ORFakeResolvedElement extends FakePsiElement {
    method ORFakeResolvedElement (line 11) | public ORFakeResolvedElement(@NotNull PsiElement element) {
    method getOriginalElement (line 15) | @Override
    method getParent (line 20) | @Override
    method getText (line 25) | @Override
    method getTextRangeInParent (line 30) | @Override

FILE: src/main/java/com/reason/ide/search/reference/ORModuleResolutionPsiGist.java
  class ORModuleResolutionPsiGist (line 40) | public class ORModuleResolutionPsiGist {
    method ORModuleResolutionPsiGist (line 49) | private ORModuleResolutionPsiGist() {
    method getData (line 52) | public static @NotNull Data getData(@Nullable PsiFile psiFile) {
    method getFileData (line 58) | private static Data getFileData(@NotNull PsiFile file) {
    method walkFile (line 81) | private static @NotNull Data walkFile(@NotNull Context context, @NotNu...
    method visitedTag (line 160) | private static void visitedTag(@NotNull Context context, @NotNull Walk...
    method visitFunctor (line 215) | private static void visitFunctor(@NotNull Context context, @NotNull Wa...
    method closeVisitedElement (line 277) | private static void closeVisitedElement(@NotNull WalkInfo walkInfo, @N...
    method visitFirstClassModule (line 306) | private static void visitFirstClassModule(@NotNull Context context, @N...
    method visitInnerModule (line 375) | private static void visitInnerModule(@NotNull Context context, @NotNul...
    method visitModuleResultType (line 506) | private static void visitModuleResultType(@NotNull Context context, @N...
    method visitIncludeOpen (line 572) | private static void visitIncludeOpen(@NotNull Context context, @NotNul...
    method follow (line 714) | private static @Nullable RPsiQualifiedPathElement follow(@Nullable Psi...
    method fullResolution (line 750) | private static @NotNull RPsiQualifiedPathElement fullResolution(@NotNu...
    method resolveQName (line 756) | private static @NotNull ResolvedQName resolveQName(@NotNull String qNa...
    method findGlobalModule (line 861) | private static @Nullable RPsiQualifiedPathElement findGlobalModule(@No...
    method getIndex (line 886) | public static @NotNull String getIndex(@NotNull PsiElement element) {
    class Data (line 919) | public static class Data {
      method getValues (line 922) | public @NotNull Collection<String> getValues(@Nullable PsiElement el...
      method addValue (line 930) | public void addValue(@NotNull String key, @Nullable String value) {
      method addValues (line 937) | public void addValues(@NotNull String key, @NotNull Collection<Strin...
      method size (line 942) | public int size() {
    class Externalizer (line 947) | public static class Externalizer implements DataExternalizer<Data> {
      method save (line 948) | @Override
      method read (line 957) | @Override
    class RPsiFirstClassModule (line 970) | static class RPsiFirstClassModule extends FakePsiElement {
      method RPsiFirstClassModule (line 973) | public RPsiFirstClassModule(RPsiQualifiedPathElement element) {
      method getElement (line 977) | public RPsiQualifiedPathElement getElement() {
      method getParent (line 981) | @Override
      method getText (line 986) | @Override
      method getTextRangeInParent (line 991) | @Override
    method WalkInfo (line 1006) | public WalkInfo(FileBase file) {
    class ModuleExComparator (line 1019) | static class ModuleExComparator implements Comparator<ModuleEx> {
      method ModuleExComparator (line 1022) | ModuleExComparator(String path) {
      method compare (line 1026) | @Override public int compare(ModuleEx m1, ModuleEx m2) {
      method equals (line 1053) | @Override public boolean equals(Object obj) {

FILE: src/main/java/com/reason/ide/search/reference/ORMultiSymbolReference.java
  class ORMultiSymbolReference (line 12) | public abstract class ORMultiSymbolReference<T extends PsiElement> exten...
    method ORMultiSymbolReference (line 16) | protected ORMultiSymbolReference(@NotNull T element, @NotNull ORLangTy...
    method resolve (line 22) | @Override
    method resolveInterface (line 28) | public @Nullable PsiElement resolveInterface() {

FILE: src/main/java/com/reason/ide/search/reference/ORPsiLiteralStringReference.java
  class ORPsiLiteralStringReference (line 18) | public class ORPsiLiteralStringReference extends ORMultiSymbolReference<...
    method ORPsiLiteralStringReference (line 22) | public ORPsiLiteralStringReference(@NotNull RPsiLiteralString element,...
    method multiResolve (line 26) | @Override

FILE: src/main/java/com/reason/ide/search/reference/ORPsiLowerSymbolReference.java
  class ORPsiLowerSymbolReference (line 19) | public class ORPsiLowerSymbolReference extends ORMultiSymbolReference<RP...
    method ORPsiLowerSymbolReference (line 23) | public ORPsiLowerSymbolReference(@NotNull RPsiLowerSymbol element, @No...
    method multiResolve (line 27) | @Override
    method handleElementRename (line 109) | @Override
    class LowerResolveResult (line 115) | public static class LowerResolveResult implements ResolveResult {
      method LowerResolveResult (line 118) | public LowerResolveResult(@NotNull PsiElement referencedElement, Str...
      method getElement (line 133) | @Override
      method isValidResult (line 138) | @Override
      method inInterface (line 143) | public boolean inInterface() {

FILE: src/main/java/com/reason/ide/search/reference/ORPsiPropertyNameReference.java
  class ORPsiPropertyNameReference (line 18) | public class ORPsiPropertyNameReference extends PsiPolyVariantReferenceB...
    method ORPsiPropertyNameReference (line 25) | public ORPsiPropertyNameReference(@NotNull RPsiLeafPropertyName elemen...
    method multiResolve (line 31) | @Override
    method resolve (line 103) | @Override
    class JsxTagResolveResult (line 109) | public static class JsxTagResolveResult implements ResolveResult {
      method JsxTagResolveResult (line 112) | public JsxTagResolveResult(@NotNull PsiElement referencedElement, @N...
      method getElement (line 129) | @Override
      method isValidResult (line 134) | @Override

FILE: src/main/java/com/reason/ide/search/reference/ORPsiUpperSymbolReference.java
  class ORPsiUpperSymbolReference (line 21) | public class ORPsiUpperSymbolReference extends ORMultiSymbolReference<RP...
    method ORPsiUpperSymbolReference (line 25) | public ORPsiUpperSymbolReference(@NotNull RPsiUpperSymbol element, @No...
    method multiResolve (line 29) | @Override
    method handleElementRename (line 119) | @Override
    class UpperResolveResult (line 125) | private static class UpperResolveResult implements ResolveResult {
      method UpperResolveResult (line 128) | public UpperResolveResult(@NotNull PsiElement referencedElement) {
      method getElement (line 132) | @Override
      method isValidResult (line 137) | @Override

FILE: src/main/java/com/reason/ide/search/reference/ORReferenceAnalyzer.java
  class ORReferenceAnalyzer (line 26) | public class ORReferenceAnalyzer {
    method ORReferenceAnalyzer (line 39) | private ORReferenceAnalyzer() {
    method createInstructionsBackward (line 43) | static @NotNull Deque<PsiElement> createInstructionsBackward(@NotNull ...
    method createInstructionsForward (line 223) | static @NotNull Deque<PsiElement> createInstructionsForward(@NotNull P...
    method isInPath (line 248) | public static boolean isInPath(@NotNull PsiElement sourceElement, @Not...
    method resolveInstructions (line 254) | static @NotNull List<RPsiQualifiedPathElement> resolveInstructions(@No...
    method processInstructions (line 294) | static @NotNull List<RPsiQualifiedPathElement> processInstructions(@No...
    method isInterface (line 784) | private static boolean isInterface(PsiElement element) {
    method resolvePath (line 791) | public static List<PsiElement> resolvePath(@NotNull String path, @NotN...
    method getTopModules (line 845) | private static @NotNull List<RPsiModule> getTopModules(@NotNull String...
    class FirstInPath (line 853) | static class FirstInPath extends ORFakeResolvedElement {
      method FirstInPath (line 854) | public FirstInPath(@NotNull PsiElement element) {
      method toString (line 858) | @Override
    class SymbolField (line 864) | static class SymbolField extends ORFakeResolvedElement {
      method SymbolField (line 867) | public SymbolField(@NotNull PsiElement element, boolean isRecord) {
      method getValue (line 872) | public @NotNull String getValue() {
      method toString (line 881) | @Override
    class ResolutionElement (line 887) | static class ResolutionElement extends ORFakeResolvedElement {
      method ResolutionElement (line 890) | public ResolutionElement(@NotNull PsiElement element) {
      method ResolutionElement (line 894) | public ResolutionElement(PsiElement element, boolean inContext) {
      method isComponent (line 899) | public boolean isComponent() {
      method getQualifiedName (line 907) | public String getQualifiedName() {
      method toString (line 912) | @Override public String toString() {

FILE: src/main/java/com/reason/ide/settings/DuneColorSettingsPage.java
  class DuneColorSettingsPage (line 17) | public class DuneColorSettingsPage implements ColorSettingsPage {
    method getIcon (line 29) | @Override
    method getHighlighter (line 34) | @Override
    method getDemoText (line 39) | @Override
    method getAdditionalHighlightingTagToDescriptorMap (line 71) | @Override
    method getAttributeDescriptors (line 76) | @Override
    method getColorDescriptors (line 81) | @Override
    method getDisplayName (line 86) | @Override

FILE: src/main/java/com/reason/ide/settings/ORColorSettingsPage.java
  class ORColorSettingsPage (line 14) | public class ORColorSettingsPage implements ColorSettingsPage {
    method getIcon (line 41) | @Override
    method getHighlighter (line 46) | @Override
    method getDemoText (line 51) | @Override
    method getAdditionalHighlightingTagToDescriptorMap (line 98) | @Override
    method getAttributeDescriptors (line 103) | @Override
    method getColorDescriptors (line 108) | @Override
    method getDisplayName (line 113) | @Override

FILE: src/main/java/com/reason/ide/settings/ORSettings.java
  class ORSettings (line 7) | @State(name = "ReasonSettings", storages = {@Storage("reason.xml")})
    method ORSettings (line 33) | public ORSettings(@NotNull Project project) {
    method getState (line 37) | @Override
    method loadState (line 53) | @Override
    method getProject (line 67) | public @NotNull Project getProject() {
    method isFormatOnSaveEnabled (line 71) | public boolean isFormatOnSaveEnabled() {
    method setFormatOnSaveEnabled (line 75) | public void setFormatOnSaveEnabled(boolean isFormatOnSaveEnabled) {
    method getFormatColumnWidth (line 79) | @NotNull
    method setFormatColumnWidth (line 89) | public void setFormatColumnWidth(@Nullable String formatColumnWidth) {
    method isUseSuperErrors (line 94) | public boolean isUseSuperErrors() {
    method setUseSuperErrors (line 98) | public void setUseSuperErrors(boolean useSuperErrors) {
    method isBsEnabled (line 102) | public boolean isBsEnabled() {
    method setBsEnabled (line 106) | public void setBsEnabled(boolean isBsEnabled) {
    method getBsPlatformLocation (line 110) | public @NotNull String getBsPlatformLocation() {
    method setBsPlatformLocation (line 114) | public void setBsPlatformLocation(String bsPlatformLocation) {
    method getOpamLocation (line 118) | public @NotNull String getOpamLocation() {
    method setOpamLocation (line 122) | public void setOpamLocation(@Nullable String location) {
    method getCygwinBash (line 126) | public String getCygwinBash() {
    method setCygwinBash (line 130) | public void setCygwinBash(@Nullable String cygwinBash) {
    method isWsl (line 134) | public boolean isWsl() {
    method setIsWsl (line 138) | public void setIsWsl(boolean isWsl) {
    method getSwitchName (line 142) | public String getSwitchName() {
    method setSwitchName (line 146) | public void setSwitchName(@Nullable String name) {
    method getEsyExecutable (line 150) | public @NotNull String getEsyExecutable() {
    method setEsyExecutable (line 154) | public void setEsyExecutable(String esyExecutable) {
    class ReasonSettingsState (line 158) | @SuppressWarnings("WeakerAccess")

FILE: src/main/java/com/reason/ide/settings/ORSettingsConfigurable.java
  class ORSettingsConfigurable (line 28) | public class ORSettingsConfigurable implements SearchableConfigurable, C...
    method ORSettingsConfigurable (line 56) | public ORSettingsConfigurable(@NotNull Project project) {
    method getId (line 60) | @NotNull
    method getDisplayName (line 66) | @Nls
    method getHelpTopic (line 72) | @NotNull
    method createComponent (line 78) | @Nullable
    method apply (line 91) | @Override
    method createExternalLibraryDependency (line 117) | private void createExternalLibraryDependency(@NotNull Project project,...
    method isModified (line 171) | @Override
    method reset (line 195) | @Override
    method createGeneralTab (line 214) | private void createGeneralTab() {
    method createBsTab (line 217) | private void createBsTab() {
    method createEsyTab (line 223) | private void createEsyTab() {
    method sanitizeInput (line 229) | private static @NotNull String sanitizeInput(@NotNull TextFieldWithBro...
    method sanitizeInput (line 233) | private static @NotNull String sanitizeInput(@NotNull String input) {

FILE: src/main/java/com/reason/ide/settings/OpamConfigurationTab.java
  class OpamConfigurationTab (line 20) | public class OpamConfigurationTab {
    method createComponent (line 32) | public void createComponent(@Nullable Project project, @NotNull String...
    method getFocusListener (line 63) | private @NotNull FocusListener getFocusListener(@NotNull String switch...
    method detectSwitchSystem (line 90) | private void detectSwitchSystem(@NotNull VirtualFile dir) {
    method setDetectionText (line 104) | void setDetectionText() {
    method createSwitch (line 114) | void createSwitch(@NotNull String opamLocation, @NotNull String switch...
    method listLibraries (line 139) | private void listLibraries(@NotNull String version) {
    method clearEnv (line 150) | void clearEnv() {
    method createDataModel (line 155) | @NotNull
    method findBinary (line 176) | private VirtualFile findBinary(@Nullable VirtualFile dir) {
    method getOpamLocation (line 189) | public TextFieldWithBrowseButton getOpamLocation() {
    method setOpamLocation (line 193) | public void setOpamLocation(@NotNull String opamLocation) {
    method getSelectedSwitch (line 197) | public @Nullable String getSelectedSwitch() {
    method isWsl (line 201) | public boolean isWsl() {
    method getCygwinBash (line 205) | public @Nullable String getCygwinBash() {
    method isOpamLocationModified (line 209) | public boolean isOpamLocationModified(String opamLocation) {
    method isOpamSwitchModified (line 213) | public boolean isOpamSwitchModified(@NotNull String switchName) {

FILE: src/main/java/com/reason/ide/spellcheckers/ORSpellCheckerStrategy.java
  class ORSpellCheckerStrategy (line 15) | public class ORSpellCheckerStrategy extends SpellcheckingStrategy {
    method getTokenizer (line 16) | @Override

FILE: src/main/java/com/reason/ide/spellcheckers/OclSpellCheckerStrategy.java
  class OclSpellCheckerStrategy (line 7) | public class OclSpellCheckerStrategy extends ORSpellCheckerStrategy {
    method getTokenizer (line 8) | @Override

FILE: src/main/java/com/reason/ide/spellcheckers/ResSpellCheckerStrategy.java
  class ResSpellCheckerStrategy (line 7) | public class ResSpellCheckerStrategy extends ORSpellCheckerStrategy {
    method getTokenizer (line 8) | @Override

FILE: src/main/java/com/reason/ide/spellcheckers/RmlSpellCheckerStrategy.java
  class RmlSpellCheckerStrategy (line 7) | public class RmlSpellCheckerStrategy extends ORSpellCheckerStrategy {
    method getTokenizer (line 8) | @Override

FILE: src/main/java/com/reason/ide/structure/NestedFunctionsFilter.java
  class NestedFunctionsFilter (line 9) | public class NestedFunctionsFilter implements Filter {
    method isVisible (line 10) | @Override
    method isReverted (line 18) | @Override
    method getPresentation (line 23) | @Override
    method getName (line 43) | @Override public @NotNull String getName() {

FILE: src/main/java/com/reason/ide/structure/ORStructureViewModel.java
  class ORStructureViewModel (line 9) | public class ORStructureViewModel extends StructureViewModelBase impleme...
    method ORStructureViewModel (line 10) | ORStructureViewModel(@NotNull PsiFile psiFile) {
    method getSorters (line 14) | public @NotNull Sorter[] getSorters() {
    method getFilters (line 18) | @Override
    method isAlwaysShowsPlus (line 23) | @Override
    method isAlwaysLeaf (line 28) | @Override

FILE: src/main/java/com/reason/ide/structure/ShowVariableFilter.java
  class ShowVariableFilter (line 10) | public class ShowVariableFilter implements Filter {
    method isVisible (line 11) | @Override
    method isReverted (line 19) | @Override
    method getPresentation (line 24) | @Override
    method getName (line 44) | @Override public @NotNull String getName() {

FILE: src/main/java/com/reason/ide/structure/StructureViewElement.java
  class StructureViewElement (line 18) | public class StructureViewElement implements StructureViewTreeElement, S...
    method StructureViewElement (line 24) | StructureViewElement(@NotNull PsiElement element, int level) {
    method StructureViewElement (line 28) | private StructureViewElement(@Nullable PsiElement viewElement, @NotNul...
    method getValue (line 35) | @Override
    method getElement (line 40) | public PsiElement getElement() {
    method getLevel (line 44) | int getLevel() {
    method navigate (line 48) | @Override
    method canNavigate (line 57) | @Override
    method canNavigateToSource (line 62) | @Override
    method getAlphaSortKey (line 68) | @Override
    method getPresentation (line 84) | @Override
    method getChildren (line 141) | @Override
    method buildModuleStructure (line 178) | private @NotNull List<TreeElement> buildModuleStructure(@NotNull RPsiI...
    method buildFunctorStructure (line 211) | private @NotNull List<TreeElement> buildFunctorStructure(@NotNull RPsi...
    method buildTypeStructure (line 222) | private @NotNull List<TreeElement> buildTypeStructure(@NotNull RPsiTyp...
    method buildClassStructure (line 236) | private @NotNull List<TreeElement> buildClassStructure(@NotNull RPsiCl...
    method buildStanzaStructure (line 247) | private @NotNull List<TreeElement> buildStanzaStructure(@NotNull RPsiD...
    method buildLetStructure (line 258) | private @Nullable List<TreeElement> buildLetStructure(@NotNull RPsiLet...
    class ElementVisitor (line 274) | static class ElementVisitor extends PsiElementVisitor {
      method ElementVisitor (line 278) | ElementVisitor(List<TreeElement> elements, int elementLevel) {
      method visitElement (line 283) | @Override
    class CustomStructureView (line 331) | static abstract class CustomStructureView implements StructureViewTree...
      method CustomStructureView (line 334) | CustomStructureView(PsiElement rootElement) {
      method getChildren (line 338) | @Override
      method getValue (line 345) | @Override
      method navigate (line 350) | @Override
    class StructureObjectView (line 355) | static class StructureObjectView extends CustomStructureView {
      method StructureObjectView (line 358) | StructureObjectView(PsiElement rootElement, String name) {
      method getPresentation (line 363) | @Override
      method getAlphaSortKey (line 378) | @Override
    class StructureModuleImplView (line 384) | static class StructureModuleImplView extends CustomStructureView {
      method StructureModuleImplView (line 385) | StructureModuleImplView(PsiElement rootElement) {
      method getPresentation (line 389) | @Override
      method getAlphaSortKey (line 411) | @NotNull

FILE: src/main/java/com/reason/ide/structure/StructureViewFactory.java
  class StructureViewFactory (line 11) | public class StructureViewFactory implements PsiStructureViewFactory {
    method getStructureViewBuilder (line 12) | @Override

FILE: src/main/java/com/reason/ide/template/OCamlBaseLiveTemplateContextType.java
  class OCamlBaseLiveTemplateContextType (line 11) | public class OCamlBaseLiveTemplateContextType extends TemplateContextType {
    method OCamlBaseLiveTemplateContextType (line 12) | protected OCamlBaseLiveTemplateContextType() {
    method OCamlBaseLiveTemplateContextType (line 16) | public OCamlBaseLiveTemplateContextType(String presentableName) {
    method isInContext (line 20) | @Override
    method evaluateContext (line 26) | protected boolean evaluateContext(@NotNull TemplateActionContext templ...

FILE: src/main/java/com/reason/ide/template/OCamlCodeLiveTemplateContextType.java
  class OCamlCodeLiveTemplateContextType (line 6) | public class OCamlCodeLiveTemplateContextType extends OCamlBaseLiveTempl...
    method OCamlCodeLiveTemplateContextType (line 7) | public OCamlCodeLiveTemplateContextType() {
    method isInContext (line 11) | @Override

FILE: src/main/java/com/reason/ide/template/OCamlCommentLiveTemplateContextType.java
  class OCamlCommentLiveTemplateContextType (line 6) | public class OCamlCommentLiveTemplateContextType extends OCamlBaseLiveTe...
    method OCamlCommentLiveTemplateContextType (line 7) | public OCamlCommentLiveTemplateContextType() {
    method isInContext (line 11) | @Override

FILE: src/main/java/com/reason/ide/template/ResBaseLiveTemplateContextType.java
  class ResBaseLiveTemplateContextType (line 8) | public class ResBaseLiveTemplateContextType extends TemplateContextType {
    method ResBaseLiveTemplateContextType (line 9) | public ResBaseLiveTemplateContextType() {
    method isInContext (line 13) | @Override

FILE: src/main/java/com/reason/ide/template/RmlBaseLiveTemplateContextType.java
  class RmlBaseLiveTemplateContextType (line 8) | public class RmlBaseLiveTemplateContextType extends TemplateContextType {
    method RmlBaseLiveTemplateContextType (line 9) | public RmlBaseLiveTemplateContextType() {
    method isInContext (line 13) | @Override

FILE: src/main/java/com/reason/ide/testAssistant/GotoTestDataAction.java
  class GotoTestDataAction (line 22) | public class GotoTestDataAction extends AnAction {
    method actionPerformed (line 24) | @Override
    method findRelatedFiles (line 48) | private @NotNull List<String> findRelatedFiles(@NotNull Project projec...
    method splitModuleName (line 76) | private @NotNull String[] splitModuleName(@NotNull String moduleName) {

FILE: src/main/java/com/reason/ide/testAssistant/TestDataNavigationHandler.java
  class TestDataNavigationHandler (line 14) | public class TestDataNavigationHandler implements GutterIconNavigationHa...
    method navigate (line 15) | static void navigate(@NotNull RelativePoint point, @NotNull List<Strin...
    method navigate (line 24) | @Override

FILE: src/main/java/com/reason/lang/CommonPsiParser.java
  class CommonPsiParser (line 7) | public abstract class CommonPsiParser implements PsiParser {
    method CommonPsiParser (line 12) | protected CommonPsiParser(boolean isSafe) {
    method parse (line 16) | @Override
    method getORParser (line 42) | protected abstract ORParser<?> getORParser(@NotNull PsiBuilder builder);

FILE: src/main/java/com/reason/lang/Marker.java
  class Marker (line 9) | public class Marker {
    type Status (line 10) | enum Status {
    method Marker (line 23) | private Marker(@NotNull PsiBuilder builder, @NotNull PsiBuilder.Marker...
    method mark (line 31) | public static @NotNull Marker mark(@NotNull PsiBuilder builder, @NotNu...
    method atom (line 35) | public static @NotNull Marker atom(@NotNull PsiBuilder builder, @NotNu...
    method precede (line 42) | public static @NotNull Marker precede(@NotNull Marker mark, @NotNull O...
    method duplicate (line 47) | public static Marker duplicate(Marker marker) {
    method getLength (line 60) | public int getLength() {
    method isEmpty (line 64) | public boolean isEmpty() {
    method end (line 68) | public void end() {
    method done (line 73) | private void done() {
    method drop (line 95) | public void drop() {
    method hold (line 102) | public void hold() {
    method updateCompositeType (line 108) | public void updateCompositeType(@NotNull ORCompositeType compositeType) {
    method isCompositeIn (line 112) | boolean isCompositeIn(@NotNull ORCompositeType... compositeType) {
    method setScopeType (line 121) | void setScopeType(@NotNull IElementType scopeType) {
    method updateScope (line 125) | public void updateScope(@Nullable IElementType scopeToken) {
    method isScopeToken (line 129) | public boolean isScopeToken(ORTokenElementType scopeType) {
    method getScopeType (line 133) | public @Nullable IElementType getScopeType() {
    method hasScope (line 137) | public boolean hasScope() {
    method rollbackTo (line 141) | public void rollbackTo() {
    method isCompositeType (line 147) | public boolean isCompositeType(@Nullable ORCompositeType elementType) {
    method getCompositeType (line 151) | public @NotNull ORCompositeType getCompositeType() {
    method isUnset (line 155) | public boolean isUnset() {
    method isDone (line 159) | public boolean isDone() {
    method isDropped (line 163) | public boolean isDropped() {
    method isHold (line 167) | public boolean isHold() {
    method resetStatus (line 171) | public void resetStatus() {

FILE: src/main/java/com/reason/lang/ModuleHelper.java
  class ModuleHelper (line 11) | public class ModuleHelper {
    method ModuleHelper (line 13) | private ModuleHelper() {
    method isComponent (line 16) | public static boolean isComponent(@Nullable PsiElement element) {

FILE: src/main/java/com/reason/lang/ORLanguageParser.java
  class ORLanguageParser (line 7) | public abstract class ORLanguageParser<T extends ORLangTypes> extends OR...
    method ORLanguageParser (line 8) | protected ORLanguageParser(@NotNull T types, @NotNull PsiBuilder build...
    method markParenthesisScope (line 12) | public @NotNull ORLanguageParser<T> markParenthesisScope(boolean isDum...
    method endJsxPropertyIfWhitespace (line 24) | protected @Nullable WhitespaceSkippedCallback endJsxPropertyIfWhitespa...

FILE: src/main/java/com/reason/lang/ORLanguageProperties.java
  type ORLanguageProperties (line 6) | public interface ORLanguageProperties {
    method cast (line 7) | static @Nullable ORLanguageProperties cast(@Nullable Language language) {
    method getParameterSeparator (line 11) | @NotNull String getParameterSeparator();
    method getFunctionSeparator (line 13) | @NotNull String getFunctionSeparator();
    method getTemplateStart (line 15) | @NotNull String getTemplateStart();
    method getTemplateEnd (line 17) | @NotNull String getTemplateEnd();

FILE: src/main/java/com/reason/lang/ORParser.java
  class ORParser (line 12) | public abstract class ORParser<T extends ORTypes> {
    method ORParser (line 27) | protected ORParser(@NotNull T types, @NotNull PsiBuilder builder, bool...
    method parse (line 34) | public abstract void parse();
    method previousElementType (line 36) | public @Nullable IElementType previousElementType(int step) {
    method popEndUntilScope (line 56) | public @Nullable Marker popEndUntilScope() {
    method popEndUntilScopeToken (line 75) | public @Nullable Marker popEndUntilScopeToken(@NotNull IElementType sc...
    method getLatestMarker (line 89) | public @Nullable Marker getLatestMarker() {
    method getCurrentMarker (line 93) | public @Nullable Marker getCurrentMarker() {
    method getActiveMarker (line 102) | public @Nullable Marker getActiveMarker() { // latest unset, not hold ...
    method is (line 111) | public boolean is(@Nullable ORCompositeType composite) {
    method isCurrent (line 115) | public boolean isCurrent(@Nullable ORCompositeType composite) {
    method isDone (line 125) | public boolean isDone(@Nullable ORCompositeType composite) {
    method isRawParent (line 130) | public boolean isRawParent(ORCompositeType composite) {
    method isParent (line 140) | public boolean isParent(ORCompositeType expectedType) {
    method isGrandParent (line 170) | public boolean isGrandParent(ORCompositeType expectedType) {
    method isPrevious (line 213) | public boolean isPrevious(ORCompositeType expectedComposite, int index) {
    method isRawGrandParent (line 221) | public boolean isRawGrandParent(@Nullable ORCompositeType composite) {
    method in (line 228) | public boolean in(ORCompositeType composite) {
    method in (line 232) | public boolean in(ORCompositeType composite, @Nullable ORCompositeType...
    method in (line 236) | public boolean in(ORCompositeType composite, @Nullable ORCompositeType...
    method strictlyIn (line 256) | public boolean strictlyIn(ORCompositeType composite) {
    method strictlyInAny (line 274) | public boolean strictlyInAny(@NotNull ORCompositeType... composite) {
    method find (line 292) | public @Nullable Marker find(int index) {
    method latestIndexOfCompositeAtMost (line 296) | public int latestIndexOfCompositeAtMost(int maxIndex, @NotNull ORCompo...
    method inAny (line 307) | public boolean inAny(ORCompositeType... composite) {
    method inScopeOrAny (line 320) | public boolean inScopeOrAny(ORCompositeType... composite) {
    method isScope (line 333) | public boolean isScope(@Nullable ORTokenElementType scopeType) {
    method isCurrentScope (line 338) | public boolean isCurrentScope(@Nullable ORTokenElementType scopeType) {
    method isScopeAtIndex (line 343) | public boolean isScopeAtIndex(int pos, @Nullable ORTokenElementType sc...
    method isFoundScope (line 348) | protected boolean isFoundScope(@Nullable ORTokenElementType expectedSc...
    method mark (line 353) | public @NotNull ORParser<T> mark(@NotNull ORCompositeType composite) {
    method markScope (line 359) | public @NotNull ORParser<T> markScope(@NotNull ORCompositeType composi...
    method markDummyScope (line 364) | public @NotNull ORParser<T> markDummyScope(@NotNull ORCompositeType co...
    method markHolder (line 373) | public ORParser<T> markHolder(@NotNull ORCompositeType compositeType) {
    method markHolderBefore (line 380) | protected ORParser<T> markHolderBefore(int pos, @NotNull ORCompositeTy...
    method empty (line 388) | boolean empty() {
    method pop (line 392) | public @Nullable Marker pop() {
    method clear (line 396) | void clear() {
    method popIfHold (line 404) | public ORParser<T> popIfHold() {
    method popEnd (line 411) | public @NotNull ORParser<T> popEnd() {
    method popEndUntilOneOf (line 420) | public void popEndUntilOneOf(@NotNull ORCompositeType... composites) {
    method popEndUntilOneOfElementType (line 430) | @Nullable
    method popEndUntil (line 445) | @NotNull
    method popEndUntilIndex (line 456) | public ORParser<T> popEndUntilIndex(int index) {
    method popEndUntilFoundIndex (line 465) | public ORParser<T> popEndUntilFoundIndex() {
    method rawHasScope (line 471) | public boolean rawHasScope() {
    method currentHasScope (line 476) | protected boolean currentHasScope() {
    method updateLatestComposite (line 481) | public @NotNull ORParser<T> updateLatestComposite(@NotNull ORComposite...
    method updateComposite (line 490) | public @NotNull ORParser<T> updateComposite(@NotNull ORCompositeType c...
    method updateToHolder (line 499) | public @NotNull ORParser<T> updateToHolder() {
    method advance (line 507) | public @NotNull ORParser<T> advance() {
    method updateScopeToken (line 513) | public @NotNull ORParser<T> updateScopeToken(@Nullable IElementType to...
    method wrapWith (line 523) | @SuppressWarnings("UnusedReturnValue")
    method wrapAtom (line 530) | public @NotNull ORParser<T> wrapAtom(@NotNull ORCompositeType atomComp...
    method error (line 538) | @SuppressWarnings("unused")
    method remapCurrentToken (line 543) | public @NotNull ORParser<T> remapCurrentToken(ORTokenElementType eleme...
    method setWhitespaceSkippedCallback (line 548) | public @NotNull ORParser<T> setWhitespaceSkippedCallback(@Nullable Whi...
    method getTokenText (line 553) | public @Nullable String getTokenText() {
    method rawLookup (line 557) | public @Nullable IElementType rawLookup(int steps) {
    method lookAhead (line 561) | public @Nullable IElementType lookAhead(int steps) {
    method getTokenType (line 565) | public @Nullable IElementType getTokenType() {
    method isRoot (line 569) | public boolean isRoot() {
    method isHold (line 573) | public boolean isHold() {
    method duplicateAtIndex (line 578) | public ORParser<T> duplicateAtIndex(int pos) {
    method markBefore (line 588) | public ORParser<T> markBefore(int pos, ORCompositeType compositeType) {
    method getPrevious (line 597) | public @Nullable Marker getPrevious() {
    method rollbackToIndexAndDrop (line 605) | public @NotNull ORParser<T> rollbackToIndexAndDrop(int pos) {
    method rollbackToIndex (line 619) | public @NotNull ORParser<T> rollbackToIndex(int index) {
    method rollbackToFoundIndex (line 656) | public @NotNull ORParser<T> rollbackToFoundIndex() {
    method getIndex (line 662) | public int getIndex() {
    method isFound (line 666) | public boolean isFound(@Nullable ORCompositeType expectedType) {
    method updateScopeToken (line 671) | public ORParser<T> updateScopeToken(@Nullable Marker scope, @Nullable ...
    method isAtIndex (line 678) | public boolean isAtIndex(int index, @NotNull ORCompositeType expectedC...
    method end (line 683) | public @NotNull ORParser<T> end() {
    method updateCompositeAt (line 692) | public ORParser<T> updateCompositeAt(int pos, @NotNull ORCompositeType...
    method dropLatest (line 704) | public ORParser<T> dropLatest() {

FILE: src/main/java/com/reason/lang/core/LiteralStringManipulator.java
  class LiteralStringManipulator (line 11) | public class LiteralStringManipulator extends AbstractElementManipulator...
    method handleContentChange (line 12) | @Override
    method getRangeInElement (line 28) | @Override
    method getValueRange (line 33) | @NotNull

FILE: src/main/java/com/reason/lang/core/ORCodeFactory.java
  class ORCodeFactory (line 12) | public class ORCodeFactory {
    method ORCodeFactory (line 13) | private ORCodeFactory() {
    method createModuleName (line 16) | @Nullable
    method createLetName (line 23) | @Nullable
    method createTypeName (line 30) | @Nullable
    method createExpression (line 37) | @Nullable
    method createFileFromText (line 43) | @NotNull

FILE: src/main/java/com/reason/lang/core/ORUtil.java
  class ORUtil (line 21) | public class ORUtil {
    method ORUtil (line 24) | private ORUtil() {
    method moduleNameToFileName (line 27) | @NotNull
    method fileNameToModuleName (line 35) | @NotNull
    method prevSibling (line 45) | @Nullable
    method prevPrevSibling (line 59) | @Nullable
    method prevAnnotations (line 65) | @NotNull
    method nextSiblingWithTokenType (line 78) | public static @Nullable PsiElement nextSiblingWithTokenType(@NotNull P...
    method getTextUntilTokenType (line 94) | public static @NotNull String getTextUntilTokenType(@NotNull PsiElemen...
    method getTextUntilClass (line 110) | public static @NotNull String getTextUntilClass(@NotNull PsiElement ro...
    method getLongIdent (line 130) | public static @NotNull String getLongIdent(@Nullable PsiElement root) {
    method nextSiblingNode (line 149) | @NotNull
    method nextSibling (line 158) | public static @Nullable PsiElement nextSibling(@Nullable PsiElement el...
    method findImmediateChildrenOfClass (line 171) | public static @NotNull <T extends PsiElement> List<T> findImmediateChi...
    method findImmediateChildrenOfType (line 179) | @NotNull
    method findImmediateChildrenOfType (line 198) | @NotNull
    method findImmediateFirstChildOfType (line 203) | @Nullable
    method findImmediateLastChildOfType (line 210) | public static @Nullable PsiElement findImmediateLastChildOfType(@Nulla...
    method findImmediateFirstChildOfType (line 222) | @Nullable
    method findImmediateLastChildOfType (line 227) | @Nullable
    method findImmediateFirstChildOfClass (line 232) | @Nullable
    method findImmediateLastChildOfClass (line 246) | @Nullable
    method findImmediateFirstChildOfAnyClass (line 262) | public static @Nullable PsiElement findImmediateFirstChildOfAnyClass(@...
    method getQualifiedPath (line 279) | public static @NotNull String[] getQualifiedPath(@NotNull PsiElement e...
    method getQualifiedName (line 322) | @NotNull
    method getTypes (line 333) | @NotNull
    method computeAlias (line 340) | @Nullable
    method findPreviousSiblingsOrParentOfClass (line 368) | public static <T> @NotNull List<T> findPreviousSiblingsOrParentOfClass...
    method findImmediateNamedChildOfClass (line 385) | public static @Nullable <T extends PsiNamedElement> T findImmediateNam...
    method isPrevType (line 389) | public static boolean isPrevType(PsiElement root, ORTokenElementType e...
    method isInterfaceFile (line 395) | public static boolean isInterfaceFile(@Nullable PsiElement element) {
    method inInterface (line 400) | public static boolean inInterface(@Nullable PsiElement element) {
    method getNodeType (line 420) | public static @Nullable IElementType getNodeType(@Nullable PsiElement ...

FILE: src/main/java/com/reason/lang/core/psi/RPsiClass.java
  type RPsiClass (line 10) | public interface RPsiClass extends RPsiQualifiedPathElement, Navigatable...
    method getClassBody (line 11) | @Nullable
    method getFields (line 14) | @NotNull
    method getMethods (line 17) | @NotNull
    method getParameters (line 20) | @NotNull
    method getConstructor (line 23) | @Nullable
    method getInitializer (line 26) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiClassMethod.java
  type RPsiClassMethod (line 7) | public interface RPsiClassMethod extends RPsiQualifiedPathElement, Navig...
    method getSignature (line 8) | @Nullable RPsiSignature getSignature();

FILE: src/main/java/com/reason/lang/core/psi/RPsiConditional.java
  type RPsiConditional (line 7) | public interface RPsiConditional {
    method getCondition (line 8) | @Nullable
    method getThenExpression (line 11) | @Nullable
    method getElseExpression (line 14) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiException.java
  type RPsiException (line 7) | public interface RPsiException extends NavigatablePsiElement, RPsiStruct...
    method getAlias (line 8) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiExternal.java
  type RPsiExternal (line 7) | public interface RPsiExternal extends RPsiQualifiedPathElement, RPsiSign...
    method isFunction (line 8) | boolean isFunction();
    method getExternalName (line 10) | @NotNull

FILE: src/main/java/com/reason/lang/core/psi/RPsiField.java
  type RPsiField (line 6) | public interface RPsiField extends RPsiQualifiedPathElement {
    method getValue (line 7) | @Nullable RPsiFieldValue getValue();

FILE: src/main/java/com/reason/lang/core/psi/RPsiFunctor.java
  type RPsiFunctor (line 10) | public interface RPsiFunctor extends PsiNameIdentifierOwner, RPsiModule,...
    method getParameters (line 11) | @NotNull
    method getReturnType (line 14) | @Nullable
    method getConstraints (line 17) | @NotNull

FILE: src/main/java/com/reason/lang/core/psi/RPsiInclude.java
  type RPsiInclude (line 7) | public interface RPsiInclude extends RPsiStructuredElement, StubBasedPsi...
    method getQualifiedPath (line 8) | String[] getQualifiedPath();
    method getIncludePath (line 10) | @NotNull String getIncludePath();
    method useFunctor (line 12) | boolean useFunctor();

FILE: src/main/java/com/reason/lang/core/psi/RPsiInferredType.java
  type RPsiInferredType (line 6) | public interface RPsiInferredType extends PsiElement {
    method setInferredType (line 7) | void setInferredType(@NotNull RPsiSignature inferredType);
    method getInferredType (line 9) | @Nullable
    method hasInferredType (line 12) | boolean hasInferredType();

FILE: src/main/java/com/reason/lang/core/psi/RPsiInnerModule.java
  type RPsiInnerModule (line 10) | public interface RPsiInnerModule extends RPsiModule, StubBasedPsiElement...
    method getAlias (line 11) | @Nullable
    method getUnpack (line 14) | @Nullable
    method getAliasSymbol (line 17) | @Nullable
    method isComponent (line 20) | boolean isComponent();
    method isFunctorCall (line 22) | boolean isFunctorCall();
    method getFunctorCall (line 24) | @Nullable
    method isModuleType (line 27) | boolean isModuleType();
    method getModuleSignature (line 29) | @Nullable
    method getBody (line 32) | @Nullable
    method getConstraints (line 35) | @NotNull

FILE: src/main/java/com/reason/lang/core/psi/RPsiLanguageConverter.java
  type RPsiLanguageConverter (line 6) | public interface RPsiLanguageConverter {
    method asText (line 7) | @NotNull

FILE: src/main/java/com/reason/lang/core/psi/RPsiLet.java
  type RPsiLet (line 10) | public interface RPsiLet extends RPsiVar, RPsiSignatureElement, RPsiInfe...
    method getBinding (line 11) | @Nullable
    method getFunction (line 14) | @Nullable
    method isComponent (line 17) | boolean isComponent();
    method isRecord (line 19) | boolean isRecord();
    method isJsObject (line 21) | boolean isJsObject();
    method isScopeIdentifier (line 23) | boolean isScopeIdentifier();
    method getAlias (line 25) | @Nullable
    method getScopeChildren (line 28) | @NotNull
    method isDeconstruction (line 31) | boolean isDeconstruction();
    method getDeconstructedElements (line 33) | @NotNull
    method isPrivate (line 36) | boolean isPrivate();
    method getFirstClassModule (line 38) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiModule.java
  type RPsiModule (line 9) | public interface RPsiModule extends RPsiQualifiedPathElement, RPsiStruct...
    method getModuleName (line 10) | @Nullable
    method getBody (line 13) | @Nullable
    method isComponent (line 16) | boolean isComponent();
    method getMakeFunction (line 18) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiOCamlInjection.java
  class RPsiOCamlInjection (line 12) | public class RPsiOCamlInjection extends ASTWrapperPsiElement implements ...
    method RPsiOCamlInjection (line 13) | public RPsiOCamlInjection(@NotNull ASTNode node) {
    method getPresentation (line 18) | @Override

FILE: src/main/java/com/reason/lang/core/psi/RPsiOpen.java
  type RPsiOpen (line 7) | public interface RPsiOpen extends RPsiStructuredElement, StubBasedPsiEle...
    method getPath (line 8) | @NotNull String getPath();
    method useFunctor (line 10) | boolean useFunctor();

FILE: src/main/java/com/reason/lang/core/psi/RPsiParameterDeclaration.java
  type RPsiParameterDeclaration (line 8) | public interface RPsiParameterDeclaration extends PsiNameIdentifierOwner...
    method getDefaultValue (line 9) | @Nullable
    method isOptional (line 12) | boolean isOptional();
    method isNamed (line 14) | boolean isNamed();

FILE: src/main/java/com/reason/lang/core/psi/RPsiQualifiedPathElement.java
  type RPsiQualifiedPathElement (line 9) | public interface RPsiQualifiedPathElement extends PsiQualifiedNamedEleme...
    method getPath (line 10) | @Nullable String[] getPath();

FILE: src/main/java/com/reason/lang/core/psi/RPsiRecordField.java
  type RPsiRecordField (line 6) | public interface RPsiRecordField extends RPsiField, PsiNameIdentifierOwn...

FILE: src/main/java/com/reason/lang/core/psi/RPsiSignature.java
  type RPsiSignature (line 8) | public interface RPsiSignature extends PsiElement, RPsiLanguageConverter {
    method isFunction (line 9) | boolean isFunction();
    method getItems (line 11) | @NotNull List<RPsiSignatureItem> getItems();

FILE: src/main/java/com/reason/lang/core/psi/RPsiSignatureElement.java
  type RPsiSignatureElement (line 6) | public interface RPsiSignatureElement extends PsiElement {
    method getSignature (line 7) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/RPsiSignatureItem.java
  type RPsiSignatureItem (line 6) | public interface RPsiSignatureItem extends PsiNamedElement, RPsiLanguage...
    method isNamedItem (line 7) | boolean isNamedItem();
    method getName (line 9) | @Nullable String getName();
    method isOptional (line 11) | boolean isOptional();
    method getSignature (line 13) | @Nullable PsiElement getSignature();
    method getDefaultValue (line 15) | @Nullable PsiElement getDefaultValue();

FILE: src/main/java/com/reason/lang/core/psi/RPsiSignatureUtil.java
  class RPsiSignatureUtil (line 7) | public final class RPsiSignatureUtil {
    method RPsiSignatureUtil (line 8) | private RPsiSignatureUtil() {
    method getSignature (line 11) | public static @NotNull String getSignature(@Nullable PsiElement elemen...

FILE: src/main/java/com/reason/lang/core/psi/RPsiStructuredElement.java
  type RPsiStructuredElement (line 6) | public interface RPsiStructuredElement extends PsiElement {
    method canBeDisplayed (line 7) | default boolean canBeDisplayed() {

FILE: src/main/java/com/reason/lang/core/psi/RPsiType.java
  type RPsiType (line 10) | public interface RPsiType extends PsiNameIdentifierOwner, RPsiQualifiedP...
    method getBinding (line 11) | @Nullable
    method getVariants (line 14) | @NotNull
    method isJsObject (line 17) | boolean isJsObject();
    method isRecord (line 19) | boolean isRecord();
    method getParameters (line 21) | @Nullable
    method getJsObjectFields (line 24) | @NotNull
    method getRecordFields (line 27) | @NotNull
    method isAbstract (line 30) | boolean isAbstract();

FILE: src/main/java/com/reason/lang/core/psi/RPsiVal.java
  type RPsiVal (line 6) | public interface RPsiVal extends RPsiVar, RPsiQualifiedPathElement, RPsi...

FILE: src/main/java/com/reason/lang/core/psi/RPsiVar.java
  type RPsiVar (line 12) | public interface RPsiVar extends RPsiQualifiedPathElement, PsiNameIdenti...
    method isFunction (line 14) | boolean isFunction();
    method getJsObjectFields (line 16) | @NotNull
    method getRecordFields (line 19) | @NotNull
    method isAnonymous (line 25) | boolean isAnonymous();

FILE: src/main/java/com/reason/lang/core/psi/impl/ORASTFactory.java
  class ORASTFactory (line 12) | public class ORASTFactory<T extends ORLangTypes> extends ASTFactory {
    method ORASTFactory (line 15) | public ORASTFactory(T types) {
    method createComposite (line 19) | @Override
    method createLeaf (line 250) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiAnnotation.java
  class RPsiAnnotation (line 10) | public class RPsiAnnotation extends ORCompositePsiElement<ORLangTypes> i...
    method RPsiAnnotation (line 11) | protected RPsiAnnotation(@NotNull ORLangTypes types, @NotNull IElement...
    method getNameIdentifier (line 15) | @Override
    method getName (line 20) | @Override
    method setName (line 26) | @Override
    method getValue (line 31) | public @Nullable PsiElement getValue() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiArray.java
  class RPsiArray (line 7) | public class RPsiArray extends ORCompositePsiElement<ORLangTypes> {
    method RPsiArray (line 8) | protected RPsiArray(@NotNull ORLangTypes types, @NotNull IElementType ...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiAssert.java
  class RPsiAssert (line 9) | public class RPsiAssert extends ORCompositePsiElement<ORLangTypes> {
    method RPsiAssert (line 11) | protected RPsiAssert(@NotNull ORLangTypes types, @NotNull IElementType...
    method getAssertion (line 15) | public @Nullable PsiElement getAssertion() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiBinaryCondition.java
  class RPsiBinaryCondition (line 7) | public class RPsiBinaryCondition extends ORCompositePsiElement<ORLangTyp...
    method RPsiBinaryCondition (line 9) | protected RPsiBinaryCondition(@NotNull ORLangTypes types, @NotNull IEl...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiClassConstructor.java
  class RPsiClassConstructor (line 7) | public class RPsiClassConstructor extends ORCompositePsiElement<ORLangTy...
    method RPsiClassConstructor (line 8) | protected RPsiClassConstructor(@NotNull ORLangTypes types, @NotNull IE...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiClassField.java
  class RPsiClassField (line 15) | public class RPsiClassField extends ORCompositePsiElement<ORLangTypes> i...
    method RPsiClassField (line 16) | protected RPsiClassField(@NotNull ORLangTypes types, @NotNull IElement...
    method getNameIdentifier (line 20) | @Override
    method getName (line 25) | @Override
    method setName (line 31) | @Override
    method getPresentation (line 36) | public ItemPresentation getPresentation() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiClassImpl.java
  class RPsiClassImpl (line 19) | public class RPsiClassImpl extends RPsiTokenStub<ORLangTypes, RPsiClass,...
    method RPsiClassImpl (line 21) | public RPsiClassImpl(@NotNull ORLangTypes types, @NotNull ASTNode node) {
    method RPsiClassImpl (line 25) | public RPsiClassImpl(@NotNull ORLangTypes types, @NotNull RsiClassStub...
    method getNameIdentifier (line 31) | public @Nullable PsiElement getNameIdentifier() {
    method getName (line 35) | @Override
    method setName (line 41) | @Override
    method getPath (line 48) | @Override
    method getQualifiedName (line 58) | @Override
    method getClassBody (line 69) | @Override
    method getFields (line 74) | @Override
    method getMethods (line 79) | @Override
    method getParameters (line 84) | @Override
    method getConstructor (line 89) | @Override
    method getInitializer (line 94) | @Override
    method getPresentation (line 100) | public ItemPresentation getPresentation() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiClassInitializer.java
  class RPsiClassInitializer (line 7) | public class RPsiClassInitializer extends ORCompositePsiElement<ORLangTy...
    method RPsiClassInitializer (line 8) | protected RPsiClassInitializer(@NotNull ORLangTypes types, @NotNull IE...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiClassMethodImpl.java
  class RPsiClassMethodImpl (line 17) | public class RPsiClassMethodImpl extends RPsiTokenStub<ORLangTypes, RPsi...
    method RPsiClassMethodImpl (line 19) | public RPsiClassMethodImpl(@NotNull ORLangTypes types, @NotNull ASTNod...
    method RPsiClassMethodImpl (line 23) | public RPsiClassMethodImpl(@NotNull ORLangTypes types, @NotNull RsiCla...
    method getNameIdentifier (line 28) | @Override
    method getQualifiedName (line 34) | @Override
    method getPath (line 44) | @Override
    method getName (line 55) | @Override
    method setName (line 61) | @Override
    method getSignature (line 66) | public @Nullable RPsiSignature getSignature() {
    method getPresentation (line 70) | public ItemPresentation getPresentation() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiConstraints.java
  class RPsiConstraints (line 7) | public class RPsiConstraints extends ORCompositePsiElement<ORLangTypes> {
    method RPsiConstraints (line 8) | protected RPsiConstraints(@NotNull ORLangTypes types, @NotNull IElemen...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDeconstruction.java
  class RPsiDeconstruction (line 10) | public class RPsiDeconstruction extends ORCompositePsiElement<ORLangType...
    method RPsiDeconstruction (line 12) | protected RPsiDeconstruction(@NotNull ORLangTypes types, @NotNull IEle...
    method getDeconstructedElements (line 16) | public @NotNull List<PsiElement> getDeconstructedElements() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDefaultValue.java
  class RPsiDefaultValue (line 7) | public class RPsiDefaultValue extends ORCompositePsiElement<ORLangTypes> {
    method RPsiDefaultValue (line 8) | public RPsiDefaultValue(@NotNull ORLangTypes types, @NotNull IElementT...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDirective.java
  class RPsiDirective (line 7) | public class RPsiDirective extends ORCompositePsiElement<ORLangTypes> {
    method RPsiDirective (line 8) | protected RPsiDirective(@NotNull ORLangTypes types, @NotNull IElementT...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDuneField.java
  class RPsiDuneField (line 17) | public class RPsiDuneField extends ORCompositePsiElement<DuneTypes> impl...
    method RPsiDuneField (line 18) | public RPsiDuneField(@NotNull DuneTypes types, @NotNull IElementType e...
    method getNameIdentifier (line 22) | @Override
    method getName (line 29) | @Override
    method setName (line 35) | @Override
    method getValue (line 40) | public @NotNull String getValue() {
    method getPresentation (line 46) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDuneFields.java
  class RPsiDuneFields (line 8) | public class RPsiDuneFields extends ORCompositePsiElement<DuneTypes> {
    method RPsiDuneFields (line 9) | public RPsiDuneFields(@NotNull DuneTypes types, @NotNull IElementType ...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDuneSExpr.java
  class RPsiDuneSExpr (line 8) | public class RPsiDuneSExpr extends ORCompositePsiElement<DuneTypes> {
    method RPsiDuneSExpr (line 9) | public RPsiDuneSExpr(@NotNull DuneTypes types, @NotNull IElementType e...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDuneStanza.java
  class RPsiDuneStanza (line 17) | public class RPsiDuneStanza extends ORCompositePsiElement<DuneTypes> imp...
    method RPsiDuneStanza (line 18) | public RPsiDuneStanza(@NotNull DuneTypes types, @NotNull IElementType ...
    method getNameIdentifier (line 22) | @Override
    method getName (line 31) | @Override
    method setName (line 37) | @Override
    method getFields (line 42) | public @NotNull Collection<RPsiDuneField> getFields() {
    method getField (line 47) | public @Nullable RPsiDuneField getField(@NotNull String name) {
    method getPresentation (line 56) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiDuneVar.java
  class RPsiDuneVar (line 8) | public class RPsiDuneVar extends ORCompositePsiElement<DuneTypes> {
    method RPsiDuneVar (line 9) | public RPsiDuneVar(@NotNull DuneTypes types, @NotNull IElementType ele...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiExceptionImpl.java
  class RPsiExceptionImpl (line 17) | public class RPsiExceptionImpl extends RPsiTokenStub<ORLangTypes, RPsiEx...
    method RPsiExceptionImpl (line 19) | public RPsiExceptionImpl(@NotNull ORLangTypes types, @NotNull ASTNode ...
    method RPsiExceptionImpl (line 23) | public RPsiExceptionImpl(@NotNull ORLangTypes types, @NotNull PsiExcep...
    method getNameIdentifier (line 29) | @Override
    method getName (line 34) | @Override
    method setName (line 45) | @Override
    method getPath (line 52) | @Override
    method getQualifiedName (line 62) | @Override
    method getTextOffset (line 73) | @Override
    method getAlias (line 79) | @Override
    method getPresentation (line 90) | @Override
    method toString (line 110) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiExternalImpl.java
  class RPsiExternalImpl (line 22) | public class RPsiExternalImpl extends RPsiTokenStub<ORLangTypes, RPsiExt...
    method RPsiExternalImpl (line 24) | public RPsiExternalImpl(@NotNull ORLangTypes types, @NotNull ASTNode n...
    method RPsiExternalImpl (line 28) | public RPsiExternalImpl(@NotNull ORLangTypes types, @NotNull PsiExtern...
    method getNameIdentifier (line 34) | @Override
    method getName (line 44) | @Override
    method setName (line 70) | @Override
    method getPath (line 77) | @Override
    method getQualifiedName (line 87) | @Override
    method getTextOffset (line 98) | @Override
    method getSignature (line 104) | @Override
    method getRealName (line 109) | private @NotNull String getRealName() {
    method isFunction (line 114) | @Override
    method getExternalName (line 125) | @Override
    method getPresentation (line 138) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFieldValue.java
  class RPsiFieldValue (line 7) | public class RPsiFieldValue extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFieldValue (line 8) | protected RPsiFieldValue(@NotNull ORLangTypes types, @NotNull IElement...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFirstClass.java
  class RPsiFirstClass (line 9) | public class RPsiFirstClass extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFirstClass (line 10) | protected RPsiFirstClass(@NotNull ORLangTypes types, @NotNull IElement...
    method getFirstClassModuleSymbol (line 14) | public @Nullable RPsiUpperSymbol getFirstClassModuleSymbol() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiForLoop.java
  class RPsiForLoop (line 7) | public class RPsiForLoop extends ORCompositePsiElement<ORLangTypes> {
    method RPsiForLoop (line 8) | protected RPsiForLoop(@NotNull ORLangTypes types, @NotNull IElementTyp...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunSwitch.java
  class RPsiFunSwitch (line 10) | public class RPsiFunSwitch extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunSwitch (line 11) | protected RPsiFunSwitch(@NotNull ORLangTypes types, @NotNull IElementT...
    method getPatterns (line 15) | public @NotNull List<RPsiPatternMatch> getPatterns() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunction.java
  class RPsiFunction (line 11) | public class RPsiFunction extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunction (line 12) | protected RPsiFunction(@NotNull ORLangTypes types, @NotNull IElementTy...
    method getParameters (line 16) | public @NotNull List<RPsiParameterDeclaration> getParameters() {
    method getBody (line 21) | public @Nullable RPsiFunctionBody getBody() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctionBody.java
  class RPsiFunctionBody (line 7) | public class RPsiFunctionBody extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunctionBody (line 8) | protected RPsiFunctionBody(@NotNull ORLangTypes types, @NotNull IEleme...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctionCall.java
  class RPsiFunctionCall (line 10) | public class RPsiFunctionCall extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunctionCall (line 11) | protected RPsiFunctionCall(@NotNull ORLangTypes types, @NotNull IEleme...
    method getName (line 15) | @Override
    method getParameters (line 21) | public @NotNull List<RPsiParameterReference> getParameters() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctorBinding.java
  class RPsiFunctorBinding (line 7) | public class RPsiFunctorBinding extends ORCompositePsiElement<ORLangType...
    method RPsiFunctorBinding (line 8) | protected RPsiFunctorBinding(@NotNull ORLangTypes types, @NotNull IEle...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctorCall.java
  class RPsiFunctorCall (line 13) | public class RPsiFunctorCall extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunctorCall (line 14) | protected RPsiFunctorCall(@NotNull ORLangTypes types, @NotNull IElemen...
    method getReferenceIdentifier (line 18) | public @Nullable RPsiUpperSymbol getReferenceIdentifier() {
    method getTextOffset (line 22) | @Override
    method getName (line 28) | @Override
    method getParameters (line 34) | public @NotNull List<RPsiParameterReference> getParameters() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctorImpl.java
  class RPsiFunctorImpl (line 18) | public class RPsiFunctorImpl extends RPsiTokenStub<ORLangTypes, RPsiModu...
    method RPsiFunctorImpl (line 20) | public RPsiFunctorImpl(@NotNull ORLangTypes types, @NotNull ASTNode no...
    method RPsiFunctorImpl (line 24) | public RPsiFunctorImpl(@NotNull ORLangTypes types, @NotNull PsiModuleS...
    method getNameIdentifier (line 30) | @Override
    method getTextOffset (line 35) | @Override
    method getName (line 41) | @Override
    method setName (line 52) | @Override
    method getPath (line 65) | @Override
    method getQualifiedName (line 75) | @Override
    method isComponent (line 86) | @Override
    method getMakeFunction (line 91) | @Override
    method getBody (line 96) | @Override
    method getModuleName (line 101) | @Override
    method getParameters (line 107) | @Override
    method getReturnType (line 113) | @Override
    method getConstraints (line 124) | @Override
    method getPresentation (line 136) | public ItemPresentation getPresentation() {
    method toString (line 155) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiFunctorResult.java
  class RPsiFunctorResult (line 8) | public class RPsiFunctorResult extends ORCompositePsiElement<ORLangTypes> {
    method RPsiFunctorResult (line 9) | protected RPsiFunctorResult(@NotNull ORLangTypes types, @NotNull IElem...
    method getModuleType (line 13) | public @Nullable RPsiUpperSymbol getModuleType() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiGuard.java
  class RPsiGuard (line 8) | public class RPsiGuard extends ORCompositePsiElement<ORLangTypes> {
    method RPsiGuard (line 9) | protected RPsiGuard(@NotNull ORLangTypes types, @NotNull IElementType ...
    method getCondition (line 13) | @Nullable

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiIfStatement.java
  class RPsiIfStatement (line 10) | public class RPsiIfStatement extends ORCompositePsiElement<ORLangTypes> ...
    method RPsiIfStatement (line 11) | protected RPsiIfStatement(@NotNull ORLangTypes types, @NotNull IElemen...
    method getCondition (line 15) | @Nullable
    method getThenExpression (line 20) | @Override
    method getElseExpression (line 25) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiIncludeImpl.java
  class RPsiIncludeImpl (line 20) | public class RPsiIncludeImpl extends RPsiTokenStub<ORLangTypes, RPsiIncl...
    method RPsiIncludeImpl (line 22) | public RPsiIncludeImpl(@NotNull ORLangTypes types, @NotNull ASTNode no...
    method RPsiIncludeImpl (line 26) | public RPsiIncludeImpl(@NotNull ORLangTypes types, @NotNull PsiInclude...
    method getQualifiedPath (line 31) | @Override public String[] getQualifiedPath() {
    method getIncludePath (line 40) | @Override
    method useFunctor (line 62) | @Override
    method getPresentation (line 68) | @Override
    method canBeDisplayed (line 73) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiInherit.java
  class RPsiInherit (line 13) | public class RPsiInherit extends ORCompositePsiElement<ORLangTypes> {
    method RPsiInherit (line 14) | protected RPsiInherit(@NotNull ORLangTypes types, @NotNull IElementTyp...
    method getClassTypeIdentifier (line 18) | public @Nullable PsiElement getClassTypeIdentifier() {
    method getParameters (line 22) | public @NotNull List<PsiElement> getParameters() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiInnerModuleImpl.java
  class RPsiInnerModuleImpl (line 20) | public class RPsiInnerModuleImpl extends RPsiTokenStub<ORLangTypes, RPsi...
    method RPsiInnerModuleImpl (line 22) | public RPsiInnerModuleImpl(@NotNull ORLangTypes types, @NotNull ASTNod...
    method RPsiInnerModuleImpl (line 26) | public RPsiInnerModuleImpl(@NotNull ORLangTypes types, @NotNull PsiMod...
    method getNameIdentifier (line 32) | public @Nullable PsiElement getNameIdentifier() {
    method getTextOffset (line 36) | @Override
    method getName (line 42) | @Override
    method setName (line 53) | @Override
    method getPath (line 66) | @Override
    method getQualifiedName (line 76) | @Override
    method getModuleName (line 87) | @Override
    method getFunctorCall (line 93) | @Override
    method getBody (line 98) | @Override
    method getConstraints (line 103) | @Override
    method getModuleSignature (line 109) | @Override
    method isModuleType (line 119) | @Override
    method isComponent (line 130) | @Override
    method getMakeFunction (line 140) | @Override
    method isFunctorCall (line 149) | @Override
    method getAliasSymbol (line 159) | public @Nullable RPsiUpperSymbol getAliasSymbol() {
    method getAlias (line 164) | @Override
    method getUnpack (line 179) | @Override
    method getPresentation (line 184) | public ItemPresentation getPresentation() {
    method toString (line 207) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiInterpolation.java
  class RPsiInterpolation (line 7) | public class RPsiInterpolation extends ORCompositePsiElement<ORLangTypes> {
    method RPsiInterpolation (line 8) | protected RPsiInterpolation(@NotNull ORLangTypes types, @NotNull IElem...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiInterpolationReference.java
  class RPsiInterpolationReference (line 7) | public class RPsiInterpolationReference extends ORCompositePsiElement<OR...
    method RPsiInterpolationReference (line 8) | protected RPsiInterpolationReference(@NotNull ORLangTypes types, @NotN...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiJsObject.java
  class RPsiJsObject (line 15) | public class RPsiJsObject extends ORCompositePsiElement<ORLangTypes> imp...
    method RPsiJsObject (line 16) | protected RPsiJsObject(@NotNull ORLangTypes types, @NotNull IElementTy...
    method getFields (line 20) | public @NotNull List<RPsiObjectField> getFields() {
    method asText (line 24) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLeafPropertyName.java
  class RPsiLeafPropertyName (line 10) | public class RPsiLeafPropertyName extends LeafPsiElement {
    method RPsiLeafPropertyName (line 11) | public RPsiLeafPropertyName(@NotNull IElementType type, CharSequence t...
    method getReference (line 15) | @Override
    method toString (line 20) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLetAttribute.java
  class RPsiLetAttribute (line 8) | public class RPsiLetAttribute extends ORCompositePsiElement<ORLangTypes> {
    method RPsiLetAttribute (line 9) | protected RPsiLetAttribute(@NotNull ORLangTypes types, @NotNull IEleme...
    method getValue (line 13) | @Nullable String getValue() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLetBinding.java
  class RPsiLetBinding (line 7) | public class RPsiLetBinding extends ORCompositePsiElement<ORLangTypes> {
    method RPsiLetBinding (line 8) | public RPsiLetBinding(@NotNull ORLangTypes types, @NotNull IElementTyp...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLetImpl.java
  class RPsiLetImpl (line 24) | public class RPsiLetImpl extends RPsiTokenStub<ORLangTypes, RPsiLet, Psi...
    method RPsiLetImpl (line 28) | public RPsiLetImpl(@NotNull ORLangTypes types, @NotNull ASTNode node) {
    method RPsiLetImpl (line 32) | public RPsiLetImpl(@NotNull ORLangTypes types, @NotNull PsiLetStub stu...
    method getNameIdentifier (line 38) | public @Nullable PsiElement getNameIdentifier() {
    method getName (line 42) | @Override
    method setName (line 56) | @Override
    method getTextOffset (line 69) | @Override
    method getPath (line 76) | @Override
    method getQualifiedName (line 86) | @Override
    method getBinding (line 97) | @Override
    method isScopeIdentifier (line 102) | @Override
    method getScopeChildren (line 107) | @Override
    method getAlias (line 123) | @Override
    method getSignature (line 138) | @Override
    method isFunction (line 149) | @Override
    method getFunction (line 170) | public @Nullable RPsiFunction getFunction() {
    method isComponent (line 181) | @Override
    method isRecord (line 199) | @Override
    method isJsObject (line 204) | @Override
    method getJsObjectFields (line 210) | @Override
    method getRecordFields (line 218) | @Override
    method isRecursive (line 226) | private boolean isRecursive() {
    method getInferredType (line 238) | @Override
    method setInferredType (line 243) | @Override
    method hasInferredType (line 248) | @Override
    method isPrivate (line 254) | @Override
    method getFirstClassModule (line 261) | @Override
    method isAnonymous (line 266) | @Override
    method isDeconstruction (line 272) | @Override
    method getDeconstructedElements (line 277) | @Override
    method canBeDisplayed (line 284) | @Override
    method getPresentation (line 308) | @Nullable
    method toString (line 345) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLiteralString.java
  class RPsiLiteralString (line 11) | public class RPsiLiteralString extends LeafPsiElement {
    method RPsiLiteralString (line 14) | public RPsiLiteralString(@NotNull ORLangTypes types, @NotNull IElement...
    method getReference (line 19) | @Override
    method toString (line 24) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLocalOpen.java
  class RPsiLocalOpen (line 7) | public class RPsiLocalOpen extends ORCompositePsiElement<ORLangTypes> {
    method RPsiLocalOpen (line 8) | protected RPsiLocalOpen(@NotNull ORLangTypes types, @NotNull IElementT...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLowerName.java
  class RPsiLowerName (line 11) | public class RPsiLowerName extends ORCompositePsiElement<ORLangTypes> im...
    method RPsiLowerName (line 13) | protected RPsiLowerName(@NotNull ORLangTypes types, @NotNull IElementT...
    method getNameIdentifier (line 19) | @Override
    method getName (line 24) | @Override
    method setName (line 31) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiLowerSymbol.java
  class RPsiLowerSymbol (line 9) | public class RPsiLowerSymbol extends LeafPsiElement {
    method RPsiLowerSymbol (line 13) | public RPsiLowerSymbol(@NotNull ORLangTypes types, @NotNull IElementTy...
    method getReference (line 19) | @Override
    method toString (line 24) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMacro.java
  class RPsiMacro (line 11) | public class RPsiMacro extends ORCompositePsiElement<ORLangTypes> {
    method RPsiMacro (line 13) | protected RPsiMacro(@NotNull ORLangTypes types, @NotNull IElementType ...
    method getName (line 17) | @Override
    method getContent (line 23) | public @Nullable RPsiMacroBody getContent() {
    method isRoot (line 27) | public boolean isRoot() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMacroBody.java
  class RPsiMacroBody (line 12) | public class RPsiMacroBody extends ORCompositePsiElement<ORLangTypes> im...
    method RPsiMacroBody (line 13) | protected RPsiMacroBody(@NotNull ORLangTypes types, @NotNull IElementT...
    method isValidHost (line 17) | @Override
    method updateText (line 22) | @Override
    method createLiteralTextEscaper (line 31) | @Override
    method getMacroTextRange (line 41) | public @Nullable TextRange getMacroTextRange() {

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMacroName.java
  class RPsiMacroName (line 7) | public class RPsiMacroName extends ORCompositePsiElement<ORLangTypes> {
    method RPsiMacroName (line 8) | protected RPsiMacroName(@NotNull ORLangTypes types, @NotNull IElementT...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMethodCall.java
  class RPsiMethodCall (line 7) | public class RPsiMethodCall extends ORCompositePsiElement<ORLangTypes> {
    method RPsiMethodCall (line 8) | protected RPsiMethodCall(@NotNull ORLangTypes types, @NotNull IElement...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMixinField.java
  class RPsiMixinField (line 7) | public class RPsiMixinField extends ORCompositePsiElement<ORLangTypes> {
    method RPsiMixinField (line 8) | protected RPsiMixinField(@NotNull ORLangTypes types, @NotNull IElement...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiModuleBinding.java
  class RPsiModuleBinding (line 7) | public class RPsiModuleBinding extends ORCompositePsiElement<ORLangTypes> {
    method RPsiModuleBinding (line 8) | public RPsiModuleBinding(@NotNull ORLangTypes types, @NotNull IElement...

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiModuleSignature.java
  class RPsiModuleSignature (line 23) | public class RPsiModuleSignature extends ORCompositePsiElement<ORLangTyp...
    method RPsiModuleSignature (line 26) | protected RPsiModuleSignature(@NotNull ORLangTypes types, @NotNull IEl...
    method getNameIdentifier (line 30) | public @Nullable RPsiUpperSymbol getNameIdentifier() {
    method getName (line 39) | @Override
    method getQName (line 45) | public @NotNull String getQName() { // used when first class module si...
    method getPresentation (line 57) | @Override
    method asText (line 78) | @Override
    method isFunction (line 83) | @Override
    method getItems (line 88) | @Override

FILE: src/main/java/com/reason/lang/core/psi/impl/RPsiMultiLineInterpolator.java
  class RPsiMultiLineInterpolator (line 7) | public class RPsiMultiLi
Condensed preview — 873 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,329K chars).
[
  {
    "path": ".github/FUNDING.md",
    "chars": 66,
    "preview": "github: giraud\ncustom: \"https://www.paypal.com/paypalme/rvgiraud\"\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 66,
    "preview": "github: giraud\ncustom: \"https://www.paypal.com/paypalme/rvgiraud\"\n"
  },
  {
    "path": ".github/workflows/gradle.yml",
    "chars": 686,
    "preview": "# This workflow will build a Java project with Gradle\n# For more information see: https://help.github.com/actions/langua"
  },
  {
    "path": ".github/workflows/website-deploy.yml",
    "chars": 1696,
    "preview": "name: Deploy Website\n\non:\n  pull_request:\n    branches: [master]\n  push:\n    branches: [master]\n\njobs:\n  checks:\n    if:"
  },
  {
    "path": ".gitignore",
    "chars": 176,
    "preview": ".gradle/\n!.idea/\n.idea/*\n.intellijPlatform/*\n!.idea/codeStyles/\n!.idea/google-java-format.xml\nout/\nbuild/\n*.iml\nidea-fle"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 49535,
    "preview": "# Changelog\n\n> **Tags:**\n> - :boom:       [Breaking Change]\n> - :rocket:     [New Feature]\n> - :bug:        [Bug Fix]\n> "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 182,
    "preview": "# Contributing\n\nContributions are welcome and encouraged.\n\nPlease see the [How to Contribute](https://giraud.github.io/r"
  },
  {
    "path": "ISSUE_TEMPLATE.md",
    "chars": 35,
    "preview": "plugin version: \n\n### Description\n\n"
  },
  {
    "path": "LICENSE",
    "chars": 1063,
    "preview": "MIT License\n\nCopyright (c) 2017 Giraud\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
  },
  {
    "path": "README.md",
    "chars": 4157,
    "preview": "# Reason IDEA Plugin\n\n**!!! THIS PROJECT IS IN MAINTENANCE MODE !!!**\n\n[**giraud.github.io/reasonml-idea-plugin**](https"
  },
  {
    "path": "build.gradle",
    "chars": 2805,
    "preview": "import org.jetbrains.intellij.platform.gradle.TestFrameworkType\n\nplugins {\n    id('java')\n    id('org.jetbrains.intellij"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 253,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 1261,
    "preview": "org.gradle.jvmargs=-XX:MaxHeapSize=512m -Xms512m -Xmx1g\n\npluginGroup   = com.reason\npluginName    = reasonml-plugin-idea"
  },
  {
    "path": "gradlew",
    "chars": 8739,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2966,
    "preview": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (th"
  },
  {
    "path": "settings.gradle",
    "chars": 42,
    "preview": "rootProject.name = 'reasonml-idea-plugin'\n"
  },
  {
    "path": "src/main/java/com/reason/FileHelper.java",
    "chars": 3585,
    "preview": "package com.reason;\n\nimport com.intellij.json.*;\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.ope"
  },
  {
    "path": "src/main/java/com/reason/comp/CliType.java",
    "chars": 1014,
    "preview": "package com.reason.comp;\n\nimport com.reason.comp.ORCompiler.*;\nimport org.jetbrains.annotations.*;\n\npublic interface Cli"
  },
  {
    "path": "src/main/java/com/reason/comp/CompilerOutputAnalyzer.java",
    "chars": 505,
    "preview": "package com.reason.comp;\n\nimport com.reason.ide.annotations.*;\nimport org.jetbrains.annotations.*;\n\nimport java.util.*;\n"
  },
  {
    "path": "src/main/java/com/reason/comp/CompilerOutputListener.java",
    "chars": 2407,
    "preview": "package com.reason.comp;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.openapi.application.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/comp/ORCompiler.java",
    "chars": 1030,
    "preview": "package com.reason.comp;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.vfs.*;\nimport jpsplugin.com"
  },
  {
    "path": "src/main/java/com/reason/comp/ORCompilerConfigManager.java",
    "chars": 2484,
    "preview": "package com.reason.comp;\n\nimport com.intellij.openapi.components.*;\nimport com.intellij.openapi.project.*;\nimport com.in"
  },
  {
    "path": "src/main/java/com/reason/comp/ORCompilerManager.java",
    "chars": 5472,
    "preview": "package com.reason.comp;\n\nimport com.intellij.openapi.components.*;\nimport com.intellij.openapi.project.*;\nimport com.in"
  },
  {
    "path": "src/main/java/com/reason/comp/ORCompilerOutputAnalyzer.java",
    "chars": 3079,
    "preview": "package com.reason.comp;\n\nimport com.reason.ide.annotations.*;\nimport jpsplugin.com.reason.*;\nimport org.jetbrains.annot"
  },
  {
    "path": "src/main/java/com/reason/comp/ORConstants.java",
    "chars": 702,
    "preview": "package com.reason.comp;\n\npublic class ORConstants {\n    public static final String RESCRIPT_EXE_NAME = \"rescript\";\n    "
  },
  {
    "path": "src/main/java/com/reason/comp/ORPlatform.java",
    "chars": 4050,
    "preview": "package com.reason.comp;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.util.*;\nimport com.intellij"
  },
  {
    "path": "src/main/java/com/reason/comp/ORResolvedCompiler.java",
    "chars": 1431,
    "preview": "package com.reason.comp;\n\nimport com.intellij.openapi.vfs.*;\nimport jpsplugin.com.reason.*;\nimport org.jetbrains.annotat"
  },
  {
    "path": "src/main/java/com/reason/comp/ProcessFinishedListener.java",
    "chars": 1403,
    "preview": "package com.reason.comp;\n\nimport com.intellij.execution.process.*;\nimport org.jetbrains.annotations.*;\n\npublic class Pro"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsColoredProcessHandler.java",
    "chars": 1376,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsCompiler.java",
    "chars": 5724,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.codeInsight.daemon.*;\nimport com.intellij.execution.process.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsConfig.java",
    "chars": 3125,
    "preview": "package com.reason.comp.bs;\n\nimport org.jetbrains.annotations.*;\n\nimport java.util.*;\n\npublic class BsConfig {\n    priva"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsConfigReader.java",
    "chars": 8733,
    "preview": "package com.reason.comp.bs;\n\nimport static jpsplugin.com.reason.StringUtil.toFirstUpper;\n\nimport com.google.gson.JsonArr"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsFormatProcess.java",
    "chars": 3621,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.openapi.components.*;\nimport com.intellij.openapi.editor.ex.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsLineProcessor.java",
    "chars": 8558,
    "preview": "package com.reason.comp.bs;\n\nimport com.reason.comp.*;\nimport com.reason.ide.annotations.*;\nimport jpsplugin.com.reason."
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsNotification.java",
    "chars": 1692,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.ide.browsers.*;\nimport com.intellij.notification.*;\nimport com.intellij"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsPlatform.java",
    "chars": 3417,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intell"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsProcess.java",
    "chars": 4011,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.codeInsight.daemon.*;\nimport com.intellij.execution.*;\nimport com.intel"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/BsResolvedCompiler.java",
    "chars": 498,
    "preview": "package com.reason.comp.bs;\n\nimport com.intellij.openapi.vfs.*;\nimport com.reason.comp.*;\nimport org.jetbrains.annotatio"
  },
  {
    "path": "src/main/java/com/reason/comp/bs/Ninja.java",
    "chars": 10728,
    "preview": "package com.reason.comp.bs;\n\nimport org.jetbrains.annotations.*;\n\nimport java.util.*;\nimport java.util.stream.*;\n\nimport"
  },
  {
    "path": "src/main/java/com/reason/comp/dune/DuneCompiler.java",
    "chars": 4873,
    "preview": "package com.reason.comp.dune;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.openapi.components.*;\nimport"
  },
  {
    "path": "src/main/java/com/reason/comp/dune/DuneOutputAnalyzer.java",
    "chars": 2892,
    "preview": "package com.reason.comp.dune;\n\nimport com.reason.comp.*;\nimport jpsplugin.com.reason.*;\nimport org.jetbrains.annotations"
  },
  {
    "path": "src/main/java/com/reason/comp/dune/DunePlatform.java",
    "chars": 1454,
    "preview": "package com.reason.comp.dune;\n\nimport com.intellij.openapi.module.Module;\nimport com.intellij.openapi.project.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/comp/dune/DuneProcess.java",
    "chars": 3082,
    "preview": "package com.reason.comp.dune;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/Esy.java",
    "chars": 1313,
    "preview": "package com.reason.comp.esy;\n\nimport com.intellij.openapi.vfs.LocalFileSystem;\nimport com.intellij.openapi.vfs.VirtualFi"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyCompiler.java",
    "chars": 3475,
    "preview": "package com.reason.comp.esy;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.execution.ui.*;\nimport com.in"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyConstants.java",
    "chars": 216,
    "preview": "package com.reason.comp.esy;\n\npublic class EsyConstants {\n\n  public static final String ESY_CONFIG_FILENAME = \"package.j"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyNotification.java",
    "chars": 795,
    "preview": "package com.reason.comp.esy;\n\nimport static com.intellij.notification.NotificationType.ERROR;\n\nimport com.intellij.notif"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyPackageJson.java",
    "chars": 1837,
    "preview": "package com.reason.comp.esy;\n\nimport com.google.gson.*;\nimport com.intellij.framework.detection.*;\nimport com.intellij.o"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyPlatform.java",
    "chars": 1672,
    "preview": "package com.reason.comp.esy;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intel"
  },
  {
    "path": "src/main/java/com/reason/comp/esy/EsyProcess.java",
    "chars": 3727,
    "preview": "package com.reason.comp.esy;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport co"
  },
  {
    "path": "src/main/java/com/reason/comp/ocaml/OcamlFormatProcess.java",
    "chars": 3479,
    "preview": "package com.reason.comp.ocaml;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/comp/ocaml/OpamCommandLine.java",
    "chars": 2863,
    "preview": "package com.reason.comp.ocaml;\n\nimport com.intellij.execution.configurations.*;\nimport com.intellij.openapi.module.Modul"
  },
  {
    "path": "src/main/java/com/reason/comp/ocaml/OpamEnv.java",
    "chars": 1169,
    "preview": "package com.reason.comp.ocaml;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.components.*;\nimp"
  },
  {
    "path": "src/main/java/com/reason/comp/ocaml/OpamProcess.java",
    "chars": 7450,
    "preview": "package com.reason.comp.ocaml;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResCompiler.java",
    "chars": 6160,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.codeInsight.daemon.*;\nimport com.intellij.execution.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResConfigReader.java",
    "chars": 556,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.openapi.vfs.*;\nimport com.reason.comp.bs.*;\nimport org.jetbrains."
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResFormatProcess.java",
    "chars": 3284,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.openapi.components.*;\nimport com.intellij.openapi.editor.ex.*;\nim"
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResPlatform.java",
    "chars": 3476,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.util.io.FileUtil;\n"
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResProcessHandler.java",
    "chars": 940,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/ResResolvedCompiler.java",
    "chars": 542,
    "preview": "package com.reason.comp.rescript;\n\nimport com.intellij.openapi.vfs.*;\nimport com.reason.comp.*;\nimport com.reason.comp.b"
  },
  {
    "path": "src/main/java/com/reason/comp/rescript/RescriptOutputAnalyzer.java",
    "chars": 3767,
    "preview": "package com.reason.comp.rescript;\n\nimport com.reason.comp.*;\nimport jpsplugin.com.reason.*;\nimport org.jetbrains.annotat"
  },
  {
    "path": "src/main/java/com/reason/hints/InsightManager.java",
    "chars": 4986,
    "preview": "package com.reason.hints;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.components.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/hints/Rincewind.java",
    "chars": 866,
    "preview": "package com.reason.hints;\n\nimport org.jetbrains.annotations.*;\n\nimport java.util.regex.*;\n\npublic class Rincewind {\n    "
  },
  {
    "path": "src/main/java/com/reason/hints/RincewindDownloader.java",
    "chars": 4554,
    "preview": "package com.reason.hints;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.fileEditor.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/hints/RincewindProcess.java",
    "chars": 7428,
    "preview": "package com.reason.hints;\n\nimport com.intellij.notification.*;\nimport com.intellij.openapi.components.*;\nimport com.inte"
  },
  {
    "path": "src/main/java/com/reason/ide/CompileOnSave.java",
    "chars": 1725,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.application.ex.*;\nimport com.intellij.openapi.project.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/ide/EditorPosition.java",
    "chars": 1274,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.editor.*;\nimport org.jetbrains.annotations.*;\n\n/**\n * Offset <-> Po"
  },
  {
    "path": "src/main/java/com/reason/ide/IconProvider.java",
    "chars": 3543,
    "preview": "package com.reason.ide;\n\nimport com.intellij.json.psi.*;\nimport com.intellij.psi.*;\nimport com.reason.comp.esy.*;\nimport"
  },
  {
    "path": "src/main/java/com/reason/ide/OREditorFactoryListener.java",
    "chars": 520,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.editor.event.*;\nimport com.intellij.openapi.project.*;\nimport org.j"
  },
  {
    "path": "src/main/java/com/reason/ide/OREditorTracker.java",
    "chars": 4432,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.*;\nimport com.intellij.openapi.components.*;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/reason/ide/ORFileDocumentListener.java",
    "chars": 1230,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.*;\nimport com.intellij.openapi.components.*;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/reason/ide/ORFileUtils.java",
    "chars": 6164,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.p"
  },
  {
    "path": "src/main/java/com/reason/ide/ORIcons.java",
    "chars": 5031,
    "preview": "package com.reason.ide;\n\nimport com.intellij.icons.*;\n\nimport javax.swing.*;\n\nimport static com.intellij.openapi.util.Ic"
  },
  {
    "path": "src/main/java/com/reason/ide/ORPostStartupActivity.java",
    "chars": 1386,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.startup.*;\nimport com.reason"
  },
  {
    "path": "src/main/java/com/reason/ide/ORVirtualFileListener.java",
    "chars": 4406,
    "preview": "package com.reason.ide;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.module.Module;\nimport co"
  },
  {
    "path": "src/main/java/com/reason/ide/actions/ConvertAction.java",
    "chars": 5689,
    "preview": "package com.reason.ide.actions;\n\nimport com.intellij.notification.*;\nimport com.intellij.openapi.actionSystem.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/actions/TransformAction.java",
    "chars": 575,
    "preview": "package com.reason.ide.actions;\n\nimport static com.intellij.openapi.actionSystem.CommonDataKeys.PSI_FILE;\n\nimport com.in"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/BsErrorAnnotator.java",
    "chars": 10101,
    "preview": "package com.reason.ide.annotations;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.openapi.editor.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/ErrorFileHighlighter.java",
    "chars": 540,
    "preview": "package com.reason.ide.annotations;\n\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.openapi.util.Co"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/ErrorsManager.java",
    "chars": 2195,
    "preview": "package com.reason.ide.annotations;\n\nimport com.intellij.openapi.components.*;\nimport com.intellij.util.containers.*;\nim"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/ORErrorAnnotator.java",
    "chars": 12184,
    "preview": "package com.reason.ide.annotations;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.lang.annotation.*;\nimp"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/OutputInfo.java",
    "chars": 651,
    "preview": "package com.reason.ide.annotations;\n\nimport org.jetbrains.annotations.*;\n\npublic class OutputInfo {\n    public boolean i"
  },
  {
    "path": "src/main/java/com/reason/ide/annotations/ResErrorAnnotator.java",
    "chars": 6339,
    "preview": "package com.reason.ide.annotations;\n\nimport com.intellij.execution.process.*;\nimport com.intellij.openapi.editor.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/ide/comment/DuneCommenter.java",
    "chars": 620,
    "preview": "package com.reason.ide.comment;\n\nimport com.intellij.lang.Commenter;\nimport org.jetbrains.annotations.Nullable;\n\npublic "
  },
  {
    "path": "src/main/java/com/reason/ide/comment/MlyCommenter.java",
    "chars": 680,
    "preview": "package com.reason.ide.comment;\n\nimport com.intellij.lang.Commenter;\nimport org.jetbrains.annotations.Nullable;\n\npublic "
  },
  {
    "path": "src/main/java/com/reason/ide/comment/OclCommenter.java",
    "chars": 8971,
    "preview": "package com.reason.ide.comment;\n\nimport com.intellij.codeInsight.generation.*;\nimport com.intellij.lang.*;\nimport com.in"
  },
  {
    "path": "src/main/java/com/reason/ide/comment/RmlCommenter.java",
    "chars": 620,
    "preview": "package com.reason.ide.comment;\n\nimport com.intellij.lang.Commenter;\nimport org.jetbrains.annotations.Nullable;\n\npublic "
  },
  {
    "path": "src/main/java/com/reason/ide/console/ClearLogAction.java",
    "chars": 1004,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.execution.ui.*;\nimport com.intellij.icons.*;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/reason/ide/console/CompilerAction.java",
    "chars": 2398,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.openapi.editor.*;\nimport com.intellij.openapi.fileEditor.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/console/ORConsoleFilter.java",
    "chars": 564,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.openapi.project.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/console/ORConsoleFilterProvider.java",
    "chars": 1223,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.execution.ui.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/ide/console/ORToolWindowFactory.java",
    "chars": 918,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.openapi.project.*;\nimport com.intellij.openapi.wm.*;\nimport org.jet"
  },
  {
    "path": "src/main/java/com/reason/ide/console/ORToolWindowManager.java",
    "chars": 3955,
    "preview": "package com.reason.ide.console;\n\nimport com.intellij.execution.ui.*;\nimport com.intellij.openapi.application.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/ide/console/bs/BsConsoleView.java",
    "chars": 294,
    "preview": "package com.reason.ide.console.bs;\n\nimport com.intellij.execution.impl.*;\nimport com.intellij.openapi.project.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/console/bs/BsMakeAction.java",
    "chars": 1240,
    "preview": "package com.reason.ide.console.bs;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/console/bs/BsMakeWorldAction.java",
    "chars": 1284,
    "preview": "package com.reason.ide.console.bs;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/console/bs/BsToolWindowFactory.java",
    "chars": 1835,
    "preview": "package com.reason.ide.console.bs;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.editor.actio"
  },
  {
    "path": "src/main/java/com/reason/ide/console/dune/DuneBuildAction.java",
    "chars": 1261,
    "preview": "package com.reason.ide.console.dune;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimport co"
  },
  {
    "path": "src/main/java/com/reason/ide/console/dune/DuneCleanAction.java",
    "chars": 1250,
    "preview": "package com.reason.ide.console.dune;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.project.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/console/dune/DuneConsoleView.java",
    "chars": 459,
    "preview": "package com.reason.ide.console.dune;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.execution.impl.*;\nimp"
  },
  {
    "path": "src/main/java/com/reason/ide/console/dune/DuneToolWindowFactory.java",
    "chars": 1834,
    "preview": "package com.reason.ide.console.dune;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.editor.act"
  },
  {
    "path": "src/main/java/com/reason/ide/console/dune/OCamlConsoleFilter.java",
    "chars": 2382,
    "preview": "package com.reason.ide.console.dune;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.openapi.project.*;\nim"
  },
  {
    "path": "src/main/java/com/reason/ide/console/esy/EsyBuildAction.java",
    "chars": 1252,
    "preview": "package com.reason.ide.console.esy;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimport com"
  },
  {
    "path": "src/main/java/com/reason/ide/console/esy/EsyConsoleView.java",
    "chars": 2252,
    "preview": "package com.reason.ide.console.esy;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.execution.impl.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/ide/console/esy/EsyToolWindowFactory.java",
    "chars": 1800,
    "preview": "package com.reason.ide.console.esy;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.editor.acti"
  },
  {
    "path": "src/main/java/com/reason/ide/console/rescript/RescriptBuildAction.java",
    "chars": 1268,
    "preview": "package com.reason.ide.console.rescript;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimpor"
  },
  {
    "path": "src/main/java/com/reason/ide/console/rescript/RescriptConsoleFilter.java",
    "chars": 2333,
    "preview": "package com.reason.ide.console.rescript;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.openapi.project.*"
  },
  {
    "path": "src/main/java/com/reason/ide/console/rescript/RescriptConsoleView.java",
    "chars": 474,
    "preview": "package com.reason.ide.console.rescript;\n\nimport com.intellij.execution.filters.*;\nimport com.intellij.execution.impl.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/console/rescript/RescriptResetAction.java",
    "chars": 1256,
    "preview": "package com.reason.ide.console.rescript;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.projec"
  },
  {
    "path": "src/main/java/com/reason/ide/console/rescript/RescriptToolWindowFactory.java",
    "chars": 1913,
    "preview": "package com.reason.ide.console.rescript;\n\nimport com.intellij.openapi.actionSystem.*;\nimport com.intellij.openapi.editor"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/OCamlApplicationConfiguration.java",
    "chars": 1652,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.execution.*;\nimport com.intellij.execution.configurations.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/OCamlApplicationRunningState.java",
    "chars": 1426,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.execution.ExecutionException;\nimport com.intellij.execution.configura"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/OCamlDebugRunner.java",
    "chars": 712,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.execution.configurations.*;\nimport com.intellij.execution.executors.*"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/OCamlModuleBasedConfiguration.java",
    "chars": 357,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.execution.configurations.RunConfigurationModule;\nimport com.intellij."
  },
  {
    "path": "src/main/java/com/reason/ide/debug/ORLineBreakpointProperties.java",
    "chars": 461,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.xdebugger.breakpoints.XBreakpointProperties;\nimport org.jetbrains.ann"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/ORLineBreakpointType.java",
    "chars": 3023,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.openapi.editor.Document;\nimport com.intellij.openapi.fileEditor.FileD"
  },
  {
    "path": "src/main/java/com/reason/ide/debug/OclDebuggerRunnerSettings.java",
    "chars": 392,
    "preview": "package com.reason.ide.debug;\n\nimport com.intellij.execution.configurations.*;\nimport com.intellij.openapi.util.*;\nimpor"
  },
  {
    "path": "src/main/java/com/reason/ide/docs/DocFormatter.java",
    "chars": 3488,
    "preview": "package com.reason.ide.docs;\n\nimport com.intellij.lang.documentation.*;\nimport com.intellij.openapi.fileTypes.*;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/docs/ORDocumentationProvider.java",
    "chars": 13771,
    "preview": "package com.reason.ide.docs;\n\nimport com.intellij.lang.*;\nimport com.intellij.lang.documentation.*;\nimport com.intellij."
  },
  {
    "path": "src/main/java/com/reason/ide/editors/CmtFileEditor.java",
    "chars": 5665,
    "preview": "package com.reason.ide.editors;\n\nimport com.intellij.icons.*;\nimport com.intellij.openapi.actionSystem.*;\nimport com.int"
  },
  {
    "path": "src/main/java/com/reason/ide/editors/CmtFileEditorProvider.java",
    "chars": 869,
    "preview": "package com.reason.ide.editors;\n\nimport com.intellij.openapi.fileEditor.*;\nimport com.intellij.openapi.project.*;\nimport"
  },
  {
    "path": "src/main/java/com/reason/ide/editors/CmtXmlComponent.java",
    "chars": 1435,
    "preview": "package com.reason.ide.editors;\n\nimport com.intellij.ide.highlighter.*;\nimport com.intellij.lang.xhtml.*;\nimport com.int"
  },
  {
    "path": "src/main/java/com/reason/ide/files/CmtFileType.java",
    "chars": 949,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.openapi.vfs.*;\nimport org.je"
  },
  {
    "path": "src/main/java/com/reason/ide/files/DuneFile.java",
    "chars": 848,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.openapi.fileTypes.*;\nimport com.int"
  },
  {
    "path": "src/main/java/com/reason/ide/files/DuneFileType.java",
    "chars": 1248,
    "preview": "package com.reason.ide.files;\n\nimport com.google.common.collect.*;\nimport com.intellij.openapi.fileTypes.*;\nimport com.i"
  },
  {
    "path": "src/main/java/com/reason/ide/files/FileBase.java",
    "chars": 2685,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.lang.*;\nimport com.intellij.pom.*;\n"
  },
  {
    "path": "src/main/java/com/reason/ide/files/Ml4File.java",
    "chars": 601,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.openapi.fileTypes.FileType;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/files/Ml4FileType.java",
    "chars": 814,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.LanguageFileType;\nimport com.reason.lang.extra.OclP"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlgFile.java",
    "chars": 625,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.openapi.fileTypes.FileType;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlgFileType.java",
    "chars": 1056,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.reason.ide.highlight.*;\nimport com.re"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlgFileViewProvider.java",
    "chars": 2089,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlgFileViewProviderFactory.java",
    "chars": 497,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MllFile.java",
    "chars": 630,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.openapi.fileTypes.FileType;\nimport "
  },
  {
    "path": "src/main/java/com/reason/ide/files/MllFileType.java",
    "chars": 981,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.reason.ide.*;\nimport com.reason.ide.h"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MllFileViewProvider.java",
    "chars": 2075,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MllFileViewProviderFactory.java",
    "chars": 497,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlyFile.java",
    "chars": 591,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.extapi.psi.*;\nimport com.intellij.openapi.fileTypes.*;\nimport com.int"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlyFileType.java",
    "chars": 990,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.reason.ide.*;\nimport com.reason.ide.h"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlyFileViewProvider.java",
    "chars": 2081,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/MlyFileViewProviderFactory.java",
    "chars": 497,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.vfs.*;\nimport com.intellij.psi.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/ORConfigJsonFileType.java",
    "chars": 624,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.json.*;\nimport com.reason.ide.*;\nimport org.jetbrains.annotations.*;\n"
  },
  {
    "path": "src/main/java/com/reason/ide/files/ORTargetElementEvaluator.java",
    "chars": 1042,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.codeInsight.*;\nimport com.intellij.psi.*;\nimport com.reason.lang.core"
  },
  {
    "path": "src/main/java/com/reason/ide/files/OclFile.java",
    "chars": 518,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.psi.*;\nimport com.reason.lan"
  },
  {
    "path": "src/main/java/com/reason/ide/files/OclFileType.java",
    "chars": 923,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.LanguageFileType;\nimport com.reason.lang.ocaml.OclL"
  },
  {
    "path": "src/main/java/com/reason/ide/files/OclInterfaceFile.java",
    "chars": 553,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.psi.*;\nimport com.reason.lan"
  },
  {
    "path": "src/main/java/com/reason/ide/files/OclInterfaceFileType.java",
    "chars": 1006,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.reason.ide.*;\nimport com.reason.lang."
  },
  {
    "path": "src/main/java/com/reason/ide/files/ResFile.java",
    "chars": 559,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.psi.FileViewProvider;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/ResFileType.java",
    "chars": 1801,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.openapi.fileTypes.ex.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/ide/files/ResInterfaceFile.java",
    "chars": 586,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.psi.FileViewProvider;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/ResInterfaceFileType.java",
    "chars": 1054,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.LanguageFileType;\nimport com.reason.lang.rescript.R"
  },
  {
    "path": "src/main/java/com/reason/ide/files/RmlFile.java",
    "chars": 533,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.psi.FileViewProvider;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/RmlFileType.java",
    "chars": 874,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.LanguageFileType;\nimport com.reason.lang.reason.Rml"
  },
  {
    "path": "src/main/java/com/reason/ide/files/RmlInterfaceFile.java",
    "chars": 560,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.FileType;\nimport com.intellij.psi.FileViewProvider;"
  },
  {
    "path": "src/main/java/com/reason/ide/files/RmlInterfaceFileType.java",
    "chars": 1014,
    "preview": "package com.reason.ide.files;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.reason.ide.*;\nimport com.reason.lang."
  },
  {
    "path": "src/main/java/com/reason/ide/folding/DuneFoldingBuilder.java",
    "chars": 2814,
    "preview": "package com.reason.ide.folding;\n\nimport com.intellij.lang.*;\nimport com.intellij.lang.folding.*;\nimport com.intellij.ope"
  },
  {
    "path": "src/main/java/com/reason/ide/folding/ORFoldingBuilder.java",
    "chars": 8753,
    "preview": "package com.reason.ide.folding;\n\nimport com.intellij.lang.*;\nimport com.intellij.lang.folding.*;\nimport com.intellij.ope"
  },
  {
    "path": "src/main/java/com/reason/ide/format/FormatterProcessor.java",
    "chars": 167,
    "preview": "package com.reason.ide.format;\n\nimport org.jetbrains.annotations.*;\n\npublic interface FormatterProcessor {\n    @Nullable"
  },
  {
    "path": "src/main/java/com/reason/ide/format/ORPostFormatProcessor.java",
    "chars": 6858,
    "preview": "package com.reason.ide.format;\n\nimport com.intellij.lang.*;\nimport com.intellij.openapi.editor.*;\nimport com.intellij.op"
  },
  {
    "path": "src/main/java/com/reason/ide/format/ReformatOnSave.java",
    "chars": 4693,
    "preview": "package com.reason.ide.format;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.application.ex.*;"
  },
  {
    "path": "src/main/java/com/reason/ide/go/FileModuleDataModuleRendererFactory.java",
    "chars": 679,
    "preview": "package com.reason.ide.go;\n\nimport com.intellij.ide.util.*;\nimport com.intellij.util.*;\nimport org.jetbrains.annotations"
  },
  {
    "path": "src/main/java/com/reason/ide/go/ORLineMarkerProvider.java",
    "chars": 37505,
    "preview": "package com.reason.ide.go;\n\nimport com.intellij.codeInsight.daemon.*;\nimport com.intellij.codeInsight.navigation.*;\nimpo"
  },
  {
    "path": "src/main/java/com/reason/ide/go/ORModuleContributor.java",
    "chars": 4565,
    "preview": "package com.reason.ide.go;\n\nimport com.intellij.navigation.*;\nimport com.intellij.openapi.project.*;\nimport com.intellij"
  },
  {
    "path": "src/main/java/com/reason/ide/handlers/ORTypedHandler.java",
    "chars": 1891,
    "preview": "package com.reason.ide.handlers;\n\nimport com.intellij.codeInsight.editorActions.TypedHandlerDelegate;\nimport com.intelli"
  },
  {
    "path": "src/main/java/com/reason/ide/handlers/OclQuoteHandler.java",
    "chars": 385,
    "preview": "package com.reason.ide.handlers;\n\nimport com.intellij.codeInsight.editorActions.SimpleTokenSetQuoteHandler;\nimport com.i"
  },
  {
    "path": "src/main/java/com/reason/ide/handlers/ResQuoteHandler.java",
    "chars": 395,
    "preview": "package com.reason.ide.handlers;\n\nimport com.intellij.codeInsight.editorActions.SimpleTokenSetQuoteHandler;\nimport com.i"
  },
  {
    "path": "src/main/java/com/reason/ide/handlers/RmlQuoteHandler.java",
    "chars": 386,
    "preview": "package com.reason.ide.handlers;\n\nimport com.intellij.codeInsight.editorActions.SimpleTokenSetQuoteHandler;\nimport com.i"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/DuneSyntaxAnnotator.java",
    "chars": 1585,
    "preview": "package com.reason.ide.highlight;\n\nimport static com.intellij.lang.annotation.HighlightSeverity.INFORMATION;\n\nimport com"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/DuneSyntaxHighlighter.java",
    "chars": 3599,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.*;\nimport com.intelli"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/DuneSyntaxHighlighterFactory.java",
    "chars": 508,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;\nimport com.intellij.o"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/ORSyntaxAnnotator.java",
    "chars": 4812,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lang.*;\nimport com.intellij.lang.annotation.*;\nimport com.intelli"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/ORSyntaxHighlighter.java",
    "chars": 9265,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.*;\nimport com.intelli"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclGrammarEditorHighlighter.java",
    "chars": 1464,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclGrammarSyntaxHighlighterFactory.java",
    "chars": 2763,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclLexEditorHighlighter.java",
    "chars": 1444,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclLexSyntaxHighlighterFactory.java",
    "chars": 2544,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclSyntaxAnnotator.java",
    "chars": 211,
    "preview": "package com.reason.ide.highlight;\n\nimport com.reason.lang.ocaml.OclTypes;\n\npublic class OclSyntaxAnnotator extends ORSyn"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclSyntaxHighlighterFactory.java",
    "chars": 4589,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.openapi.project.*;\nimpor"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclYaccEditorHighlighter.java",
    "chars": 1449,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/OclYaccSyntaxHighlighterFactory.java",
    "chars": 2485,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.lexer.*;\nimport com.intellij.openapi.editor.colors.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/ResSyntaxAnnotator.java",
    "chars": 214,
    "preview": "package com.reason.ide.highlight;\n\nimport com.reason.lang.rescript.ResTypes;\n\npublic class ResSyntaxAnnotator extends OR"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/ResSyntaxHighlighterFactory.java",
    "chars": 4400,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.openapi.project.*;\nimpor"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/RmlSyntaxAnnotator.java",
    "chars": 205,
    "preview": "package com.reason.ide.highlight;\n\nimport com.reason.lang.reason.RmlTypes;\n\npublic class RmlSyntaxAnnotator extends ORSy"
  },
  {
    "path": "src/main/java/com/reason/ide/highlight/RmlSyntaxHighlighterFactory.java",
    "chars": 4163,
    "preview": "package com.reason.ide.highlight;\n\nimport com.intellij.openapi.fileTypes.*;\nimport com.intellij.openapi.project.*;\nimpor"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/CodeLens.java",
    "chars": 1716,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.editor.*;\nimport com.intellij.openapi.util.*;\nimport org.jetb"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/InferredTypes.java",
    "chars": 546,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.editor.*;\nimport com.reason.lang.*;\nimport com.reason.lang.co"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/InferredTypesImplementation.java",
    "chars": 8055,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.editor.*;\nimport com.intellij.openapi.project.*;\nimport com.i"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/InferredTypesService.java",
    "chars": 6321,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.editor.*;\nimport c"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/OREditorLinePainter.java",
    "chars": 1229,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.editor.*;\nimport com.intellij.openapi.editor.colors.*;\nimport"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/ORParameterInfoHandler.java",
    "chars": 5261,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.lang.parameterInfo.*;\nimport com.intellij.openapi.util.*;\nimport com."
  },
  {
    "path": "src/main/java/com/reason/ide/hints/OclParameterInfoHandler.java",
    "chars": 1616,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.lang.parameterInfo.*;\nimport com.intellij.psi.*;\nimport com.intellij."
  },
  {
    "path": "src/main/java/com/reason/ide/hints/ResParameterInfoHandler.java",
    "chars": 848,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.lang.parameterInfo.*;\nimport com.intellij.psi.*;\nimport com.intellij."
  },
  {
    "path": "src/main/java/com/reason/ide/hints/RmlParameterInfoHandler.java",
    "chars": 846,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.lang.parameterInfo.*;\nimport com.intellij.psi.*;\nimport com.intellij."
  },
  {
    "path": "src/main/java/com/reason/ide/hints/RmlTypeProvider.java",
    "chars": 595,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.lang.*;\nimport com.intellij.psi.*;\nimport org.jetbrains.annotations.*"
  },
  {
    "path": "src/main/java/com/reason/ide/hints/SignatureProvider.java",
    "chars": 1198,
    "preview": "package com.reason.ide.hints;\n\nimport com.intellij.openapi.editor.*;\nimport com.intellij.openapi.util.*;\nimport com.reas"
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneExternalConstants.java",
    "chars": 242,
    "preview": "package com.reason.ide.importWizard;\n\npublic class DuneExternalConstants {\n    public static final String PROJECT_BUILD_"
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneProjectImportBuilder.java",
    "chars": 5528,
    "preview": "package com.reason.ide.importWizard;\n\nimport com.intellij.openapi.application.*;\nimport com.intellij.openapi.module.Modu"
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneProjectImportProvider.java",
    "chars": 1511,
    "preview": "package com.reason.ide.importWizard;\n\nimport com.intellij.ide.util.projectWizard.*;\nimport com.intellij.openapi.vfs.*;\ni"
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneProjectOpenProcessor.java",
    "chars": 957,
    "preview": "package com.reason.ide.importWizard;\n\nimport com.intellij.ide.util.projectWizard.*;\nimport com.intellij.openapi.vfs.*;\ni"
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneProjectRootStep.form",
    "chars": 1899,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<form xmlns=\"http://www.intellij.com/uidesigner/form/\" version=\"1\" bind-to-class="
  },
  {
    "path": "src/main/java/com/reason/ide/importWizard/DuneProjectRootStep.java",
    "chars": 2824,
    "preview": "package com.reason.ide.importWizard;\n\nimport com.intellij.ide.util.projectWizard.*;\nimport com.intellij.openapi.fileChoo"
  }
]

// ... and 673 more files (download for full content)

About this extraction

This page contains the full source code of the reasonml-editor/reasonml-idea-plugin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 873 files (3.0 MB), approximately 830.1k tokens, and a symbol index with 5705 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!