From a85a0c03be35f27dff9fa0fb5fde35c2aaa47eb8 Mon Sep 17 00:00:00 2001 From: valis Date: Fri, 21 Sep 2018 17:49:21 +0300 Subject: [PATCH] Rename vclang to Arend --- .gitignore | 4 +- .travis.yml | 4 +- LICENSE | 8 +- README.md | 14 +- build.gradle.kts | 28 +- settings.gradle.kts | 4 +- .../{VcLexer.flex => ArendLexer.flex} | 8 +- .../{VcParser.bnf => ArendParser.bnf} | 348 +++++++++--------- src/main/java/org/arend/ArendLanguage.java | 11 + .../org/arend/module/ArendModuleTypeBase.java | 11 + src/main/java/org/vclang/VcLanguage.java | 11 - .../org/vclang/module/VcModuleTypeBase.java | 11 - .../ArendBraceMatcher.kt} | 15 +- .../ArendDocumentationProvider.kt} | 38 +- src/main/kotlin/org/arend/ArendFileType.kt | 16 + .../ArendFileTypeFactory.kt} | 6 +- .../ArendFoldingBuilder.kt} | 36 +- .../VcIcons.kt => arend/ArendIcons.kt} | 9 +- .../ArendImplementationTextSelectioner.kt} | 16 +- .../ArendStartupActivity.kt} | 32 +- .../org/{vclang => arend}/ProjectUtils.kt | 8 +- .../actions/ArendCreateFileAction.kt} | 10 +- .../ArendPrettyPrinterFormatAction.kt} | 18 +- .../annotation/ArendAddImportAction.kt} | 6 +- .../ArendHighlightRangeExtension.kt} | 8 +- .../annotation/ArendHighlightingAnnotator.kt} | 174 ++++----- .../annotation/ArendImportHintAction.kt} | 48 +-- .../annotation/ArendReferenceImporter.kt} | 18 +- .../codeInsight/ArendCharFilter.kt} | 12 +- .../ArendDeclarationRangeHandler.kt | 20 + .../codeInsight/ArendParameterInfoHandler.kt} | 120 +++--- .../completion/ArendCompletionConfidence.kt} | 8 +- .../completion/ArendCompletionContributor.kt} | 204 +++++----- .../commenter/ArendCommenter.kt} | 4 +- .../arend/editor/ArendColorSettingsPage.kt | 47 +++ .../ArendHierarchyNodeDescriptor.kt} | 10 +- .../call/ArendCallHierarchyBrowser.kt} | 18 +- .../call/ArendCallHierarchyProvider.kt} | 10 +- .../call/ArendCalleeTreeStructure.kt} | 18 +- .../call/ArendCallerTreeStructure.kt} | 14 +- .../clazz/ArendClassHierarchyBrowser.kt} | 18 +- .../clazz/ArendClassHierarchyProvider.kt} | 10 +- .../clazz/ArendSubClassTreeStructure.kt} | 22 +- .../clazz/ArendSuperClassTreeStructure.kt | 20 + .../highlight/ArendHighlightingColors.kt} | 6 +- .../highlight/ArendProblemHighlightFilter.kt} | 4 +- .../arend/highlight/ArendSyntaxHighlighter.kt | 45 +++ .../ArendSyntaxHighlighterFactory.kt} | 6 +- .../org/arend/lexer/ArendLexerAdapter.kt | 6 + .../org/arend/module/ArendFakeRawSource.kt | 15 + .../org/arend/module/ArendModuleType.kt | 25 ++ .../module/ArendPreludeLibrary.kt} | 53 ++- .../module/ArendRawLibrary.kt} | 37 +- .../module/ArendRawSource.kt} | 10 +- .../{vclang => arend}/module/ModuleScope.kt | 25 +- .../module/util/ArendModuleBuilder.kt} | 10 +- .../module/util/ArendModuleWizardStep.kt} | 12 +- .../util/ArendProjectStructureDetector.kt} | 20 +- .../module/util/ModuleUtils.kt | 32 +- .../ArendClassNavigationContributor.kt | 9 + .../ArendNavigationContributorBase.kt} | 12 +- .../ArendSymbolNavigationContributor.kt | 9 + .../org/{vclang => arend}/navigation/Utils.kt | 16 +- .../org/arend/parser/ArendParserDefinition.kt | 43 +++ .../arend/psi/ArendCompositeElementType.kt | 6 + .../psi/VcFile.kt => arend/psi/ArendFile.kt} | 64 ++-- .../psi/ArendPsiFactory.kt} | 50 +-- .../psi/ArendPsiPattern.kt} | 6 +- .../psi/ArendTokenType.kt} | 16 +- .../{vclang => arend}/psi/PsiElementUtils.kt | 10 +- .../arend/psi/ext/ArendAppExprImplMixin.kt | 11 + .../psi/ext/ArendArgumentAppExprImplMixin.kt} | 10 +- .../arend/psi/ext/ArendArgumentImplMixin.kt | 88 +++++ .../psi/ext/ArendArrExprImplMixin.kt} | 10 +- .../psi/ext/ArendAtomFieldsAccImplMixin.kt} | 10 +- .../psi/ext/ArendAtomImplMixin.kt} | 10 +- .../psi/ext/ArendAtomLevelExprImplMixin.kt} | 8 +- .../ext/ArendAtomOnlyLevelExprImplMixin.kt} | 8 +- .../arend/psi/ext/ArendCaseArgImplMixin.kt | 14 + .../arend/psi/ext/ArendCaseExprImplMixin.kt | 15 + .../psi/ext/ArendClauseImplMixin.kt} | 8 +- .../arend/psi/ext/ArendCoClauseImplMixin.kt | 31 ++ .../arend/psi/ext/ArendCompositeElement.kt | 134 +++++++ .../ext/ArendConstructorClauseImplMixin.kt | 15 + .../org/arend/psi/ext/ArendExprImplMixin.kt | 17 + .../arend/psi/ext/ArendLamExprImplMixin.kt | 14 + .../arend/psi/ext/ArendLetClauseImplMixin.kt | 42 +++ .../arend/psi/ext/ArendLetExprImplMixin.kt | 14 + .../psi/ext/ArendLevelExprImplMixin.kt} | 8 +- .../psi/ext/ArendLiteralImplMixin.kt} | 16 +- .../psi/ext/ArendLongNameExprImplMixin.kt} | 14 +- .../psi/ext/ArendLongNameImplMixin.kt} | 12 +- .../psi/ext/ArendNewExprImplMixin.kt} | 40 +- .../org/arend/psi/ext/ArendNsIdImplMixin.kt | 16 + .../psi/ext/ArendOnlyLevelExprImplMixin.kt} | 8 +- .../psi/ext/ArendPatternImplMixin.kt} | 24 +- .../org/arend/psi/ext/ArendPiExprImplMixin.kt | 14 + .../arend/psi/ext/ArendReferenceElement.kt | 6 + .../arend/psi/ext/ArendSigmaExprImplMixin.kt | 14 + .../psi/ext/ArendStatCmdImplMixin.kt} | 26 +- .../psi/ext/ArendTeleImplMixin.kt} | 18 +- .../psi/ext/ArendTupleExprImplMixin.kt} | 12 +- .../psi/ext/ArendTupleImplMixin.kt} | 10 +- .../psi/ext/ArendUniverseExprImplMixin.kt} | 10 +- .../kotlin/org/arend/psi/ext/Identifiers.kt | 108 ++++++ .../org/arend/psi/ext/PsiConcreteReferable.kt | 10 + .../psi/ext/PsiLocatedReferable.kt | 14 +- .../{vclang => arend}/psi/ext/PsiReferable.kt | 36 +- .../{vclang => arend}/psi/ext/Universes.kt | 26 +- .../arend/psi/ext/impl/ArendDefModuleMixin.kt | 35 ++ .../psi/ext/impl/ClassDefinition.kt | 38 +- .../psi/ext/impl/ClassField.kt | 28 +- .../org/arend/psi/ext/impl/ClassFieldImpl.kt | 47 +++ .../psi/ext/impl/ClassFieldSyn.kt | 26 +- .../psi/ext/impl/ClassInstance.kt | 36 +- .../org/arend/psi/ext/impl/Constructor.kt | 53 +++ .../psi/ext/impl/DataDefinition.kt | 34 +- .../psi/ext/impl/Definition.kt | 36 +- .../psi/ext/impl/FieldDefIdentifierAdapter.kt | 65 ++++ .../arend/psi/ext/impl/FunctionDefinition.kt | 59 +++ .../psi/ext/impl/Referable.kt | 30 +- .../psi/stubs/ArendStubElementType.kt} | 12 +- .../arend/psi/stubs/StubImplementations.kt | 306 +++++++++++++++ .../org/arend/psi/stubs/StubIndexing.kt | 69 ++++ .../org/arend/psi/stubs/StubInterfaces.kt | 5 + .../psi/stubs/index/ArendDefinitionIndex.kt | 18 + .../psi/stubs/index/ArendGotoClassIndex.kt | 18 + .../psi/stubs/index/ArendNamedElementIndex.kt | 18 + .../quickfix/InstanceQuickFix.kt | 86 ++--- .../quickfix/ResolveRefQuickFix.kt | 94 ++--- .../refactoring/ArendNamesValidator.kt} | 20 +- .../ArendRefactoringSupportProvider.kt | 21 ++ .../refactoring/ArendRenameInputValidator.kt} | 11 +- .../resolving/ArendReferableConverter.kt} | 26 +- .../resolving/ArendReference.kt} | 98 ++--- .../resolving/ArendResolveCache.kt} | 12 +- .../resolving/DataLocalReferable.kt | 12 +- .../resolving/DataLocatedReferable.kt | 14 +- .../resolving/PsiConcreteProvider.kt | 58 +-- .../resolving/PsiPartialConcreteProvider.kt | 30 ++ .../search/ArendCustomSearcher.kt} | 16 +- .../search/ArendFindUsagesProvider.kt} | 28 +- .../search/ArendGroupRuleProviders.kt} | 34 +- .../search/ArendWordScanner.kt} | 26 +- .../ArendPsiStructureViewFactory.kt} | 10 +- .../structure/ArendStructureViewModel.kt} | 46 +-- .../typechecking/ArendLibraryResolver.kt | 15 + .../typechecking/PsiInstanceProviderSet.kt | 30 ++ .../typechecking/TestBasedTypechecking.kt | 27 +- .../typechecking/TypeCheckingService.kt | 84 +++-- .../typechecking/error/LogErrorReporter.kt | 12 +- .../typechecking/error/ParserError.kt | 6 +- .../typechecking/error/PsiSourceInfo.kt | 10 +- .../error/TypecheckingErrorReporter.kt | 22 +- .../typechecking/execution/DefinitionProxy.kt | 2 +- .../typechecking/execution/FullModulePath.kt | 6 + .../execution/TypeCheckCommand.kt | 2 +- .../execution/TypeCheckProcessHandler.kt | 74 ++-- .../TypeCheckRunConfigurationEditor.kt | 12 +- .../TypeCheckRunConfigurationProducer.kt | 26 +- .../TypeCheckRunLineMarkerContributor.kt | 19 +- .../typechecking/execution/TypeCheckRunner.kt | 4 +- .../execution/TypecheckingEventsProcessor.kt | 16 +- .../configurations/TypeCheckConfiguration.kt | 26 +- .../TypeCheckConfigurationType.kt | 12 +- .../TypeCheckRunConfigurationModule.kt | 2 +- .../configurations/TypeCheckRunState.kt | 12 +- .../{vclang => arend}/typing/BinOpParser.kt | 16 +- .../{vclang => arend}/typing/ClassesUtil.kt | 18 +- .../typing/ExpectedTypeVisitor.kt | 66 ++-- .../typing/GetKindVisitor.kt | 24 +- .../typing/ReferableExtractVisitor.kt | 26 +- .../typing/TypecheckingVisitor.kt | 42 +-- .../{vclang => arend}/typing/TypingVisitor.kt | 8 +- src/main/kotlin/org/vclang/VcFileType.kt | 16 - .../codeInsight/VcDeclarationRangeHandler.kt | 20 - .../org/vclang/editor/VcColorSettingsPage.kt | 46 --- .../clazz/VcSuperClassTreeStructure.kt | 20 - .../vclang/highlight/VcSyntaxHighlighter.kt | 45 --- .../kotlin/org/vclang/lexer/VcLexerAdapter.kt | 6 - .../org/vclang/module/VcFakeRawSource.kt | 16 - .../kotlin/org/vclang/module/VcModuleType.kt | 25 -- .../VcClassNavigationContributor.kt | 9 - .../VcSymbolNavigationContributor.kt | 9 - .../org/vclang/parser/VcParserDefinition.kt | 43 --- .../org/vclang/psi/VcCompositeElementType.kt | 6 - .../kotlin/org/vclang/psi/ext/Identifiers.kt | 108 ------ .../vclang/psi/ext/PsiConcreteReferable.kt | 10 - .../org/vclang/psi/ext/VcAppExprImplMixin.kt | 11 - .../org/vclang/psi/ext/VcArgumentImplMixin.kt | 88 ----- .../org/vclang/psi/ext/VcCaseArgImplMixin.kt | 14 - .../org/vclang/psi/ext/VcCaseExprImplMixin.kt | 15 - .../org/vclang/psi/ext/VcCoClauseImplMixin.kt | 31 -- .../org/vclang/psi/ext/VcCompositeElement.kt | 134 ------- .../psi/ext/VcConstructorClauseImplMixin.kt | 15 - .../org/vclang/psi/ext/VcExprImplMixin.kt | 17 - .../org/vclang/psi/ext/VcLamExprImplMixin.kt | 14 - .../vclang/psi/ext/VcLetClauseImplMixin.kt | 42 --- .../org/vclang/psi/ext/VcLetExprImplMixin.kt | 14 - .../org/vclang/psi/ext/VcNsIdImplMixin.kt | 16 - .../org/vclang/psi/ext/VcPiExprImplMixin.kt | 14 - .../org/vclang/psi/ext/VcReferenceElement.kt | 6 - .../vclang/psi/ext/VcSigmaExprImplMixin.kt | 14 - .../org/vclang/psi/ext/impl/ClassFieldImpl.kt | 47 --- .../org/vclang/psi/ext/impl/Constructor.kt | 53 --- .../psi/ext/impl/FieldDefIdentifierAdapter.kt | 65 ---- .../vclang/psi/ext/impl/FunctionDefinition.kt | 60 --- .../vclang/psi/ext/impl/VcDefModuleMixin.kt | 35 -- .../vclang/psi/stubs/StubImplementations.kt | 306 --------------- .../org/vclang/psi/stubs/StubIndexing.kt | 69 ---- .../org/vclang/psi/stubs/StubInterfaces.kt | 5 - .../psi/stubs/index/VcDefinitionIndex.kt | 18 - .../psi/stubs/index/VcGotoClassIndex.kt | 18 - .../psi/stubs/index/VcNamedElementIndex.kt | 18 - .../VcRefactoringSupportProvider.kt | 21 -- .../resolving/PsiPartialConcreteProvider.kt | 30 -- .../typechecking/PsiInstanceProviderSet.kt | 30 -- .../vclang/typechecking/VcLibraryResolver.kt | 15 - .../typechecking/execution/FullModulePath.kt | 6 - src/main/resources/META-INF/plugin.xml | 150 ++++---- .../{Vclang File.vc.ft => Arend File.ard.ft} | 0 .../internal/Arend File.ard.html | 5 + .../internal/Vclang File.vc.html | 5 - .../lib/{Prelude.vcc => Prelude.arc} | Bin .../resources/lib/{Prelude.vc => Prelude.ard} | 0 .../VcTestBase.kt => arend/ArendTestBase.kt} | 32 +- src/test/kotlin/org/arend/ArendTestCase.kt | 10 + .../kotlin/org/{vclang => arend}/FileTree.kt | 15 +- .../completion/ArendCompletionTestBase.kt} | 36 +- .../completion/ArendFieldCompletionTest.kt} | 4 +- .../completion/ArendFilteredScope.kt} | 4 +- .../completion/ArendKeywordCompletionTest.kt} | 58 +-- .../completion/ArendModuleCompletionTest.kt} | 16 +- .../completion/ArendPreludeCompletionTest.kt} | 4 +- .../commenter/ArendCommenterTest.kt} | 10 +- .../quickfix/ImplementFieldsQuickFixTest.kt | 16 +- .../quickfix/QuickFixTestBase.kt | 30 +- .../quickfix/ResolveRefQuickFixTest.kt | 116 +++--- .../refactoring/RenameTest.kt | 42 +-- src/test/kotlin/org/vclang/VcTestCase.kt | 10 - .../indented_single_line_comment.ard} | 0 .../indented_single_line_comment_after.ard} | 0 .../commenter/fixtures/multi_line.ard} | 0 .../commenter/fixtures/multi_line_after.ard} | 0 .../commenter/fixtures/multi_line_block.ard} | 0 .../fixtures/multi_line_block_after.ard} | 0 .../fixtures/multi_line_block_uncomment.ard} | 0 .../multi_line_block_uncomment_after.ard} | 0 .../fixtures/multi_line_uncomment.ard} | 0 .../fixtures/multi_line_uncomment_after.ard} | 0 .../commenter/fixtures/single_line.ard} | 0 .../commenter/fixtures/single_line_after.ard} | 0 .../commenter/fixtures/single_line_block.ard} | 0 .../fixtures/single_line_block_after.ard} | 0 .../fixtures/single_line_block_uncomment.ard} | 0 .../single_line_block_uncomment_after.ard} | 0 .../fixtures/single_line_uncomment.ard} | 0 .../fixtures/single_line_uncomment_after.ard} | 0 .../single_line_uncomment_with_space.ard} | 0 ...ingle_line_uncomment_with_space_after.ard} | 0 260 files changed, 3640 insertions(+), 3660 deletions(-) rename src/main/grammars/{VcLexer.flex => ArendLexer.flex} (97%) rename src/main/grammars/{VcParser.bnf => ArendParser.bnf} (61%) create mode 100644 src/main/java/org/arend/ArendLanguage.java create mode 100644 src/main/java/org/arend/module/ArendModuleTypeBase.java delete mode 100644 src/main/java/org/vclang/VcLanguage.java delete mode 100644 src/main/java/org/vclang/module/VcModuleTypeBase.java rename src/main/kotlin/org/{vclang/VcBraceMatcher.kt => arend/ArendBraceMatcher.kt} (75%) rename src/main/kotlin/org/{vclang/VcDocumentationProvider.kt => arend/ArendDocumentationProvider.kt} (84%) create mode 100644 src/main/kotlin/org/arend/ArendFileType.kt rename src/main/kotlin/org/{vclang/VcFileTypeFactory.kt => arend/ArendFileTypeFactory.kt} (56%) rename src/main/kotlin/org/{vclang/VcFoldingBuilder.kt => arend/ArendFoldingBuilder.kt} (63%) rename src/main/kotlin/org/{vclang/VcIcons.kt => arend/ArendIcons.kt} (73%) rename src/main/kotlin/org/{vclang/VcImplementationTextSelectioner.kt => arend/ArendImplementationTextSelectioner.kt} (61%) rename src/main/kotlin/org/{vclang/VcStartupActivity.kt => arend/ArendStartupActivity.kt} (68%) rename src/main/kotlin/org/{vclang => arend}/ProjectUtils.kt (65%) rename src/main/kotlin/org/{vclang/actions/VcCreateFileAction.kt => arend/actions/ArendCreateFileAction.kt} (69%) rename src/main/kotlin/org/{vclang/actions/VcPrettyPrinterFormatAction.kt => arend/actions/ArendPrettyPrinterFormatAction.kt} (84%) rename src/main/kotlin/org/{vclang/annotation/VclangAddImportAction.kt => arend/annotation/ArendAddImportAction.kt} (91%) rename src/main/kotlin/org/{vclang/annotation/VcHighlightRangeExtension.kt => arend/annotation/ArendHighlightRangeExtension.kt} (55%) rename src/main/kotlin/org/{vclang/annotation/VcHighlightingAnnotator.kt => arend/annotation/ArendHighlightingAnnotator.kt} (80%) rename src/main/kotlin/org/{vclang/annotation/VclangImportHintAction.kt => arend/annotation/ArendImportHintAction.kt} (76%) rename src/main/kotlin/org/{vclang/annotation/VclangReferenceImporter.kt => arend/annotation/ArendReferenceImporter.kt} (78%) rename src/main/kotlin/org/{vclang/codeInsight/VclangCharFilter.kt => arend/codeInsight/ArendCharFilter.kt} (60%) create mode 100644 src/main/kotlin/org/arend/codeInsight/ArendDeclarationRangeHandler.kt rename src/main/kotlin/org/{vclang/codeInsight/VcParameterInfoHandler.kt => arend/codeInsight/ArendParameterInfoHandler.kt} (73%) rename src/main/kotlin/org/{vclang/codeInsight/completion/VcCompletionConfidence.kt => arend/codeInsight/completion/ArendCompletionConfidence.kt} (64%) rename src/main/kotlin/org/{vclang/codeInsight/completion/VclangCompletionContributor.kt => arend/codeInsight/completion/ArendCompletionContributor.kt} (77%) rename src/main/kotlin/org/{vclang/commenter/VcCommenter.kt => arend/commenter/ArendCommenter.kt} (84%) create mode 100644 src/main/kotlin/org/arend/editor/ArendColorSettingsPage.kt rename src/main/kotlin/org/{vclang/hierarchy/VcHierarchyNodeDescriptor.kt => arend/hierarchy/ArendHierarchyNodeDescriptor.kt} (59%) rename src/main/kotlin/org/{vclang/hierarchy/call/VcCallHierarchyBrowser.kt => arend/hierarchy/call/ArendCallHierarchyBrowser.kt} (72%) rename src/main/kotlin/org/{vclang/hierarchy/call/VcCallHierarchyProvider.kt => arend/hierarchy/call/ArendCallHierarchyProvider.kt} (71%) rename src/main/kotlin/org/{vclang/hierarchy/call/VcCalleeTreeStructure.kt => arend/hierarchy/call/ArendCalleeTreeStructure.kt} (60%) rename src/main/kotlin/org/{vclang/hierarchy/call/VcCallerTreeStructure.kt => arend/hierarchy/call/ArendCallerTreeStructure.kt} (74%) rename src/main/kotlin/org/{vclang/hierarchy/clazz/VcClassHierarchyBrowser.kt => arend/hierarchy/clazz/ArendClassHierarchyBrowser.kt} (72%) rename src/main/kotlin/org/{vclang/hierarchy/clazz/VcClassHierarchyProvider.kt => arend/hierarchy/clazz/ArendClassHierarchyProvider.kt} (72%) rename src/main/kotlin/org/{vclang/hierarchy/clazz/VcSubClassTreeStructure.kt => arend/hierarchy/clazz/ArendSubClassTreeStructure.kt} (64%) create mode 100644 src/main/kotlin/org/arend/hierarchy/clazz/ArendSuperClassTreeStructure.kt rename src/main/kotlin/org/{vclang/highlight/VcHighlightingColors.kt => arend/highlight/ArendHighlightingColors.kt} (89%) rename src/main/kotlin/org/{vclang/highlight/VcProblemHighlightFilter.kt => arend/highlight/ArendProblemHighlightFilter.kt} (64%) create mode 100644 src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighter.kt rename src/main/kotlin/org/{vclang/highlight/VcSyntaxHighlighterFactory.kt => arend/highlight/ArendSyntaxHighlighterFactory.kt} (68%) create mode 100644 src/main/kotlin/org/arend/lexer/ArendLexerAdapter.kt create mode 100644 src/main/kotlin/org/arend/module/ArendFakeRawSource.kt create mode 100644 src/main/kotlin/org/arend/module/ArendModuleType.kt rename src/main/kotlin/org/{vclang/module/VcPreludeLibrary.kt => arend/module/ArendPreludeLibrary.kt} (58%) rename src/main/kotlin/org/{vclang/module/VcRawLibrary.kt => arend/module/ArendRawLibrary.kt} (76%) rename src/main/kotlin/org/{vclang/module/VcRawSource.kt => arend/module/ArendRawSource.kt} (51%) rename src/main/kotlin/org/{vclang => arend}/module/ModuleScope.kt (71%) rename src/main/kotlin/org/{vclang/module/util/VcModuleBuilder.kt => arend/module/util/ArendModuleBuilder.kt} (78%) rename src/main/kotlin/org/{vclang/module/util/VcModuleWizardStep.kt => arend/module/util/ArendModuleWizardStep.kt} (85%) rename src/main/kotlin/org/{vclang/module/util/VcProjectStructureDetector.kt => arend/module/util/ArendProjectStructureDetector.kt} (76%) rename src/main/kotlin/org/{vclang => arend}/module/util/ModuleUtils.kt (80%) create mode 100644 src/main/kotlin/org/arend/navigation/ArendClassNavigationContributor.kt rename src/main/kotlin/org/{vclang/navigation/VcNavigationContributorBase.kt => arend/navigation/ArendNavigationContributorBase.kt} (84%) create mode 100644 src/main/kotlin/org/arend/navigation/ArendSymbolNavigationContributor.kt rename src/main/kotlin/org/{vclang => arend}/navigation/Utils.kt (56%) create mode 100644 src/main/kotlin/org/arend/parser/ArendParserDefinition.kt create mode 100644 src/main/kotlin/org/arend/psi/ArendCompositeElementType.kt rename src/main/kotlin/org/{vclang/psi/VcFile.kt => arend/psi/ArendFile.kt} (53%) rename src/main/kotlin/org/{vclang/psi/VcPsiFactory.kt => arend/psi/ArendPsiFactory.kt} (60%) rename src/main/kotlin/org/{vclang/psi/VcPsiPattern.kt => arend/psi/ArendPsiPattern.kt} (97%) rename src/main/kotlin/org/{vclang/psi/VcTokenType.kt => arend/psi/ArendTokenType.kt} (58%) rename src/main/kotlin/org/{vclang => arend}/psi/PsiElementUtils.kt (85%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendAppExprImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcArgumentAppExprImplMixin.kt => arend/psi/ext/ArendArgumentAppExprImplMixin.kt} (56%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendArgumentImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcArrExprImplMixin.kt => arend/psi/ext/ArendArrExprImplMixin.kt} (52%) rename src/main/kotlin/org/{vclang/psi/ext/VcAtomFieldsAccImplMixin.kt => arend/psi/ext/ArendAtomFieldsAccImplMixin.kt} (54%) rename src/main/kotlin/org/{vclang/psi/ext/VcAtomImplMixin.kt => arend/psi/ext/ArendAtomImplMixin.kt} (63%) rename src/main/kotlin/org/{vclang/psi/ext/VcAtomLevelExprImplMixin.kt => arend/psi/ext/ArendAtomLevelExprImplMixin.kt} (68%) rename src/main/kotlin/org/{vclang/psi/ext/VcAtomOnlyLevelExprImplMixin.kt => arend/psi/ext/ArendAtomOnlyLevelExprImplMixin.kt} (63%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendCaseArgImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendCaseExprImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcClauseImplMixin.kt => arend/psi/ext/ArendClauseImplMixin.kt} (51%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendCoClauseImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendCompositeElement.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendConstructorClauseImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendExprImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendLamExprImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendLetClauseImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendLetExprImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcLevelExprImplMixin.kt => arend/psi/ext/ArendLevelExprImplMixin.kt} (69%) rename src/main/kotlin/org/{vclang/psi/ext/VcLiteralImplMixin.kt => arend/psi/ext/ArendLiteralImplMixin.kt} (51%) rename src/main/kotlin/org/{vclang/psi/ext/VcLongNameExprImplMixin.kt => arend/psi/ext/ArendLongNameExprImplMixin.kt} (62%) rename src/main/kotlin/org/{vclang/psi/ext/VcLongNameImplMixin.kt => arend/psi/ext/ArendLongNameImplMixin.kt} (55%) rename src/main/kotlin/org/{vclang/psi/ext/VcNewExprImplMixin.kt => arend/psi/ext/ArendNewExprImplMixin.kt} (56%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendNsIdImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcOnlyLevelExprImplMixin.kt => arend/psi/ext/ArendOnlyLevelExprImplMixin.kt} (74%) rename src/main/kotlin/org/{vclang/psi/ext/VcPatternImplMixin.kt => arend/psi/ext/ArendPatternImplMixin.kt} (74%) create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendPiExprImplMixin.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendReferenceElement.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/ArendSigmaExprImplMixin.kt rename src/main/kotlin/org/{vclang/psi/ext/VcStatCmdImplMixin.kt => arend/psi/ext/ArendStatCmdImplMixin.kt} (55%) rename src/main/kotlin/org/{vclang/psi/ext/VcTeleImplMixin.kt => arend/psi/ext/ArendTeleImplMixin.kt} (62%) rename src/main/kotlin/org/{vclang/psi/ext/VcTupleExprImplMixin.kt => arend/psi/ext/ArendTupleExprImplMixin.kt} (53%) rename src/main/kotlin/org/{vclang/psi/ext/VcTupleImplMixin.kt => arend/psi/ext/ArendTupleImplMixin.kt} (56%) rename src/main/kotlin/org/{vclang/psi/ext/VcUniverseExprImplMixin.kt => arend/psi/ext/ArendUniverseExprImplMixin.kt} (50%) create mode 100644 src/main/kotlin/org/arend/psi/ext/Identifiers.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/PsiConcreteReferable.kt rename src/main/kotlin/org/{vclang => arend}/psi/ext/PsiLocatedReferable.kt (73%) rename src/main/kotlin/org/{vclang => arend}/psi/ext/PsiReferable.kt (58%) rename src/main/kotlin/org/{vclang => arend}/psi/ext/Universes.kt (70%) create mode 100644 src/main/kotlin/org/arend/psi/ext/impl/ArendDefModuleMixin.kt rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/ClassDefinition.kt (69%) rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/ClassField.kt (56%) create mode 100644 src/main/kotlin/org/arend/psi/ext/impl/ClassFieldImpl.kt rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/ClassFieldSyn.kt (57%) rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/ClassInstance.kt (51%) create mode 100644 src/main/kotlin/org/arend/psi/ext/impl/Constructor.kt rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/DataDefinition.kt (55%) rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/Definition.kt (60%) create mode 100644 src/main/kotlin/org/arend/psi/ext/impl/FieldDefIdentifierAdapter.kt create mode 100644 src/main/kotlin/org/arend/psi/ext/impl/FunctionDefinition.kt rename src/main/kotlin/org/{vclang => arend}/psi/ext/impl/Referable.kt (66%) rename src/main/kotlin/org/{vclang/psi/stubs/VcStubElementType.kt => arend/psi/stubs/ArendStubElementType.kt} (59%) create mode 100644 src/main/kotlin/org/arend/psi/stubs/StubImplementations.kt create mode 100644 src/main/kotlin/org/arend/psi/stubs/StubIndexing.kt create mode 100644 src/main/kotlin/org/arend/psi/stubs/StubInterfaces.kt create mode 100644 src/main/kotlin/org/arend/psi/stubs/index/ArendDefinitionIndex.kt create mode 100644 src/main/kotlin/org/arend/psi/stubs/index/ArendGotoClassIndex.kt create mode 100644 src/main/kotlin/org/arend/psi/stubs/index/ArendNamedElementIndex.kt rename src/main/kotlin/org/{vclang => arend}/quickfix/InstanceQuickFix.kt (85%) rename src/main/kotlin/org/{vclang => arend}/quickfix/ResolveRefQuickFix.kt (87%) rename src/main/kotlin/org/{vclang/refactoring/VcNamesValidator.kt => arend/refactoring/ArendNamesValidator.kt} (64%) create mode 100644 src/main/kotlin/org/arend/refactoring/ArendRefactoringSupportProvider.kt rename src/main/kotlin/org/{vclang/refactoring/VcRenameInputValidator.kt => arend/refactoring/ArendRenameInputValidator.kt} (67%) rename src/main/kotlin/org/{vclang/resolving/VcReferableConverter.kt => arend/resolving/ArendReferableConverter.kt} (82%) rename src/main/kotlin/org/{vclang/resolving/VcReference.kt => arend/resolving/ArendReference.kt} (59%) rename src/main/kotlin/org/{vclang/resolving/VcResolveCache.kt => arend/resolving/ArendResolveCache.kt} (64%) rename src/main/kotlin/org/{vclang => arend}/resolving/DataLocalReferable.kt (66%) rename src/main/kotlin/org/{vclang => arend}/resolving/DataLocatedReferable.kt (89%) rename src/main/kotlin/org/{vclang => arend}/resolving/PsiConcreteProvider.kt (72%) create mode 100644 src/main/kotlin/org/arend/resolving/PsiPartialConcreteProvider.kt rename src/main/kotlin/org/{vclang/search/VcCustomSearcher.kt => arend/search/ArendCustomSearcher.kt} (76%) rename src/main/kotlin/org/{vclang/search/VcFindUsagesProvider.kt => arend/search/ArendFindUsagesProvider.kt} (59%) rename src/main/kotlin/org/{vclang/search/VcGroupRuleProviders.kt => arend/search/ArendGroupRuleProviders.kt} (61%) rename src/main/kotlin/org/{vclang/search/VcWordScanner.kt => arend/search/ArendWordScanner.kt} (78%) rename src/main/kotlin/org/{vclang/structure/VcPsiStructureViewFactory.kt => arend/structure/ArendPsiStructureViewFactory.kt} (70%) rename src/main/kotlin/org/{vclang/structure/VcStructureViewModel.kt => arend/structure/ArendStructureViewModel.kt} (57%) create mode 100644 src/main/kotlin/org/arend/typechecking/ArendLibraryResolver.kt create mode 100644 src/main/kotlin/org/arend/typechecking/PsiInstanceProviderSet.kt rename src/main/kotlin/org/{vclang => arend}/typechecking/TestBasedTypechecking.kt (75%) rename src/main/kotlin/org/{vclang => arend}/typechecking/TypeCheckingService.kt (73%) rename src/main/kotlin/org/{vclang => arend}/typechecking/error/LogErrorReporter.kt (61%) rename src/main/kotlin/org/{vclang => arend}/typechecking/error/ParserError.kt (72%) rename src/main/kotlin/org/{vclang => arend}/typechecking/error/PsiSourceInfo.kt (66%) rename src/main/kotlin/org/{vclang => arend}/typechecking/error/TypecheckingErrorReporter.kt (88%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/DefinitionProxy.kt (96%) create mode 100644 src/main/kotlin/org/arend/typechecking/execution/FullModulePath.kt rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckCommand.kt (76%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckProcessHandler.kt (83%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckRunConfigurationEditor.kt (81%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckRunConfigurationProducer.kt (71%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckRunLineMarkerContributor.kt (70%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypeCheckRunner.kt (79%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/TypecheckingEventsProcessor.kt (95%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/configurations/TypeCheckConfiguration.kt (70%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/configurations/TypeCheckConfigurationType.kt (81%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt (78%) rename src/main/kotlin/org/{vclang => arend}/typechecking/execution/configurations/TypeCheckRunState.kt (91%) rename src/main/kotlin/org/{vclang => arend}/typing/BinOpParser.kt (77%) rename src/main/kotlin/org/{vclang => arend}/typing/ClassesUtil.kt (71%) rename src/main/kotlin/org/{vclang => arend}/typing/ExpectedTypeVisitor.kt (89%) rename src/main/kotlin/org/{vclang => arend}/typing/GetKindVisitor.kt (86%) rename src/main/kotlin/org/{vclang => arend}/typing/ReferableExtractVisitor.kt (82%) rename src/main/kotlin/org/{vclang => arend}/typing/TypecheckingVisitor.kt (90%) rename src/main/kotlin/org/{vclang => arend}/typing/TypingVisitor.kt (94%) delete mode 100644 src/main/kotlin/org/vclang/VcFileType.kt delete mode 100644 src/main/kotlin/org/vclang/codeInsight/VcDeclarationRangeHandler.kt delete mode 100644 src/main/kotlin/org/vclang/editor/VcColorSettingsPage.kt delete mode 100644 src/main/kotlin/org/vclang/hierarchy/clazz/VcSuperClassTreeStructure.kt delete mode 100644 src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighter.kt delete mode 100644 src/main/kotlin/org/vclang/lexer/VcLexerAdapter.kt delete mode 100644 src/main/kotlin/org/vclang/module/VcFakeRawSource.kt delete mode 100644 src/main/kotlin/org/vclang/module/VcModuleType.kt delete mode 100644 src/main/kotlin/org/vclang/navigation/VcClassNavigationContributor.kt delete mode 100644 src/main/kotlin/org/vclang/navigation/VcSymbolNavigationContributor.kt delete mode 100644 src/main/kotlin/org/vclang/parser/VcParserDefinition.kt delete mode 100644 src/main/kotlin/org/vclang/psi/VcCompositeElementType.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/Identifiers.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/PsiConcreteReferable.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcAppExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcArgumentImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcCaseArgImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcCaseExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcCoClauseImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcCompositeElement.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcConstructorClauseImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcLamExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcLetClauseImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcLetExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcNsIdImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcPiExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcReferenceElement.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/VcSigmaExprImplMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldImpl.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/impl/Constructor.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/impl/FieldDefIdentifierAdapter.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/impl/FunctionDefinition.kt delete mode 100644 src/main/kotlin/org/vclang/psi/ext/impl/VcDefModuleMixin.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/StubImplementations.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/StubIndexing.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/StubInterfaces.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/index/VcDefinitionIndex.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/index/VcGotoClassIndex.kt delete mode 100644 src/main/kotlin/org/vclang/psi/stubs/index/VcNamedElementIndex.kt delete mode 100644 src/main/kotlin/org/vclang/refactoring/VcRefactoringSupportProvider.kt delete mode 100644 src/main/kotlin/org/vclang/resolving/PsiPartialConcreteProvider.kt delete mode 100644 src/main/kotlin/org/vclang/typechecking/PsiInstanceProviderSet.kt delete mode 100644 src/main/kotlin/org/vclang/typechecking/VcLibraryResolver.kt delete mode 100644 src/main/kotlin/org/vclang/typechecking/execution/FullModulePath.kt rename src/main/resources/fileTemplates/internal/{Vclang File.vc.ft => Arend File.ard.ft} (100%) create mode 100644 src/main/resources/fileTemplates/internal/Arend File.ard.html delete mode 100644 src/main/resources/fileTemplates/internal/Vclang File.vc.html rename src/main/resources/lib/{Prelude.vcc => Prelude.arc} (100%) rename src/main/resources/lib/{Prelude.vc => Prelude.ard} (100%) rename src/test/kotlin/org/{vclang/VcTestBase.kt => arend/ArendTestBase.kt} (86%) create mode 100644 src/test/kotlin/org/arend/ArendTestCase.kt rename src/test/kotlin/org/{vclang => arend}/FileTree.kt (93%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcCompletionTestBase.kt => arend/codeInsight/completion/ArendCompletionTestBase.kt} (86%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcFieldCompletionTest.kt => arend/codeInsight/completion/ArendFieldCompletionTest.kt} (97%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcFilteredScope.kt => arend/codeInsight/completion/ArendFilteredScope.kt} (97%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcKeywordCompletionTest.kt => arend/codeInsight/completion/ArendKeywordCompletionTest.kt} (90%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcModuleCompletionTest.kt => arend/codeInsight/completion/ArendModuleCompletionTest.kt} (71%) rename src/test/kotlin/org/{vclang/codeInsight/completion/VcPreludeCompletionTest.kt => arend/codeInsight/completion/ArendPreludeCompletionTest.kt} (61%) rename src/test/kotlin/org/{vclang/commenter/VcCommenterTest.kt => arend/commenter/ArendCommenterTest.kt} (79%) rename src/test/kotlin/org/{vclang => arend}/quickfix/ImplementFieldsQuickFixTest.kt (94%) rename src/test/kotlin/org/{vclang => arend}/quickfix/QuickFixTestBase.kt (50%) rename src/test/kotlin/org/{vclang => arend}/quickfix/ResolveRefQuickFixTest.kt (91%) rename src/test/kotlin/org/{vclang => arend}/refactoring/RenameTest.kt (85%) delete mode 100644 src/test/kotlin/org/vclang/VcTestCase.kt rename src/test/resources/org/{vclang/commenter/fixtures/indented_single_line_comment.vc => arend/commenter/fixtures/indented_single_line_comment.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/indented_single_line_comment_after.vc => arend/commenter/fixtures/indented_single_line_comment_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line.vc => arend/commenter/fixtures/multi_line.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_after.vc => arend/commenter/fixtures/multi_line_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_block.vc => arend/commenter/fixtures/multi_line_block.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_block_after.vc => arend/commenter/fixtures/multi_line_block_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_block_uncomment.vc => arend/commenter/fixtures/multi_line_block_uncomment.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_block_uncomment_after.vc => arend/commenter/fixtures/multi_line_block_uncomment_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_uncomment.vc => arend/commenter/fixtures/multi_line_uncomment.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/multi_line_uncomment_after.vc => arend/commenter/fixtures/multi_line_uncomment_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line.vc => arend/commenter/fixtures/single_line.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_after.vc => arend/commenter/fixtures/single_line_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_block.vc => arend/commenter/fixtures/single_line_block.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_block_after.vc => arend/commenter/fixtures/single_line_block_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_block_uncomment.vc => arend/commenter/fixtures/single_line_block_uncomment.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_block_uncomment_after.vc => arend/commenter/fixtures/single_line_block_uncomment_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_uncomment.vc => arend/commenter/fixtures/single_line_uncomment.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_uncomment_after.vc => arend/commenter/fixtures/single_line_uncomment_after.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_uncomment_with_space.vc => arend/commenter/fixtures/single_line_uncomment_with_space.ard} (100%) rename src/test/resources/org/{vclang/commenter/fixtures/single_line_uncomment_with_space_after.vc => arend/commenter/fixtures/single_line_uncomment_with_space_after.ard} (100%) diff --git a/.gitignore b/.gitignore index 9520cbdc5..9aa81aa59 100644 --- a/.gitignore +++ b/.gitignore @@ -24,8 +24,8 @@ hs_err_pid* # Gradle wrapper !gradle/wrapper/gradle-wrapper.jar -# Vclang -!lib/vclang-*.jar +# Arend +!lib/arend-*.jar # Intellij *.iml diff --git a/.travis.yml b/.travis.yml index 64977b9ba..6b01e17b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,9 @@ branches: - travis install: - - git clone https://github.com/JetBrains/vclang.git ../vclang + - git clone https://github.com/JetBrains/arend.git ../arend -script: ./gradlew check -x :vclang:check -Pkotlin.incremental=false -Dkotlin.daemon.jvm.options=-Xmx1024m +script: ./gradlew check -x :arend:check -Pkotlin.incremental=false -Dkotlin.daemon.jvm.options=-Xmx1024m before_cache: - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock diff --git a/LICENSE b/LICENSE index ab367ca2a..f28004265 100644 --- a/LICENSE +++ b/LICENSE @@ -12,15 +12,15 @@ 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. -Copyright for portions of project Vclang plugin for the IntelliJ IDEA are -held by Valery Isaev, 2015 as part of project Vclang. +Copyright for portions of project Arend plugin for the IntelliJ IDEA are +held by Valery Isaev, 2015 as part of project Arend. -Copyright for additional portions of project Vclang plugin for the IntelliJ +Copyright for additional portions of project Arend plugin for the IntelliJ IDEA are held by Aleksey Kladov, Evgeny Kurbatsky, Alexey Kudinkin and contributors, 2015 as part of project Rust plugin for the IntelliJ Platform and are provided under the MIT license. -All other copyright for project Vclang plugin for the IntelliJ IDEA are +All other copyright for project Arend plugin for the IntelliJ IDEA are held by Mikhail Chernyavsky, Valery Isaev, Sergey Sinchuk and Fedor Part, 2017. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR diff --git a/README.md b/README.md index 7ee03eaa0..c39bec62f 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ -# Vclang plugin for IntelliJ IDEA +# Arend plugin for IntelliJ IDEA [![JetBrains incubator project](http://jb.gg/badges/incubator.svg)](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub) [![Build Status][travis-build-status-svg]][travis-build-status] -Plugin that implements [Vclang](https://github.com/JetBrains/vclang) support +Plugin that implements [Arend](https://github.com/JetBrains/Arend) support in [IntelliJ IDEA](http://www.jetbrains.com/idea/) and other IntelliJ-based products. ## Clone ``` -git clone https://github.com/JetBrains/vclang -git clone https://github.com/JetBrains/intellij-vclang.git -cd intellij-vclang +git clone https://github.com/JetBrains/Arend +git clone https://github.com/JetBrains/intellij-arend.git +cd intellij-arend ``` ## Building @@ -50,5 +50,5 @@ A Program Structure Interface (PSI) tree viewer. The project is configured to build and run tests with Travis CI, which you can enable in your forks. -[travis-build-status]: https://travis-ci.org/JetBrains/intellij-vclang?branch=dev -[travis-build-status-svg]: https://travis-ci.org/JetBrains/intellij-vclang.svg?branch=dev +[travis-build-status]: https://travis-ci.org/JetBrains/intellij-arend?branch=dev +[travis-build-status-svg]: https://travis-ci.org/JetBrains/intellij-arend.svg?branch=dev diff --git a/build.gradle.kts b/build.gradle.kts index 9b6364e5b..aaaf97608 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,7 +19,7 @@ repositories { } dependencies { - compile(project(":vclang")) + compile(project(":Arend")) compileOnly(kotlin("stdlib-jdk8")) } @@ -34,7 +34,7 @@ tasks.withType { languageVersion = "1.2" apiVersion = "1.2" } - dependsOn("generateVcLexer", "generateVcParser") + dependsOn("generateArendLexer", "generateArendParser") } java.sourceSets { @@ -51,28 +51,28 @@ idea { intellij { version = "2018.2" - pluginName = "intellij-vclang" + pluginName = "Arend" updateSinceUntilBuild = true instrumentCode = false setPlugins("yaml") } -task("generateVcLexer") { +task("generateArendLexer") { description = "Generates lexer" group = "Source" - source = "src/main/grammars/VcLexer.flex" - targetDir = "src/gen/org/vclang/lexer" - targetClass = "VcLexer" + source = "src/main/grammars/ArendLexer.flex" + targetDir = "src/gen/org/arend/lexer" + targetClass = "ArendLexer" purgeOldFiles = true } -task("generateVcParser") { +task("generateArendParser") { description = "Generates parser" group = "Source" - source = "src/main/grammars/VcParser.bnf" + source = "src/main/grammars/ArendParser.bnf" targetRoot = "src/gen" - pathToParser = "/org/vclang/parser/VcParser.java" - pathToPsiRoot = "/org/vclang/psi" + pathToParser = "/org/arend/parser/ArendParser.java" + pathToPsiRoot = "/org/arend/psi" purgeOldFiles = true } @@ -94,10 +94,10 @@ afterEvaluate { } task("prelude") { - from(project(":vclang").file("lib/Prelude.vc")) - from(project(":vclang").file("${project(":vclang").buildDir}/classes/main/lib/Prelude.vcc")) + from(project(":Arend").file("lib/Prelude.ard")) + from(project(":Arend").file("${project(":Arend").buildDir}/classes/main/lib/Prelude.arc")) into("src/main/resources/lib") - dependsOn(project(":vclang").relativeProjectPath(":prelude")) + dependsOn(project(":Arend").relativeProjectPath(":prelude")) } tasks.withType { diff --git a/settings.gradle.kts b/settings.gradle.kts index dfe8dca06..f5a2c0e25 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,3 @@ -rootProject.name = "intellij-vclang" +rootProject.name = "intellij-arend" -includeFlat("vclang") +includeFlat("Arend") diff --git a/src/main/grammars/VcLexer.flex b/src/main/grammars/ArendLexer.flex similarity index 97% rename from src/main/grammars/VcLexer.flex rename to src/main/grammars/ArendLexer.flex index 20086c83d..f47f9c24c 100644 --- a/src/main/grammars/VcLexer.flex +++ b/src/main/grammars/ArendLexer.flex @@ -1,22 +1,22 @@ -package org.vclang.lexer; +package org.arend.lexer; import com.intellij.lexer.FlexLexer; import com.intellij.psi.tree.IElementType; import static com.intellij.psi.TokenType.BAD_CHARACTER; import static com.intellij.psi.TokenType.WHITE_SPACE; -import static org.vclang.psi.VcElementTypes.*; +import static org.arend.psi.ArendElementTypes.*; %% %{ - public VcLexer() { + public ArendLexer() { this((java.io.Reader)null); } %} %public -%class VcLexer +%class ArendLexer %implements FlexLexer %function advance %type IElementType diff --git a/src/main/grammars/VcParser.bnf b/src/main/grammars/ArendParser.bnf similarity index 61% rename from src/main/grammars/VcParser.bnf rename to src/main/grammars/ArendParser.bnf index bf1963137..576638352 100644 --- a/src/main/grammars/VcParser.bnf +++ b/src/main/grammars/ArendParser.bnf @@ -1,18 +1,18 @@ { - parserClass = "org.vclang.parser.VcParser" + parserClass = "org.arend.parser.ArendParser" - implements = 'org.vclang.psi.ext.VcCompositeElement' - extends = 'org.vclang.psi.ext.VcCompositeElementImpl' + implements = 'org.arend.psi.ext.ArendCompositeElement' + extends = 'org.arend.psi.ext.ArendCompositeElementImpl' - elementTypeHolderClass = "org.vclang.psi.VcElementTypes" + elementTypeHolderClass = "org.arend.psi.ArendElementTypes" - elementTypeClass = "org.vclang.psi.VcCompositeElementType" - tokenTypeClass = "org.vclang.psi.VcTokenType" + elementTypeClass = "org.arend.psi.ArendCompositeElementType" + tokenTypeClass = "org.arend.psi.ArendTokenType" - psiClassPrefix = "Vc" + psiClassPrefix = "Arend" psiImplClassSuffix = "Impl" - psiPackage = "org.vclang.psi" - psiImplPackage = "org.vclang.psi.impl" + psiPackage = "org.arend.psi" + psiImplPackage = "org.arend.psi.impl" generateTokenAccessors = true @@ -102,9 +102,9 @@ private statement_recovery ::= statement_recover { statCmd ::= (OPEN_KW | IMPORT_KW) ns_longName nsUsing? [HIDING_KW LPAREN <> RPAREN] { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.NamespaceCommandHolder" ] - mixin = "org.vclang.psi.ext.VcStatCmdImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.NamespaceCommandHolder" ] + mixin = "org.arend.psi.ext.ArendStatCmdImplMixin" } private ns_longName ::= longName { @@ -128,9 +128,9 @@ private nsUsingParams ::= LPAREN <>? RPAREN { private nsUsing_recover ::= !(LPAREN | HIDING_KW) & statement_recover nsId ::= ns_refIdentifier [AS_KW prec? defIdentifier] { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.NameRenaming" ] - mixin = "org.vclang.psi.ext.VcNsIdImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.NameRenaming" ] + mixin = "org.arend.psi.ext.ArendNsIdImplMixin" recoverWhile = nsId_recover } @@ -152,24 +152,24 @@ private classFieldOrImplement ::= pipe_def (classField | classImplement) { pin = classField ::= prec? defIdentifier_typeTele typeTele* COLON expr { pin = 4 - implements = [ "org.vclang.psi.ext.PsiLocatedReferable" - "com.jetbrains.jetpad.vclang.term.group.Group.InternalReferable" - "com.jetbrains.jetpad.vclang.naming.reference.FieldReferable" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ClassField" ] - mixin = "org.vclang.psi.ext.impl.ClassFieldAdapter" - stubClass = "org.vclang.psi.stubs.VcClassFieldStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.PsiLocatedReferable" + "org.arend.term.group.Group.InternalReferable" + "org.arend.naming.reference.FieldReferable" + "org.arend.term.abs.Abstract.ClassField" ] + mixin = "org.arend.psi.ext.impl.ClassFieldAdapter" + stubClass = "org.arend.psi.stubs.ArendClassFieldStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } classFieldSyn ::= refIdentifier fat_arrow_def prec? defIdentifier_classFieldSyn { pin = 1 - implements = [ "org.vclang.psi.ext.PsiLocatedReferable" - "com.jetbrains.jetpad.vclang.term.group.Group.InternalReferable" - "com.jetbrains.jetpad.vclang.naming.reference.FieldReferable" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ClassFieldSynonym" ] - mixin = "org.vclang.psi.ext.impl.ClassFieldSynAdapter" - stubClass = "org.vclang.psi.stubs.VcClassFieldSynStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.PsiLocatedReferable" + "org.arend.term.group.Group.InternalReferable" + "org.arend.naming.reference.FieldReferable" + "org.arend.term.abs.Abstract.ClassFieldSynonym" ] + mixin = "org.arend.psi.ext.impl.ClassFieldSynAdapter" + stubClass = "org.arend.psi.stubs.ArendClassFieldSynStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private defIdentifier_classFieldSyn ::= defIdentifier { @@ -178,30 +178,30 @@ private defIdentifier_classFieldSyn ::= defIdentifier { classImplement ::= coClausePrivate { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ClassFieldImpl" ] - mixin = "org.vclang.psi.ext.impl.ClassFieldImplAdapter" - stubClass = "org.vclang.psi.stubs.VcClassImplementStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.ClassFieldImpl" ] + mixin = "org.arend.psi.ext.impl.ClassFieldImplAdapter" + stubClass = "org.arend.psi.stubs.ArendClassImplementStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } definition ::= defFunction | defData | defClass | defInstance { - implements = [ "org.vclang.psi.ext.PsiConcreteReferable" - "com.jetbrains.jetpad.vclang.term.group.ChildGroup" ] - mixin = "org.vclang.psi.ext.impl.DefinitionAdapter" + implements = [ "org.arend.psi.ext.PsiConcreteReferable" + "org.arend.term.group.ChildGroup" ] + mixin = "org.arend.psi.ext.impl.DefinitionAdapter" } defModule ::= moduleHeader where? { pin = 1 - implements = [ "org.vclang.psi.ext.PsiLocatedReferable" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.SourceNode" - "com.jetbrains.jetpad.vclang.term.group.ChildGroup" ] - mixin = "org.vclang.psi.ext.impl.VcDefModuleMixin" - stubClass = "org.vclang.psi.stubs.VcDefModuleStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.PsiLocatedReferable" + "org.arend.term.abs.Abstract.SourceNode" + "org.arend.term.group.ChildGroup" ] + mixin = "org.arend.psi.ext.impl.ArendDefModuleMixin" + stubClass = "org.arend.psi.stubs.ArendDefModuleStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private moduleHeader ::= MODULE_KW defIdentifier { @@ -211,10 +211,10 @@ private moduleHeader ::= MODULE_KW defIdentifier { defFunction ::= (FUNCTION_KW | COERCE_KW) prec? defIdentifier_func nameTele* [COLON expr] functionBody where? { pin = 1 - implements = "com.jetbrains.jetpad.vclang.term.abs.Abstract.FunctionDefinition" - mixin = "org.vclang.psi.ext.impl.FunctionDefinitionAdapter" - stubClass = "org.vclang.psi.stubs.VcDefFunctionStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = "org.arend.term.abs.Abstract.FunctionDefinition" + mixin = "org.arend.psi.ext.impl.FunctionDefinitionAdapter" + stubClass = "org.arend.psi.stubs.ArendDefFunctionStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private defIdentifier_func ::= defIdentifier { @@ -225,9 +225,9 @@ private defIdentifier_func_recover ::= !(COLON | FAT_ARROW | COWITH_KW | WITH_KW defData ::= dataKw prec? defIdentifier_typeTele typeTele* dataUniverse? dataBody where? { pin = 1 - mixin = "org.vclang.psi.ext.impl.DataDefinitionAdapter" - stubClass = "org.vclang.psi.stubs.VcDefDataStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + mixin = "org.arend.psi.ext.impl.DataDefinitionAdapter" + stubClass = "org.arend.psi.stubs.ArendDefDataStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private dataUniverse ::= COLON universeExpr { @@ -246,10 +246,10 @@ private truncatedKW ::= TRUNCATED_KW { } defClass ::= (defClassClass | defClassRecord) where? { - implements = "com.jetbrains.jetpad.vclang.naming.reference.ClassReferable" - mixin = "org.vclang.psi.ext.impl.ClassDefinitionAdapter" - stubClass = "org.vclang.psi.stubs.VcDefClassStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = "org.arend.naming.reference.ClassReferable" + mixin = "org.arend.psi.ext.impl.ClassDefinitionAdapter" + stubClass = "org.arend.psi.stubs.ArendDefClassStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private defClassClass ::= CLASS_KW defClassHeader classBody? { pin = 1 } @@ -268,9 +268,9 @@ private recordBody ::= classStats { defInstance ::= INSTANCE_KW defIdentifier_instance nameTele* COLON argumentAppExpr coClauses? where? { pin = 1 - mixin = "org.vclang.psi.ext.impl.InstanceAdapter" - stubClass = "org.vclang.psi.stubs.VcDefInstanceStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + mixin = "org.arend.psi.ext.impl.InstanceAdapter" + stubClass = "org.arend.psi.stubs.ArendDefInstanceStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private defIdentifier_instance ::= defIdentifier { @@ -312,9 +312,9 @@ private def_recover ::= !(ID | assoc) & statement_recover constructorClause ::= PIPE <> fat_arrow_def_pipe_lbrace (constructor | LBRACE <> RBRACE) { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ConstructorClause" ] - mixin = "org.vclang.psi.ext.VcConstructorClauseImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.ConstructorClause" ] + mixin = "org.arend.psi.ext.ArendConstructorClauseImplMixin" } private fat_arrow_def ::= FAT_ARROW { @@ -336,9 +336,9 @@ private statementList ::= LBRACE statement* RBRACE { } pattern ::= atomPattern | patternConstructor { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Pattern" ] - mixin = "org.vclang.psi.ext.VcPatternImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Pattern" ] + mixin = "org.arend.psi.ext.ArendPatternImplMixin" recoverWhile = pattern_recover } @@ -347,9 +347,9 @@ private pattern_recover ::= !(RPAREN | RBRACE | FAT_ARROW | PIPE | COMMA) & stat private patternConstructor ::= defIdentifier_pattern atomPatternOrPrefix* { pin = 1 } atomPatternOrPrefix ::= atomPattern | defIdentifier_pattern { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Pattern" ] - mixin = "org.vclang.psi.ext.VcPatternImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Pattern" ] + mixin = "org.arend.psi.ext.ArendPatternImplMixin" } private defIdentifier_pattern ::= defIdentifier { @@ -366,13 +366,13 @@ atomPattern ::= LPAREN <>? RPAREN constructor ::= prec? defIdentifier_typeTele typeTele* [COLON expr] [elim? clausesWithBraces] { pin = 2 - implements = [ "org.vclang.psi.ext.PsiLocatedReferable" - "com.jetbrains.jetpad.vclang.term.group.Group.InternalReferable" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Constructor" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ConstructorClause" ] - mixin = "org.vclang.psi.ext.impl.ConstructorAdapter" - stubClass = "org.vclang.psi.stubs.VcConstructorStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.PsiLocatedReferable" + "org.arend.term.group.Group.InternalReferable" + "org.arend.term.abs.Abstract.Constructor" + "org.arend.term.abs.Abstract.ConstructorClause" ] + mixin = "org.arend.psi.ext.impl.ConstructorAdapter" + stubClass = "org.arend.psi.stubs.ArendConstructorStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" } private assoc ::= NON_ASSOC_KW | LEFT_ASSOC_KW | RIGHT_ASSOC_KW | INFIX_NON_KW | INFIX_LEFT_KW | INFIX_RIGHT_KW @@ -386,10 +386,10 @@ expr ::= arrExpr | letExpr | newExpr | caseExpr { - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Expression" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Parameter" ] - mixin = "org.vclang.psi.ext.VcExprImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.Expression" + "org.arend.term.abs.Abstract.Parameter" ] + mixin = "org.arend.psi.ext.ArendExprImplMixin" } private expr_recover ::= !(LBRACE | RBRACE | RPAREN | IN_KW | ARROW | COMMA | PIPE | COWITH_KW | WITH_KW | ELIM_KW | FAT_ARROW | AS_KW | RETURN_KW | COLON) & statement_recover @@ -397,13 +397,13 @@ private expr_recover ::= !(LBRACE | RBRACE | RPAREN | IN_KW | ARROW | COMMA | PI arrExpr ::= expr ARROW expr { pin = 2 rightAssociative = true - mixin = "org.vclang.psi.ext.VcArrExprImplMixin" + mixin = "org.arend.psi.ext.ArendArrExprImplMixin" } newExpr ::= NEW_KW argumentAppExpr newExprTail | appExpr newExprTail { pin(".*") = 1 - mixin = "org.vclang.psi.ext.VcNewExprImplMixin" + mixin = "org.arend.psi.ext.ArendNewExprImplMixin" } private coClauseSequence ::= coClause* /* <>? */ { @@ -416,22 +416,22 @@ universeExpr ::= universeAppExpr | setUniverseAppExpr | truncatedUniverseAppExpr | PROP_KW { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcUniverseExprImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendUniverseExprImplMixin" } appExpr ::= universeAppExpr | setUniverseAppExpr | truncatedUniverseAppExpr | argumentAppExpr { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcAppExprImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendAppExprImplMixin" recoverWhile = expr_recover } caseExpr ::= CASE_KW <> returnCaseExpr? WITH_KW clausesWithBraces { pin = 1 - mixin = "org.vclang.psi.ext.VcCaseExprImplMixin" + mixin = "org.arend.psi.ext.ArendCaseExprImplMixin" recoverWhile = expr_recover } @@ -444,9 +444,9 @@ private returnCaseExpr_recover ::= !WITH_KW & expr_recover caseArg ::= caseArgExprAs [COLON expr] { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.CaseArgument" ] - mixin = "org.vclang.psi.ext.VcCaseArgImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.CaseArgument" ] + mixin = "org.arend.psi.ext.ArendCaseArgImplMixin" recoverWhile = caseArg_recover } @@ -467,22 +467,22 @@ private caseArgExpr_recover ::= !(AS_KW | COLON) & expr_recover piExpr ::= PI_KW typeTele+ ARROW expr { pin = 1 - mixin = "org.vclang.psi.ext.VcPiExprImplMixin" + mixin = "org.arend.psi.ext.ArendPiExprImplMixin" } sigmaExpr ::= SIGMA_KW typeTele* { pin = 1 - mixin = "org.vclang.psi.ext.VcSigmaExprImplMixin" + mixin = "org.arend.psi.ext.ArendSigmaExprImplMixin" } lamExpr ::= LAM_KW nameTele+ FAT_ARROW expr { pin = 1 - mixin = "org.vclang.psi.ext.VcLamExprImplMixin" + mixin = "org.arend.psi.ext.ArendLamExprImplMixin" } letExpr ::= LET_KW <> IN_KW expr { pin = 1 - mixin = "org.vclang.psi.ext.VcLetExprImplMixin" + mixin = "org.arend.psi.ext.ArendLetExprImplMixin" } functionClauses ::= clausesWithBraces | (pipe_pattern clause)* @@ -503,17 +503,17 @@ private pipe_seq_recover ::= !(PIPE | RBRACE) & statement_recover clause ::= <> [FAT_ARROW expr] { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.FunctionClause" ] - mixin = "org.vclang.psi.ext.VcClauseImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.FunctionClause" ] + mixin = "org.arend.psi.ext.ArendClauseImplMixin" recoverWhile = pipe_seq_recover } coClause ::= PIPE coClausePrivate { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ClassFieldImpl" ] - mixin = "org.vclang.psi.ext.VcCoClauseImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.ClassFieldImpl" ] + mixin = "org.arend.psi.ext.ArendCoClauseImplMixin" recoverWhile = pipe_seq_recover } @@ -525,9 +525,9 @@ private coClauseRec ::= LBRACE coClauseSequence RBRACE { pin = 1 } letClause ::= defIdentifier_letClause nameTele* typeAnnotation? FAT_ARROW expr { pin = 1 - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LetClause" ] - mixin = "org.vclang.psi.ext.VcLetClauseImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.LetClause" ] + mixin = "org.arend.psi.ext.ArendLetClauseImplMixin" } private defIdentifier_letClause ::= defIdentifier { @@ -542,9 +542,9 @@ levelExpr ::= atomLevelExpr | SUC_KW atomLevelExpr | MAX_KW atomLevelExpr atomLevelExpr { pin(".*") = 1 - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LevelExpression" ] - mixin = "org.vclang.psi.ext.VcLevelExprImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.LevelExpression" ] + mixin = "org.arend.psi.ext.ArendLevelExprImplMixin" recoverWhile = levelExpr_recover } @@ -555,33 +555,33 @@ atomLevelExpr ::= LP_KW | NUMBER | LPAREN levelExpr RPAREN { pin(".*") = 1 - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LevelExpression" ] - mixin = "org.vclang.psi.ext.VcAtomLevelExprImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.LevelExpression" ] + mixin = "org.arend.psi.ext.ArendAtomLevelExprImplMixin" } universeAppExpr ::= UNIVERSE [atomLevelExpr atomLevelExpr?] { pin = 1 - mixin = "org.vclang.psi.ext.VcUniverseAppExprImplMixin" + mixin = "org.arend.psi.ext.ArendUniverseAppExprImplMixin" } setUniverseAppExpr ::= SET atomLevelExpr? { pin = 1 - mixin = "org.vclang.psi.ext.VcSetUniverseAppExprImplMixin" + mixin = "org.arend.psi.ext.ArendSetUniverseAppExprImplMixin" } truncatedUniverseAppExpr ::= TRUNCATED_UNIVERSE atomLevelExpr? { pin = 1 - mixin = "org.vclang.psi.ext.VcTruncatedUniverseAppExprImplMixin" + mixin = "org.arend.psi.ext.ArendTruncatedUniverseAppExprImplMixin" } onlyLevelExpr ::= atomOnlyLevelExpr | MAX_KW atomLevelExpr atomLevelExpr | SUC_KW atomLevelExpr { pin(".*") = 1 - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LevelExpression" ] - mixin = "org.vclang.psi.ext.VcOnlyLevelExprImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.LevelExpression" ] + mixin = "org.arend.psi.ext.ArendOnlyLevelExprImplMixin" } levelsExpr ::= levelsLevels | LPAREN levelsExpr RPAREN @@ -591,21 +591,21 @@ private levelsLevels ::= LEVELS_KW (PROP_KW | (atomLevelExpr | UNDERSCORE) (atom atomOnlyLevelExpr ::= LP_KW | LH_KW | LPAREN onlyLevelExpr RPAREN { - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LevelExpression" ] - mixin = "org.vclang.psi.ext.VcAtomOnlyLevelExprImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.LevelExpression" ] + mixin = "org.arend.psi.ext.ArendAtomOnlyLevelExprImplMixin" } argumentAppExpr ::= (longNameExpr | atomFieldsAcc) (argument | argumentRecovery)* { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcArgumentAppExprImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendArgumentAppExprImplMixin" name = "defCall" } longNameExpr ::= longName (levelsExpr | atomOnlyLevelExpr atomOnlyLevelExpr?) { pin = 2 - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcLongNameExprImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendLongNameExprImplMixin" } fieldAcc ::= DOT NUMBER { pin = 1 } @@ -614,29 +614,29 @@ atom ::= literal | tuple | NEGATIVE_NUMBER | NUMBER { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcAtomImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendAtomImplMixin" } tuple ::= LPAREN <>? RPAREN { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcTupleImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendTupleImplMixin" } tupleExpr ::= expr [COLON expr] { pin = 1 recoverWhile = tupleExpr_recover - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Expression" ] - mixin = "org.vclang.psi.ext.VcTupleExprImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Expression" ] + mixin = "org.arend.psi.ext.ArendTupleExprImplMixin" } private tupleExpr_recover ::= !(RPAREN | COMMA) & statement_recover atomFieldsAcc ::= atom fieldAcc* { pin = 1 - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcAtomFieldsAccImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendAtomFieldsAccImplMixin" recoverWhile = argument_recover } @@ -646,10 +646,10 @@ argument ::= atomArgument | implicitArgument | infixArgument | postfixArgument { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Argument" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.BinOpSequenceElem" ] - mixin = "org.vclang.psi.ext.VcArgumentImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Argument" + "org.arend.term.abs.Abstract.BinOpSequenceElem" ] + mixin = "org.arend.psi.ext.ArendArgumentImplMixin" } private argumentRecovery ::= argument_recover { @@ -659,50 +659,50 @@ private argumentRecovery ::= argument_recover { private argument_recover ::= !(NEW_KW | NUMBER | INFIX | POSTFIX | AS_KW | RETURN_KW | COWITH_KW) & typeTele_recover atomArgument ::= atomFieldsAcc { - implements = "org.vclang.psi.ext.VcCompositeElement" - mixin = "org.vclang.psi.ext.VcAtomArgumentImplMixin" + implements = "org.arend.psi.ext.ArendCompositeElement" + mixin = "org.arend.psi.ext.ArendAtomArgumentImplMixin" } implicitArgument ::= LBRACE expr RBRACE { - implements = "org.vclang.psi.ext.VcCompositeElement" - mixin = "org.vclang.psi.ext.VcImplicitArgumentImplMixin" + implements = "org.arend.psi.ext.ArendCompositeElement" + mixin = "org.arend.psi.ext.ArendImplicitArgumentImplMixin" } infixArgument ::= INFIX { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcInfixArgumentImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendInfixArgumentImplMixin" } postfixArgument ::= POSTFIX { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcPostfixArgumentImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendPostfixArgumentImplMixin" } newArg ::= NEW_KW argumentAppExpr [LBRACE coClauseSequence RBRACE] { pin = 1 - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcNewArgImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendNewArgImplMixin" } longName ::= refIdentifier (DOT refIdentifier)* { pin = 1 - implements = [ "org.vclang.psi.ext.VcSourceNode" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.LongReference" ] - mixin = "org.vclang.psi.ext.VcLongNameImplMixin" + implements = [ "org.arend.psi.ext.ArendSourceNode" + "org.arend.term.abs.Abstract.LongReference" ] + mixin = "org.arend.psi.ext.ArendLongNameImplMixin" } literal ::= longName | PROP_KW | UNDERSCORE | goal { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcLiteralImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendLiteralImplMixin" } goal ::= LGOAL defIdentifier_goal? [LPAREN expr? RPAREN] RBRACE { pin = 1 - implements = "org.vclang.psi.ext.PsiReferable" - mixin = "org.vclang.psi.ext.PsiReferableImpl" + implements = "org.arend.psi.ext.PsiReferable" + mixin = "org.arend.psi.ext.PsiReferableImpl" } private defIdentifier_goal ::= defIdentifier { @@ -714,16 +714,16 @@ private defIdentifier_goal_recover ::= !(LPAREN | RBRACE) & statement_recover universeAtom ::= SET | UNIVERSE | TRUNCATED_UNIVERSE { - implements = "org.vclang.psi.VcExpr" - mixin = "org.vclang.psi.ext.VcUniverseAtomImplMixin" + implements = "org.arend.psi.ArendExpr" + mixin = "org.arend.psi.ext.ArendUniverseAtomImplMixin" } nameTele ::= identifierOrUnknown | nameTeleExplicit | nameTeleImplicit { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Parameter" ] - mixin = "org.vclang.psi.ext.VcNameTeleImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Parameter" ] + mixin = "org.arend.psi.ext.ArendNameTeleImplMixin" recoverWhile = nameTele_recover } @@ -736,9 +736,9 @@ private nameTele_first ::= !(ID | UNDERSCORE | LPAREN | LBRACE) private nameTele_recover ::= !(ID | UNDERSCORE | LPAREN | LBRACE | FAT_ARROW | COLON | PIPE | RBRACE | WITH_KW | COWITH_KW | ELIM_KW) & statement_recover fieldTele ::= fieldTeleExplicit | fieldTeleImplicit { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Parameter" ] - mixin = "org.vclang.psi.ext.VcFieldTeleImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Parameter" ] + mixin = "org.arend.psi.ext.ArendFieldTeleImplMixin" recoverWhile = fieldTele_recover } @@ -752,9 +752,9 @@ typeTele ::= literal | universeAtom | typedTeleExplicit | typedTeleImplicit { - implements = [ "org.vclang.psi.ext.VcCompositeElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Parameter" ] - mixin = "org.vclang.psi.ext.VcTypeTeleImplMixin" + implements = [ "org.arend.psi.ext.ArendCompositeElement" + "org.arend.term.abs.Abstract.Parameter" ] + mixin = "org.arend.psi.ext.ArendTypeTeleImplMixin" recoverWhile = typeTele_recover } @@ -771,23 +771,23 @@ private typedExprNamed ::= identifierOrUnknown+ COLON expr { pin = 2 } identifierOrUnknown ::= defIdentifier | UNDERSCORE fieldDefIdentifier ::= defIdentifier { - implements = [ "org.vclang.psi.ext.PsiLocatedReferable" - "com.jetbrains.jetpad.vclang.term.group.Group.InternalReferable" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.ClassField" - "com.jetbrains.jetpad.vclang.naming.reference.FieldReferable" - "org.vclang.psi.ext.VcReferenceElement" ] - mixin = "org.vclang.psi.ext.impl.FieldDefIdentifierAdapter" - stubClass = "org.vclang.psi.stubs.VcClassFieldParamStub" - elementTypeFactory = "org.vclang.psi.stubs.StubImplementationsKt.factory" + implements = [ "org.arend.psi.ext.PsiLocatedReferable" + "org.arend.term.group.Group.InternalReferable" + "org.arend.term.abs.Abstract.ClassField" + "org.arend.naming.reference.FieldReferable" + "org.arend.psi.ext.ArendReferenceElement" ] + mixin = "org.arend.psi.ext.impl.FieldDefIdentifierAdapter" + stubClass = "org.arend.psi.stubs.ArendClassFieldParamStub" + elementTypeFactory = "org.arend.psi.stubs.StubImplementationsKt.factory" recoverWhile = fieldDefIdentifier_recover } private fieldDefIdentifier_recover ::= !(COLON | ID | EXTENDS_KW | FAT_ARROW | LBRACE | LPAREN) & topStatement_recover defIdentifier ::= ID { - implements = [ "org.vclang.psi.ext.PsiReferable" - "org.vclang.psi.ext.VcReferenceElement" ] - mixin = "org.vclang.psi.ext.VcDefIdentifierImplMixin" + implements = [ "org.arend.psi.ext.PsiReferable" + "org.arend.psi.ext.ArendReferenceElement" ] + mixin = "org.arend.psi.ext.ArendDefIdentifierImplMixin" } private defIdentifier_typeTele ::= defIdentifier { @@ -795,9 +795,9 @@ private defIdentifier_typeTele ::= defIdentifier { } refIdentifier ::= ID { - implements = [ "org.vclang.psi.ext.VcReferenceElement" - "com.jetbrains.jetpad.vclang.term.abs.Abstract.Reference" ] - mixin = "org.vclang.psi.ext.VcRefIdentifierImplMixin" + implements = [ "org.arend.psi.ext.ArendReferenceElement" + "org.arend.term.abs.Abstract.Reference" ] + mixin = "org.arend.psi.ext.ArendRefIdentifierImplMixin" } private meta comma_separated_sequence ::= <

> (COMMA <

>)* { pin(".*") = 1 } diff --git a/src/main/java/org/arend/ArendLanguage.java b/src/main/java/org/arend/ArendLanguage.java new file mode 100644 index 000000000..fcdb92de4 --- /dev/null +++ b/src/main/java/org/arend/ArendLanguage.java @@ -0,0 +1,11 @@ +package org.arend; + +import com.intellij.lang.Language; + +public class ArendLanguage extends Language { + public static final ArendLanguage INSTANCE = new ArendLanguage(); + + protected ArendLanguage() { + super("Arend"); + } +} diff --git a/src/main/java/org/arend/module/ArendModuleTypeBase.java b/src/main/java/org/arend/module/ArendModuleTypeBase.java new file mode 100644 index 000000000..4f15712c5 --- /dev/null +++ b/src/main/java/org/arend/module/ArendModuleTypeBase.java @@ -0,0 +1,11 @@ +package org.arend.module; + +import com.intellij.openapi.module.ModuleType; +import org.jetbrains.annotations.NotNull; +import org.arend.module.util.ArendModuleBuilder; + +public abstract class ArendModuleTypeBase extends ModuleType { + protected ArendModuleTypeBase(@NotNull String id) { + super(id); + } +} diff --git a/src/main/java/org/vclang/VcLanguage.java b/src/main/java/org/vclang/VcLanguage.java deleted file mode 100644 index 94e00a16e..000000000 --- a/src/main/java/org/vclang/VcLanguage.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.vclang; - -import com.intellij.lang.Language; - -public class VcLanguage extends Language { - public static final VcLanguage INSTANCE = new VcLanguage(); - - protected VcLanguage() { - super("Vclang"); - } -} diff --git a/src/main/java/org/vclang/module/VcModuleTypeBase.java b/src/main/java/org/vclang/module/VcModuleTypeBase.java deleted file mode 100644 index 8edcfb6fa..000000000 --- a/src/main/java/org/vclang/module/VcModuleTypeBase.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.vclang.module; - -import com.intellij.openapi.module.ModuleType; -import org.jetbrains.annotations.NotNull; -import org.vclang.module.util.VcModuleBuilder; - -public abstract class VcModuleTypeBase extends ModuleType { - protected VcModuleTypeBase(@NotNull String id) { - super(id); - } -} diff --git a/src/main/kotlin/org/vclang/VcBraceMatcher.kt b/src/main/kotlin/org/arend/ArendBraceMatcher.kt similarity index 75% rename from src/main/kotlin/org/vclang/VcBraceMatcher.kt rename to src/main/kotlin/org/arend/ArendBraceMatcher.kt index cb4d6c7a0..8836212e5 100644 --- a/src/main/kotlin/org/vclang/VcBraceMatcher.kt +++ b/src/main/kotlin/org/arend/ArendBraceMatcher.kt @@ -1,15 +1,16 @@ -package org.vclang +package org.arend import com.intellij.lang.BracePair import com.intellij.lang.PairedBraceMatcher import com.intellij.psi.PsiFile import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.TokenSet -import org.vclang.psi.VC_COMMENTS -import org.vclang.psi.VC_WHITE_SPACES -import org.vclang.psi.VcElementTypes.* +import org.arend.psi.ArendElementTypes.LGOAL +import org.arend.psi.AREND_COMMENTS +import org.arend.psi.AREND_WHITE_SPACES +import org.arend.psi.ArendElementTypes.* -class VcBraceMatcher : PairedBraceMatcher { +class ArendBraceMatcher : PairedBraceMatcher { override fun getPairs(): Array = PAIRS @@ -29,8 +30,8 @@ class VcBraceMatcher : PairedBraceMatcher { ) private val InsertPairBraceBefore = TokenSet.orSet( - VC_COMMENTS, - VC_WHITE_SPACES, + AREND_COMMENTS, + AREND_WHITE_SPACES, TokenSet.create(COMMA, RPAREN, LBRACE, RBRACE) ) } diff --git a/src/main/kotlin/org/vclang/VcDocumentationProvider.kt b/src/main/kotlin/org/arend/ArendDocumentationProvider.kt similarity index 84% rename from src/main/kotlin/org/vclang/VcDocumentationProvider.kt rename to src/main/kotlin/org/arend/ArendDocumentationProvider.kt index 232e3d51b..a26ca281d 100644 --- a/src/main/kotlin/org/vclang/VcDocumentationProvider.kt +++ b/src/main/kotlin/org/arend/ArendDocumentationProvider.kt @@ -1,19 +1,19 @@ -package org.vclang +package org.arend import com.google.common.html.HtmlEscapers import com.intellij.codeInsight.documentation.DocumentationManagerUtil.createHyperlink import com.intellij.lang.documentation.DocumentationMarkup.* import com.intellij.lang.documentation.AbstractDocumentationProvider import com.intellij.psi.PsiElement -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.* -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.PsiReferable +import org.arend.term.abs.Abstract +import org.arend.psi.* +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiReferable private fun String.htmlEscape(): String = HtmlEscapers.htmlEscaper().escape(this) -class VcDocumentationProvider : AbstractDocumentationProvider() { +class ArendDocumentationProvider : AbstractDocumentationProvider() { override fun getQuickNavigateInfo(element: PsiElement, originalElement: PsiElement?): String? = generateDoc(element, originalElement) @@ -75,16 +75,16 @@ class VcDocumentationProvider : AbstractDocumentationProvider() { } private fun getType(element: PsiElement): String? = when (element) { - is VcDefClass -> if (element.fatArrow == null) "class" else "class synonym" - is VcClassField, is VcFieldDefIdentifier -> "field" - is VcClassFieldSyn -> "field synonym" - is VcDefInstance -> "instance" - is VcClassImplement -> "implementation" - is VcDefData -> "data" - is VcConstructor -> "data constructor" - is VcDefFunction -> "function" - is VcLetClause -> "let" - is VcDefIdentifier -> if (element.parent is VcLetClause) "let" else "variable" + is ArendDefClass -> if (element.fatArrow == null) "class" else "class synonym" + is ArendClassField, is ArendFieldDefIdentifier -> "field" + is ArendClassFieldSyn -> "field synonym" + is ArendDefInstance -> "instance" + is ArendClassImplement -> "implementation" + is ArendDefData -> "data" + is ArendConstructor -> "data constructor" + is ArendDefFunction -> "function" + is ArendLetClause -> "let" + is ArendDefIdentifier -> if (element.parent is ArendLetClause) "let" else "variable" else -> null } @@ -92,7 +92,7 @@ class VcDocumentationProvider : AbstractDocumentationProvider() { if (element is PsiLocatedReferable) { val file = element.containingFile.originalFile if (file != originalElement?.containingFile?.originalFile) { - return (file as? VcFile)?.fullName ?: file.name + return (file as? ArendFile)?.fullName ?: file.name } } @@ -131,7 +131,7 @@ class VcDocumentationProvider : AbstractDocumentationProvider() { } else "" } - fun getConstructorInfo (element : VcConstructor) : String? { + fun getConstructorInfo (element : ArendConstructor) : String? { val reporter = ListErrorReporter() val concreteElement = element.computeConcrete(reporter) val builder = StringBuilder() @@ -147,7 +147,7 @@ class VcDocumentationProvider : AbstractDocumentationProvider() { return builder.toString() } - fun getDefFunctionInfo(element : VcDefFunction) : String? { + fun getDefFunctionInfo(element : ArendDefFunction) : String? { val reporter = ListErrorReporter() val concreteElement = element.computeConcrete(reporter) val builder = StringBuilder() diff --git a/src/main/kotlin/org/arend/ArendFileType.kt b/src/main/kotlin/org/arend/ArendFileType.kt new file mode 100644 index 000000000..a0a75192e --- /dev/null +++ b/src/main/kotlin/org/arend/ArendFileType.kt @@ -0,0 +1,16 @@ +package org.arend + +import com.intellij.openapi.fileTypes.LanguageFileType +import org.arend.util.FileUtils + +import javax.swing.Icon + +object ArendFileType : LanguageFileType(ArendLanguage.INSTANCE) { + override fun getName(): String = "Arend" + + override fun getDescription(): String = "Arend files" + + override fun getDefaultExtension(): String = FileUtils.EXTENSION.drop(1) + + override fun getIcon(): Icon? = ArendIcons.AREND_FILE +} diff --git a/src/main/kotlin/org/vclang/VcFileTypeFactory.kt b/src/main/kotlin/org/arend/ArendFileTypeFactory.kt similarity index 56% rename from src/main/kotlin/org/vclang/VcFileTypeFactory.kt rename to src/main/kotlin/org/arend/ArendFileTypeFactory.kt index 631603729..a8e7a138c 100644 --- a/src/main/kotlin/org/vclang/VcFileTypeFactory.kt +++ b/src/main/kotlin/org/arend/ArendFileTypeFactory.kt @@ -1,10 +1,10 @@ -package org.vclang +package org.arend import com.intellij.openapi.fileTypes.FileTypeConsumer import com.intellij.openapi.fileTypes.FileTypeFactory -class VcFileTypeFactory : FileTypeFactory() { +class ArendFileTypeFactory : FileTypeFactory() { override fun createFileTypes(fileTypeConsumer: FileTypeConsumer) { - fileTypeConsumer.consume(VcFileType, VcFileType.defaultExtension) + fileTypeConsumer.consume(ArendFileType, ArendFileType.defaultExtension) } } diff --git a/src/main/kotlin/org/vclang/VcFoldingBuilder.kt b/src/main/kotlin/org/arend/ArendFoldingBuilder.kt similarity index 63% rename from src/main/kotlin/org/vclang/VcFoldingBuilder.kt rename to src/main/kotlin/org/arend/ArendFoldingBuilder.kt index 453fe1897..390686011 100644 --- a/src/main/kotlin/org/vclang/VcFoldingBuilder.kt +++ b/src/main/kotlin/org/arend/ArendFoldingBuilder.kt @@ -1,4 +1,4 @@ -package org.vclang +package org.arend import com.intellij.lang.ASTNode import com.intellij.lang.folding.FoldingBuilderEx @@ -9,18 +9,18 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import org.vclang.psi.* -import org.vclang.psi.VcElementTypes.LBRACE -import org.vclang.psi.VcElementTypes.RBRACE +import org.arend.psi.* +import org.arend.psi.ArendElementTypes.LBRACE +import org.arend.psi.ArendElementTypes.RBRACE -class VcFoldingBuilder : FoldingBuilderEx(), DumbAware { +class ArendFoldingBuilder : FoldingBuilderEx(), DumbAware { override fun buildFoldRegions( root: PsiElement, document: Document, quick: Boolean ): Array { - if (root !is VcFile) return emptyArray() + if (root !is ArendFile) return emptyArray() val descriptors = mutableListOf() val visitor = FoldingVisitor(descriptors) PsiTreeUtil.processElements(root) { it.accept(visitor); true } @@ -38,33 +38,33 @@ class VcFoldingBuilder : FoldingBuilderEx(), DumbAware { private class FoldingVisitor( private val descriptors: MutableList - ) : VcVisitor() { + ) : ArendVisitor() { - override fun visitCaseExpr(o: VcCaseExpr) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitCaseExpr(o: ArendCaseExpr) = foldBetween(o, o.lbrace, o.rbrace) - override fun visitFunctionBody(o: VcFunctionBody) = fold(o) + override fun visitFunctionBody(o: ArendFunctionBody) = fold(o) - override fun visitDataBody(o: VcDataBody) = fold(o) + override fun visitDataBody(o: ArendDataBody) = fold(o) - override fun visitCoClauses(o: VcCoClauses) = fold(o) + override fun visitCoClauses(o: ArendCoClauses) = fold(o) - override fun visitConstructor(o: VcConstructor) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitConstructor(o: ArendConstructor) = foldBetween(o, o.lbrace, o.rbrace) - override fun visitConstructorClause(o: VcConstructorClause) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitConstructorClause(o: ArendConstructorClause) = foldBetween(o, o.lbrace, o.rbrace) - override fun visitDefClass(o: VcDefClass) { + override fun visitDefClass(o: ArendDefClass) { foldBetween(o, o.lbrace, o.rbrace) foldBetween(o, o.fatArrow, null) } - override fun visitNewExpr(o: VcNewExpr) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitNewExpr(o: ArendNewExpr) = foldBetween(o, o.lbrace, o.rbrace) - override fun visitNewArg(o: VcNewArg) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitNewArg(o: ArendNewArg) = foldBetween(o, o.lbrace, o.rbrace) - override fun visitWhere(o: VcWhere) = foldBetween(o, o.lbrace, o.rbrace) + override fun visitWhere(o: ArendWhere) = foldBetween(o, o.lbrace, o.rbrace) override fun visitComment(comment: PsiComment) { - if (comment.tokenType == VcElementTypes.BLOCK_COMMENT) fold(comment) + if (comment.tokenType == ArendElementTypes.BLOCK_COMMENT) fold(comment) } private fun fold(element: PsiElement) { diff --git a/src/main/kotlin/org/vclang/VcIcons.kt b/src/main/kotlin/org/arend/ArendIcons.kt similarity index 73% rename from src/main/kotlin/org/vclang/VcIcons.kt rename to src/main/kotlin/org/arend/ArendIcons.kt index e973e55c1..3e37847a5 100644 --- a/src/main/kotlin/org/vclang/VcIcons.kt +++ b/src/main/kotlin/org/arend/ArendIcons.kt @@ -1,12 +1,11 @@ -package org.vclang +package org.arend import com.intellij.icons.AllIcons import javax.swing.Icon -object VcIcons { - val VCLANG: Icon = AllIcons.Nodes.AnonymousClass - val VCLANG_FILE: Icon = AllIcons.FileTypes.Idl - val VCLANG_LIB_FILE: Icon = AllIcons.FileTypes.WsdlFile +object ArendIcons { + val AREND: Icon = AllIcons.Nodes.AnonymousClass + val AREND_FILE: Icon = AllIcons.FileTypes.Idl val DIRECTORY: Icon = AllIcons.Nodes.Package // Source code elements diff --git a/src/main/kotlin/org/vclang/VcImplementationTextSelectioner.kt b/src/main/kotlin/org/arend/ArendImplementationTextSelectioner.kt similarity index 61% rename from src/main/kotlin/org/vclang/VcImplementationTextSelectioner.kt rename to src/main/kotlin/org/arend/ArendImplementationTextSelectioner.kt index e907fbdc5..e93312f7b 100644 --- a/src/main/kotlin/org/vclang/VcImplementationTextSelectioner.kt +++ b/src/main/kotlin/org/arend/ArendImplementationTextSelectioner.kt @@ -1,15 +1,15 @@ -package org.vclang +package org.arend import com.intellij.codeInsight.hint.ImplementationTextSelectioner import com.intellij.psi.PsiElement -import org.vclang.psi.VcDefIdentifier -import org.vclang.psi.VcDefinition +import org.arend.psi.ArendDefIdentifier +import org.arend.psi.ArendDefinition -class VcImplementationTextSelectioner : ImplementationTextSelectioner { +class ArendImplementationTextSelectioner : ImplementationTextSelectioner { override fun getTextStartOffset(element: PsiElement): Int { - if (element is VcDefIdentifier) { + if (element is ArendDefIdentifier) { val parent = element.parent - if (parent is VcDefinition) { + if (parent is ArendDefinition) { return parent.textRange.startOffset } } @@ -17,9 +17,9 @@ class VcImplementationTextSelectioner : ImplementationTextSelectioner { } override fun getTextEndOffset(element: PsiElement): Int { - if (element is VcDefIdentifier) { + if (element is ArendDefIdentifier) { val parent = element.parent - if (parent is VcDefinition) { + if (parent is ArendDefinition) { return parent.textRange.endOffset } } diff --git a/src/main/kotlin/org/vclang/VcStartupActivity.kt b/src/main/kotlin/org/arend/ArendStartupActivity.kt similarity index 68% rename from src/main/kotlin/org/vclang/VcStartupActivity.kt rename to src/main/kotlin/org/arend/ArendStartupActivity.kt index 0fec567d9..7569f7c88 100644 --- a/src/main/kotlin/org/vclang/VcStartupActivity.kt +++ b/src/main/kotlin/org/arend/ArendStartupActivity.kt @@ -1,4 +1,4 @@ -package org.vclang +package org.arend import com.intellij.ProjectTopics import com.intellij.openapi.module.Module @@ -7,36 +7,36 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.project.ProjectManager import com.intellij.openapi.project.ProjectManagerListener import com.intellij.openapi.startup.StartupActivity -import com.jetbrains.jetpad.vclang.error.DummyErrorReporter -import com.jetbrains.jetpad.vclang.prelude.Prelude -import org.vclang.module.VcPreludeLibrary -import org.vclang.module.VcRawLibrary -import org.vclang.module.util.isVcModule -import org.vclang.resolving.PsiConcreteProvider -import org.vclang.typechecking.PsiInstanceProviderSet -import org.vclang.typechecking.TypeCheckingService +import org.arend.error.DummyErrorReporter +import org.arend.prelude.Prelude +import org.arend.module.ArendPreludeLibrary +import org.arend.module.ArendRawLibrary +import org.arend.module.util.isArendModule +import org.arend.resolving.PsiConcreteProvider +import org.arend.typechecking.PsiInstanceProviderSet +import org.arend.typechecking.TypeCheckingService -class VcStartupActivity : StartupActivity { +class ArendStartupActivity : StartupActivity { override fun runActivity(project: Project) { val service = TypeCheckingService.getInstance(project) // TODO[references]: Load typechecked prelude library from resources - val preludeLibrary = VcPreludeLibrary(project, service.typecheckerState) + val preludeLibrary = ArendPreludeLibrary(project, service.typecheckerState) service.libraryManager.loadLibrary(preludeLibrary) val referableConverter = service.referableConverter val concreteProvider = PsiConcreteProvider(project, referableConverter, DummyErrorReporter.INSTANCE, null) preludeLibrary.resolveNames(referableConverter, concreteProvider, service.libraryManager.libraryErrorReporter) Prelude.PreludeTypechecking(PsiInstanceProviderSet(concreteProvider, referableConverter), service.typecheckerState, concreteProvider).typecheckLibrary(preludeLibrary) - for (module in project.vcModules) { - service.libraryManager.loadLibrary(VcRawLibrary(module, service.typecheckerState)) + for (module in project.arendModules) { + service.libraryManager.loadLibrary(ArendRawLibrary(module, service.typecheckerState)) } project.messageBus.connect(project).subscribe(ProjectTopics.MODULES, object : ModuleListener { override fun moduleAdded(project: Project, module: Module) { - if (module.isVcModule) { - service.libraryManager.loadLibrary(VcRawLibrary(module, service.typecheckerState)) + if (module.isArendModule) { + service.libraryManager.loadLibrary(ArendRawLibrary(module, service.typecheckerState)) } } @@ -51,4 +51,4 @@ class VcStartupActivity : StartupActivity { } }) } -} \ No newline at end of file +} diff --git a/src/main/kotlin/org/vclang/ProjectUtils.kt b/src/main/kotlin/org/arend/ProjectUtils.kt similarity index 65% rename from src/main/kotlin/org/vclang/ProjectUtils.kt rename to src/main/kotlin/org/arend/ProjectUtils.kt index a454e3fab..33e4df123 100644 --- a/src/main/kotlin/org/vclang/ProjectUtils.kt +++ b/src/main/kotlin/org/arend/ProjectUtils.kt @@ -1,10 +1,10 @@ -package org.vclang +package org.arend import com.intellij.openapi.application.runReadAction import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project -import org.vclang.module.util.isVcModule +import org.arend.module.util.isArendModule -val Project.vcModules: List - get() = runReadAction { ModuleManager.getInstance(this).modules.filter { it.isVcModule } } +val Project.arendModules: List + get() = runReadAction { ModuleManager.getInstance(this).modules.filter { it.isArendModule } } diff --git a/src/main/kotlin/org/vclang/actions/VcCreateFileAction.kt b/src/main/kotlin/org/arend/actions/ArendCreateFileAction.kt similarity index 69% rename from src/main/kotlin/org/vclang/actions/VcCreateFileAction.kt rename to src/main/kotlin/org/arend/actions/ArendCreateFileAction.kt index 0d495dbd8..a8c1af9ea 100644 --- a/src/main/kotlin/org/vclang/actions/VcCreateFileAction.kt +++ b/src/main/kotlin/org/arend/actions/ArendCreateFileAction.kt @@ -1,13 +1,13 @@ -package org.vclang.actions +package org.arend.actions import com.intellij.ide.actions.CreateFileFromTemplateAction import com.intellij.ide.actions.CreateFileFromTemplateDialog import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.psi.PsiDirectory -import org.vclang.VcIcons +import org.arend.ArendIcons -class VcCreateFileAction : CreateFileFromTemplateAction(CAPTION, "", VcIcons.VCLANG_FILE), +class ArendCreateFileAction : CreateFileFromTemplateAction(CAPTION, "", ArendIcons.AREND_FILE), DumbAware { override fun getActionName( @@ -21,10 +21,10 @@ class VcCreateFileAction : CreateFileFromTemplateAction(CAPTION, "", VcIcons.VCL directory: PsiDirectory?, builder: CreateFileFromTemplateDialog.Builder ) { - builder.setTitle(CAPTION).addKind("Empty File", VcIcons.VCLANG_FILE, "Vclang File") + builder.setTitle(CAPTION).addKind("Empty File", ArendIcons.AREND_FILE, "Arend File") } private companion object { - private val CAPTION = "New Vclang File" + private const val CAPTION = "New Arend File" } } diff --git a/src/main/kotlin/org/vclang/actions/VcPrettyPrinterFormatAction.kt b/src/main/kotlin/org/arend/actions/ArendPrettyPrinterFormatAction.kt similarity index 84% rename from src/main/kotlin/org/vclang/actions/VcPrettyPrinterFormatAction.kt rename to src/main/kotlin/org/arend/actions/ArendPrettyPrinterFormatAction.kt index 2a67ab72d..e28af67e2 100644 --- a/src/main/kotlin/org/vclang/actions/VcPrettyPrinterFormatAction.kt +++ b/src/main/kotlin/org/arend/actions/ArendPrettyPrinterFormatAction.kt @@ -1,4 +1,4 @@ -package org.vclang.actions +package org.arend.actions import com.intellij.notification.Notification import com.intellij.notification.NotificationType @@ -11,23 +11,23 @@ import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.project.DumbAware import com.intellij.psi.PsiDocumentManager -import org.vclang.psi.VcFile +import org.arend.psi.ArendFile import java.io.PrintWriter import java.io.StringWriter -class VcPrettyPrinterFormatAction : AnAction(), DumbAware { +class ArendPrettyPrinterFormatAction : AnAction(), DumbAware { override fun update(e: AnActionEvent) { val psiFile = e.getData(CommonDataKeys.PSI_FILE) - e.presentation.isEnabled = psiFile is VcFile + e.presentation.isEnabled = psiFile is ArendFile } override fun actionPerformed(e: AnActionEvent) { val psiFile = e.getData(CommonDataKeys.PSI_FILE) val project = AnAction.getEventProject(e) ?: return - if (psiFile !is VcFile) return + if (psiFile !is ArendFile) return - val groupId = "Vclang pretty printing" + val groupId = "Arend pretty printing" try { ApplicationManager.getApplication().saveAll() @@ -70,10 +70,10 @@ class VcPrettyPrinterFormatAction : AnAction(), DumbAware { } private companion object { - private val NOTIFICATION_TITLE = "Reformat code with PrettyPrinter" - private val LOG = Logger.getInstance(VcPrettyPrinterFormatAction::class.java) + private const val NOTIFICATION_TITLE = "Reformat code with PrettyPrinter" + private val LOG = Logger.getInstance(ArendPrettyPrinterFormatAction::class.java) - private fun prettyPrint(module: VcFile): String? { + private fun prettyPrint(module: ArendFile): String? { return null /* TODO[pretty] val builder = StringBuilder() diff --git a/src/main/kotlin/org/vclang/annotation/VclangAddImportAction.kt b/src/main/kotlin/org/arend/annotation/ArendAddImportAction.kt similarity index 91% rename from src/main/kotlin/org/vclang/annotation/VclangAddImportAction.kt rename to src/main/kotlin/org/arend/annotation/ArendAddImportAction.kt index 37caeb2a5..f7544bbb3 100644 --- a/src/main/kotlin/org/vclang/annotation/VclangAddImportAction.kt +++ b/src/main/kotlin/org/arend/annotation/ArendAddImportAction.kt @@ -1,10 +1,10 @@ -package org.vclang.annotation +package org.arend.annotation import com.intellij.codeInsight.daemon.QuickFixBundle import com.intellij.codeInsight.hint.QuestionAction import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.project.Project -import org.vclang.quickfix.ResolveRefFixData +import org.arend.quickfix.ResolveRefFixData import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.DumbService import com.intellij.openapi.ui.popup.PopupStep @@ -14,7 +14,7 @@ import com.intellij.psi.PsiElement import com.intellij.ui.popup.list.ListPopupImpl import javax.swing.Icon -class VclangAddImportAction(val project: Project, val editor: Editor, private val currentElement: PsiElement, val resolveData: List): QuestionAction { +class ArendAddImportAction(val project: Project, val editor: Editor, private val currentElement: PsiElement, val resolveData: List): QuestionAction { override fun execute(): Boolean { PsiDocumentManager.getInstance(project).commitAllDocuments() diff --git a/src/main/kotlin/org/vclang/annotation/VcHighlightRangeExtension.kt b/src/main/kotlin/org/arend/annotation/ArendHighlightRangeExtension.kt similarity index 55% rename from src/main/kotlin/org/vclang/annotation/VcHighlightRangeExtension.kt rename to src/main/kotlin/org/arend/annotation/ArendHighlightRangeExtension.kt index a073a839c..4152665db 100644 --- a/src/main/kotlin/org/vclang/annotation/VcHighlightRangeExtension.kt +++ b/src/main/kotlin/org/arend/annotation/ArendHighlightRangeExtension.kt @@ -1,10 +1,10 @@ -package org.vclang.annotation +package org.arend.annotation import com.intellij.codeInsight.daemon.impl.HighlightRangeExtension import com.intellij.psi.PsiFile -import org.vclang.psi.VcFile +import org.arend.psi.ArendFile -class VcHighlightRangeExtension : HighlightRangeExtension { - override fun isForceHighlightParents(file: PsiFile) = file is VcFile +class ArendHighlightRangeExtension : HighlightRangeExtension { + override fun isForceHighlightParents(file: PsiFile) = file is ArendFile } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/annotation/VcHighlightingAnnotator.kt b/src/main/kotlin/org/arend/annotation/ArendHighlightingAnnotator.kt similarity index 80% rename from src/main/kotlin/org/vclang/annotation/VcHighlightingAnnotator.kt rename to src/main/kotlin/org/arend/annotation/ArendHighlightingAnnotator.kt index 5129c3b05..abcdf0340 100644 --- a/src/main/kotlin/org/vclang/annotation/VcHighlightingAnnotator.kt +++ b/src/main/kotlin/org/arend/annotation/ArendHighlightingAnnotator.kt @@ -1,4 +1,4 @@ -package org.vclang.annotation +package org.arend.annotation import com.intellij.codeInspection.ProblemHighlightType import com.intellij.lang.annotation.AnnotationHolder @@ -8,56 +8,56 @@ import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDirectory import com.intellij.psi.PsiElement import com.intellij.psi.impl.source.tree.LeafPsiElement -import com.jetbrains.jetpad.vclang.error.Error -import com.jetbrains.jetpad.vclang.naming.error.NotInScopeError -import com.jetbrains.jetpad.vclang.naming.reference.* -import com.jetbrains.jetpad.vclang.naming.resolving.NameResolvingChecker -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.NamespaceCommandNamespace -import com.jetbrains.jetpad.vclang.term.NamespaceCommand -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.BaseAbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import com.jetbrains.jetpad.vclang.term.group.Group -import com.jetbrains.jetpad.vclang.typechecking.error.local.LocalError -import com.jetbrains.jetpad.vclang.util.LongName -import org.vclang.highlight.VcHighlightingColors -import org.vclang.psi.* -import org.vclang.psi.ext.* -import org.vclang.psi.ext.impl.InstanceAdapter -import org.vclang.quickfix.InstanceQuickFix -import org.vclang.resolving.DataLocatedReferable -import org.vclang.resolving.PsiPartialConcreteProvider -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor -import org.vclang.typing.TypecheckingVisitor - -class VcHighlightingAnnotator : Annotator { +import org.arend.error.Error +import org.arend.naming.error.NotInScopeError +import org.arend.naming.reference.* +import org.arend.naming.resolving.NameResolvingChecker +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.naming.scope.NamespaceCommandNamespace +import org.arend.term.NamespaceCommand +import org.arend.term.abs.Abstract +import org.arend.term.abs.BaseAbstractExpressionVisitor +import org.arend.term.concrete.Concrete +import org.arend.term.group.Group +import org.arend.typechecking.error.local.LocalError +import org.arend.util.LongName +import org.arend.highlight.ArendHighlightingColors +import org.arend.psi.* +import org.arend.psi.ext.* +import org.arend.psi.ext.impl.InstanceAdapter +import org.arend.quickfix.InstanceQuickFix +import org.arend.resolving.DataLocatedReferable +import org.arend.resolving.PsiPartialConcreteProvider +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor +import org.arend.typing.TypecheckingVisitor + +class ArendHighlightingAnnotator : Annotator { override fun annotate(element: PsiElement, holder: AnnotationHolder) { - var color: VcHighlightingColors? = null - val resolved = if (element is VcReferenceElement) { - val resolved = VclangImportHintAction.getResolved(element) + var color: ArendHighlightingColors? = null + val resolved = if (element is ArendReferenceElement) { + val resolved = ArendImportHintAction.getResolved(element) when (resolved) { null -> { val annotation = holder.createErrorAnnotation(element, "Unresolved reference") annotation.highlightType = ProblemHighlightType.ERROR - val fix = VclangImportHintAction(element) + val fix = ArendImportHintAction(element) if (fix.isAvailable(element.project, null, element.containingFile)) annotation.registerFix(fix) return } is PsiDirectory -> { - val refList = (element.parent as? VcLongName)?.refIdentifierList + val refList = (element.parent as? ArendLongName)?.refIdentifierList if (refList == null || refList.indexOf(element) == refList.size - 1) { holder.createErrorAnnotation(element, "Unexpected reference to a directory") } return } - is VcFile -> { - val longName = element.parent as? VcLongName - if (longName == null || longName.parent !is VcStatCmd) { + is ArendFile -> { + val longName = element.parent as? ArendLongName + if (longName == null || longName.parent !is ArendStatCmd) { val refList = longName?.refIdentifierList if (refList == null || refList.indexOf(element) == refList.size - 1) { holder.createErrorAnnotation(element, "Unexpected reference to a file") @@ -67,14 +67,14 @@ class VcHighlightingAnnotator : Annotator { } is GlobalReferable -> { if (resolved.precedence.isInfix) { - color = VcHighlightingColors.OPERATORS + color = ArendHighlightingColors.OPERATORS } } } resolved } else null - if (element is VcPrec) { + if (element is ArendPrec) { val prec = (element.number ?: return).text.toByteOrNull() ?: 10 if (prec < 1 || prec > 9) { holder.createErrorAnnotation(element, "The priority must be between 1 and 9") @@ -82,14 +82,14 @@ class VcHighlightingAnnotator : Annotator { return } - if (element is VcArgumentAppExpr) { + if (element is ArendArgumentAppExpr) { val pElement = element.parent - if (pElement is VcNewExprImplMixin) { + if (pElement is ArendNewExprImplMixin) { if (InstanceQuickFix.annotateNewExpr(pElement, holder)) { return } } - if (pElement is VcNewExpr && (pElement.newKw != null || pElement.lbrace != null) || pElement is VcNewArg || pElement is VcDefInstance) { + if (pElement is ArendNewExpr && (pElement.newKw != null || pElement.lbrace != null) || pElement is ArendNewArg || pElement is ArendDefInstance) { val longName = element.longNameExpr?.longName ?: run { val atomFieldsAcc = element.atomFieldsAcc if (atomFieldsAcc != null && atomFieldsAcc.fieldAccList.isEmpty()) { @@ -101,11 +101,11 @@ class VcHighlightingAnnotator : Annotator { if (longName != null) { val ref = longName.referent val resolvedRef = (ref as? UnresolvedReference)?.resolve(element.scope) ?: ref - if (resolvedRef !is VcDefClass && resolvedRef !is UnresolvedReference && resolvedRef !is ErrorReference) { + if (resolvedRef !is ArendDefClass && resolvedRef !is UnresolvedReference && resolvedRef !is ErrorReference) { holder.createErrorAnnotation(longName, "Expected a class") return } - if (pElement is VcDefInstance && resolvedRef is VcDefClass && resolvedRef.recordKw != null) { + if (pElement is ArendDefInstance && resolvedRef is ArendDefClass && resolvedRef.recordKw != null) { holder.createErrorAnnotation(longName, "Expected a class, got a record") return } @@ -113,39 +113,39 @@ class VcHighlightingAnnotator : Annotator { } } - if (element is VcAtomPatternOrPrefix) { - val parentPattern = element.parent as? VcPattern ?: return - val def = parentPattern.defIdentifier?.reference?.resolve() as? VcConstructor ?: return + if (element is ArendAtomPatternOrPrefix) { + val parentPattern = element.parent as? ArendPattern ?: return + val def = parentPattern.defIdentifier?.reference?.resolve() as? ArendConstructor ?: return checkPattern(element, def.typeTeleList, parentPattern.atomPatternOrPrefixList, holder) return } - if (element is VcPattern) { - val clause = element.parent as? VcClause + if (element is ArendPattern) { + val clause = element.parent as? ArendClause if (clause != null) { val parent = clause.parent when (parent) { - is VcFunctionClauses -> { - val body = parent.parent as? VcFunctionBody - val func = body?.parent as? VcDefFunction + is ArendFunctionClauses -> { + val body = parent.parent as? ArendFunctionBody + val func = body?.parent as? ArendDefFunction if (func != null) { checkPattern(element, body.elim, func.nameTeleList, clause.patternList, holder) } } - is VcConstructor -> checkPattern(element, parent.elim, parent.typeTeleList, clause.patternList, holder) - is VcCaseExpr -> checkPattern(element, parent.caseArgList.size, clause.patternList, holder) + is ArendConstructor -> checkPattern(element, parent.elim, parent.typeTeleList, clause.patternList, holder) + is ArendCaseExpr -> checkPattern(element, parent.caseArgList.size, clause.patternList, holder) } } else { - val conClause = element.parent as? VcConstructorClause - val dataBody = conClause?.parent as? VcDataBody - val typeTele = (dataBody?.parent as? VcDefData)?.typeTeleList + val conClause = element.parent as? ArendConstructorClause + val dataBody = conClause?.parent as? ArendDataBody + val typeTele = (dataBody?.parent as? ArendDefData)?.typeTeleList if (typeTele != null) { checkPattern(element, dataBody.elim, typeTele, conClause.patternList, holder) } } } - if (element is VcPatternImplMixin) { + if (element is ArendPatternImplMixin) { val number = element.number if (number == Concrete.NumberPattern.MAX_VALUE || number == -Concrete.NumberPattern.MAX_VALUE) { element.getAtomPattern()?.let { holder.createErrorAnnotation(it, "Value too big") } @@ -154,15 +154,15 @@ class VcHighlightingAnnotator : Annotator { } when { - element is VcDefIdentifier -> color = VcHighlightingColors.DECLARATION - element is VcInfixArgument || element is VcPostfixArgument -> color = VcHighlightingColors.OPERATORS - element is VcRefIdentifier || element is LeafPsiElement && element.node.elementType == VcElementTypes.DOT -> { - val parent = element.parent as? VcLongName + element is ArendDefIdentifier -> color = ArendHighlightingColors.DECLARATION + element is ArendInfixArgument || element is ArendPostfixArgument -> color = ArendHighlightingColors.OPERATORS + element is ArendRefIdentifier || element is LeafPsiElement && element.node.elementType == ArendElementTypes.DOT -> { + val parent = element.parent as? ArendLongName if (parent != null) { - if (parent.parent is VcStatCmd) return + if (parent.parent is ArendStatCmd) return val refList = parent.refIdentifierList if (refList.isEmpty() || refList.last() != element) { - color = VcHighlightingColors.LONG_NAME + color = ArendHighlightingColors.LONG_NAME } } } @@ -197,12 +197,12 @@ class VcHighlightingAnnotator : Annotator { val cause = error.cause if (cause is PsiElement) { - holder.createAnnotation(levelToSeverity(error.level), ((cause as? VcDefFunction)?.defIdentifier ?: cause).textRange, error.shortMessage) + holder.createAnnotation(levelToSeverity(error.level), ((cause as? ArendDefFunction)?.defIdentifier ?: cause).textRange, error.shortMessage) } } } - if (element is VcDefIdentifier) { + if (element is ArendDefIdentifier) { val definition = element.parent as? PsiLocatedReferable ?: return if (definition is Abstract.ReferableDefinition && (definition is Abstract.ClassField || definition is Abstract.ClassFieldSynonym)) { @@ -217,9 +217,9 @@ class VcHighlightingAnnotator : Annotator { if (InstanceQuickFix.annotateClassInstance(definition, holder)) { color = null } - } else if (definition is VcDefFunction) + } else if (definition is ArendDefFunction) InstanceQuickFix.annotateFunctionDefinitionWithCoWith(definition, holder) - else if (definition is VcDefFunction && definition.coerceKw != null) { + else if (definition is ArendDefFunction && definition.coerceKw != null) { val lastParam = definition.nameTeleList.lastOrNull() if (lastParam == null) { holder.createErrorAnnotation(element, "\\coerce must have at least one parameter") @@ -235,10 +235,10 @@ class VcHighlightingAnnotator : Annotator { ExpressionResolveNameVisitor.resolve(defType.accept(visitor, null), scope) } else { val term = definition.functionBody?.expr - if (term is VcNewExpr && term.newKw != null) { + if (term is ArendNewExpr && term.newKw != null) { ExpressionResolveNameVisitor.resolve(term.argumentAppExpr?.accept(visitor, null), scope) } else { - (ExpressionResolveNameVisitor.resolve(term?.accept(visitor, null), scope) as? VcConstructor)?.ancestors?.filterIsInstance()?.firstOrNull() + (ExpressionResolveNameVisitor.resolve(term?.accept(visitor, null), scope) as? ArendConstructor)?.ancestors?.filterIsInstance()?.firstOrNull() } } if (resultDef is DataLocatedReferable) { @@ -251,7 +251,7 @@ class VcHighlightingAnnotator : Annotator { if (resultDef == parentDef) { true } else if (resultDef != null) { - resultDef !is VcDefData && resultDef !is VcDefClass + resultDef !is ArendDefData && resultDef !is ArendDefClass } else { if (defType != null) { defType.accept(object : BaseAbstractExpressionVisitor(true) { @@ -341,7 +341,7 @@ class VcHighlightingAnnotator : Annotator { holder.createInfoAnnotation(element, null).textAttributes = colorCopy.textAttributesKey } - if (element is VcStatCmd) { + if (element is ArendStatCmd) { var defined: MutableSet? = null if (element.nsUsing?.nsIdList?.isEmpty() == false) { defined = (element.parentSourceNode as? Group)?.let { collectDefined(it) } @@ -379,17 +379,17 @@ class VcHighlightingAnnotator : Annotator { return } - if (element is VcFieldTele) { + if (element is ArendFieldTele) { val definition = element.parent - if (definition is VcDefClass && definition.fatArrow != null && definition.fieldTeleList.firstOrNull() == element) { + if (definition is ArendDefClass && definition.fatArrow != null && definition.fieldTeleList.firstOrNull() == element) { holder.createAnnotation(HighlightSeverity.ERROR, TextRange(element.textRange.startOffset, (definition.fieldTeleList.lastOrNull() ?: element).textRange.endOffset), "Class synonyms cannot have parameters") } return } - if (element is VcRefIdentifier && element.parent is VcDefClass && resolved != null) { + if (element is ArendRefIdentifier && element.parent is ArendDefClass && resolved != null) { when { - resolved !is VcDefClass -> "Expected a class" + resolved !is ArendDefClass -> "Expected a class" resolved.recordKw != null -> "Expected a class, got a record" resolved.fatArrow != null -> "Expected a class, got a class synonym" else -> null @@ -397,20 +397,20 @@ class VcHighlightingAnnotator : Annotator { return } - if (element is VcLongName) { + if (element is ArendLongName) { val parent = element.parent when (parent) { - is VcDefClass -> { + is ArendDefClass -> { val superClass = element.refIdentifierList.lastOrNull()?.reference?.resolve() if (superClass != null) { - if (superClass !is VcDefClass) { + if (superClass !is ArendDefClass) { holder.createErrorAnnotation(element, "Expected a class") } else if (parent.fatArrow != null) { nameResolvingChecker.checkSuperClassOfSynonym(superClass, parent.refIdentifier?.reference?.resolve() as? ClassReferable, element) } } } - is Abstract.ClassFieldImpl -> if ((parent is VcCoClause && parent.lbrace != null || parent is VcClassImplement && parent.lbrace != null) && parent.classReference == null) { + is Abstract.ClassFieldImpl -> if ((parent is ArendCoClause && parent.lbrace != null || parent is ArendClassImplement && parent.lbrace != null) && parent.classReference == null) { holder.createErrorAnnotation(element, "Expected either a class or a field which has a class as its type") } } @@ -419,23 +419,23 @@ class VcHighlightingAnnotator : Annotator { if (element is LeafPsiElement) { when (element.node.elementType) { - VcElementTypes.COERCE_KW -> { - val parent = (element.parent as? VcDefFunction)?.parentGroup - if (parent is VcFile) { + ArendElementTypes.COERCE_KW -> { + val parent = (element.parent as? ArendDefFunction)?.parentGroup + if (parent is ArendFile) { holder.createErrorAnnotation(element as PsiElement, "\\coerce is not allowed on the top level") - } else if (parent !is VcDefData && parent !is VcDefClass) { + } else if (parent !is ArendDefData && parent !is ArendDefClass) { holder.createErrorAnnotation(element as PsiElement, "\\coerce is allowed only in \\where block of \\data and \\class") } } - VcElementTypes.IMPORT_KW -> - if ((element.parent as? Abstract.NamespaceCommandHolder)?.parentSourceNode !is VcFile) { + ArendElementTypes.IMPORT_KW -> + if ((element.parent as? Abstract.NamespaceCommandHolder)?.parentSourceNode !is ArendFile) { holder.createErrorAnnotation(element as PsiElement, "\\import is allowed only on the top level") } } return } - if (element is VcExpr && element.topmostEquivalentSourceNode == element) { + if (element is ArendExpr && element.topmostEquivalentSourceNode == element) { var expectedType = ExpectedTypeVisitor(element, holder).getExpectedType() if (expectedType is ExpectedTypeVisitor.Error) { expectedType.createErrorAnnotation(element, holder) @@ -445,7 +445,7 @@ class VcHighlightingAnnotator : Annotator { } } - private fun checkPattern(pattern: VcCompositeElement, elim: VcElim?, teleList: List, patternList: List, holder: AnnotationHolder) { + private fun checkPattern(pattern: ArendCompositeElement, elim: ArendElim?, teleList: List, patternList: List, holder: AnnotationHolder) { if (elim == null || elim.withKw != null) { checkPattern(pattern, teleList, patternList, holder) } else { @@ -453,7 +453,7 @@ class VcHighlightingAnnotator : Annotator { } } - private fun checkPattern(element: VcCompositeElement, teleList: List, patternList: List, holder: AnnotationHolder) { + private fun checkPattern(element: ArendCompositeElement, teleList: List, patternList: List, holder: AnnotationHolder) { if (patternList.isEmpty()) { return } @@ -520,7 +520,7 @@ class VcHighlightingAnnotator : Annotator { } } - private fun checkPattern(element: VcCompositeElement, numberOfPatterns: Int, patternList: List, holder: AnnotationHolder) { + private fun checkPattern(element: ArendCompositeElement, numberOfPatterns: Int, patternList: List, holder: AnnotationHolder) { if (numberOfPatterns == 0) { return } diff --git a/src/main/kotlin/org/vclang/annotation/VclangImportHintAction.kt b/src/main/kotlin/org/arend/annotation/ArendImportHintAction.kt similarity index 76% rename from src/main/kotlin/org/vclang/annotation/VclangImportHintAction.kt rename to src/main/kotlin/org/arend/annotation/ArendImportHintAction.kt index d12181a34..ae5fa8361 100644 --- a/src/main/kotlin/org/vclang/annotation/VclangImportHintAction.kt +++ b/src/main/kotlin/org/arend/annotation/ArendImportHintAction.kt @@ -1,4 +1,4 @@ -package org.vclang.annotation +package org.arend.annotation import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.FileModificationService @@ -17,27 +17,27 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.search.ProjectAndLibrariesScope import com.intellij.psi.stubs.StubIndex -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.module.VcPreludeLibrary -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.ext.VcReferenceElement -import org.vclang.psi.ext.VcSourceNode -import org.vclang.psi.stubs.index.VcDefinitionIndex -import org.vclang.quickfix.ResolveRefFixData -import org.vclang.quickfix.ResolveRefQuickFix -import org.vclang.typechecking.TypeCheckingService +import org.arend.naming.reference.Referable +import org.arend.naming.scope.ScopeFactory +import org.arend.prelude.Prelude +import org.arend.term.group.Group +import org.arend.module.ArendPreludeLibrary +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiReferable +import org.arend.psi.ext.ArendReferenceElement +import org.arend.psi.ext.ArendSourceNode +import org.arend.psi.stubs.index.ArendDefinitionIndex +import org.arend.quickfix.ResolveRefFixData +import org.arend.quickfix.ResolveRefQuickFix +import org.arend.typechecking.TypeCheckingService enum class Result {POPUP_SHOWN, CLASS_AUTO_IMPORTED, POPUP_NOT_SHOWN} -class VclangImportHintAction(private val referenceElement: VcReferenceElement) : HintAction, HighPriorityAction { +class ArendImportHintAction(private val referenceElement: ArendReferenceElement) : HintAction, HighPriorityAction { override fun startInWriteAction(): Boolean = false - override fun getFamilyName(): String = "vclang.reference.resolve" + override fun getFamilyName(): String = "arend.reference.resolve" override fun showHint(editor: Editor): Boolean { val result = doFix(editor, true) @@ -56,7 +56,7 @@ class VclangImportHintAction(private val referenceElement: VcReferenceElement) : val libraryManager = TypeCheckingService.getInstance(project).libraryManager val preludeLibrary = libraryManager.getRegisteredLibrary("prelude") val preludeItems = HashSet() - if (preludeLibrary is VcPreludeLibrary) { + if (preludeLibrary is ArendPreludeLibrary) { val moduleGroup = preludeLibrary.getModuleGroup(Prelude.MODULE_PATH) if (moduleGroup != null) { iterateOverGroup(moduleGroup, { referable: Referable -> @@ -65,7 +65,7 @@ class VclangImportHintAction(private val referenceElement: VcReferenceElement) : } } - val items = StubIndex.getElements(VcDefinitionIndex.KEY, name, project, ProjectAndLibrariesScope(project), PsiReferable::class.java).filterIsInstance(). + val items = StubIndex.getElements(ArendDefinitionIndex.KEY, name, project, ProjectAndLibrariesScope(project), PsiReferable::class.java).filterIsInstance(). union(preludeItems.filterIsInstance(PsiLocatedReferable::class.java)) return items.mapNotNull { ResolveRefQuickFix.getDecision(it, referenceElement) } @@ -86,7 +86,7 @@ class VclangImportHintAction(private val referenceElement: VcReferenceElement) : ApplicationManager.getApplication().runWriteAction { val fixData = getItemsToImport() if (fixData.isEmpty()) return@runWriteAction - val action = VclangAddImportAction(project, editor, referenceElement, fixData) + val action = ArendAddImportAction(project, editor, referenceElement, fixData) action.execute() } @@ -100,7 +100,7 @@ class VclangImportHintAction(private val referenceElement: VcReferenceElement) : val psiFile = referenceElement.containingFile val project = referenceElement.project - val action = VclangAddImportAction(project, editor, referenceElement, fixData) + val action = ArendAddImportAction(project, editor, referenceElement, fixData) val isInModlessContext = if (Registry.`is`("ide.perProjectModality")) !LaterInvocator.isInModalContextForProject(editor.project) else @@ -125,15 +125,15 @@ class VclangImportHintAction(private val referenceElement: VcReferenceElement) : } companion object { - fun importQuickFixAllowed(referenceElement: VcReferenceElement) = - referenceElement is VcSourceNode && referenceUnresolved(referenceElement) && ScopeFactory.isGlobalScopeVisible(referenceElement.topmostEquivalentSourceNode) + fun importQuickFixAllowed(referenceElement: ArendReferenceElement) = + referenceElement is ArendSourceNode && referenceUnresolved(referenceElement) && ScopeFactory.isGlobalScopeVisible(referenceElement.topmostEquivalentSourceNode) - fun referenceUnresolved(referenceElement: VcReferenceElement): Boolean { + fun referenceUnresolved(referenceElement: ArendReferenceElement): Boolean { val reference = (if (referenceElement.isValid) referenceElement.reference else null) ?: return false // reference element is invalid return reference.resolve() == null // return false if already imported } - fun getResolved(referenceElement: VcReferenceElement): PsiElement? = + fun getResolved(referenceElement: ArendReferenceElement): PsiElement? = if (referenceElement.isValid) referenceElement.reference?.resolve() else null fun iterateOverGroup(group: Group, predicate: (Referable) -> Boolean, target: MutableSet) { diff --git a/src/main/kotlin/org/vclang/annotation/VclangReferenceImporter.kt b/src/main/kotlin/org/arend/annotation/ArendReferenceImporter.kt similarity index 78% rename from src/main/kotlin/org/vclang/annotation/VclangReferenceImporter.kt rename to src/main/kotlin/org/arend/annotation/ArendReferenceImporter.kt index 631eb46cd..c3e225025 100644 --- a/src/main/kotlin/org/vclang/annotation/VclangReferenceImporter.kt +++ b/src/main/kotlin/org/arend/annotation/ArendReferenceImporter.kt @@ -1,4 +1,4 @@ -package org.vclang.annotation +package org.arend.annotation import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.daemon.ReferenceImporter @@ -6,20 +6,20 @@ import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil import com.intellij.lang.java.JavaLanguage import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiFile -import org.vclang.VcLanguage -import org.vclang.psi.ext.VcReferenceElement +import org.arend.ArendLanguage +import org.arend.psi.ext.ArendReferenceElement -class VclangReferenceImporter : ReferenceImporter { +class ArendReferenceImporter : ReferenceImporter { override fun autoImportReferenceAt(editor: Editor, file: PsiFile, offset: Int): Boolean { if (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return false - if (!file.viewProvider.languages.contains(VcLanguage.INSTANCE)) + if (!file.viewProvider.languages.contains(ArendLanguage.INSTANCE)) return false val element = file.findReferenceAt(offset) - if (element is VcReferenceElement) { - val fix = VclangImportHintAction(element) + if (element is ArendReferenceElement) { + val fix = ArendImportHintAction(element) if (fix.isAvailable(element.project, editor, file)) { fix.doFix(editor, false) return true @@ -42,8 +42,8 @@ class VclangReferenceImporter : ReferenceImporter { val elements = CollectHighlightsUtil.getElementsInRange(file, startOffset, endOffset) for (element in elements) { - if (element is VcReferenceElement) { - val fix = VclangImportHintAction(element) + if (element is ArendReferenceElement) { + val fix = ArendImportHintAction(element) if (fix.isAvailable(element.project, editor, file)) { fix.doFix(editor, false) return true diff --git a/src/main/kotlin/org/vclang/codeInsight/VclangCharFilter.kt b/src/main/kotlin/org/arend/codeInsight/ArendCharFilter.kt similarity index 60% rename from src/main/kotlin/org/vclang/codeInsight/VclangCharFilter.kt rename to src/main/kotlin/org/arend/codeInsight/ArendCharFilter.kt index b746458e5..0a24a64ac 100644 --- a/src/main/kotlin/org/vclang/codeInsight/VclangCharFilter.kt +++ b/src/main/kotlin/org/arend/codeInsight/ArendCharFilter.kt @@ -1,14 +1,14 @@ -package org.vclang.codeInsight +package org.arend.codeInsight import com.intellij.codeInsight.lookup.CharFilter import com.intellij.codeInsight.lookup.Lookup -import org.vclang.VcLanguage -import org.vclang.search.VcWordScanner +import org.arend.ArendLanguage +import org.arend.search.ArendWordScanner -class VclangCharFilter : CharFilter() { +class ArendCharFilter : CharFilter() { override fun acceptChar(c: Char, prefixLength: Int, lookup: Lookup): CharFilter.Result? = - if (lookup.psiFile?.language?.isKindOf(VcLanguage.INSTANCE) == true) { - if (VcWordScanner.isVclangIdentifierPart(c)) { + if (lookup.psiFile?.language?.isKindOf(ArendLanguage.INSTANCE) == true) { + if (ArendWordScanner.isArendIdentifierPart(c)) { Result.ADD_TO_PREFIX } else when (c) { '.', ',', ' ', '(' -> Result.SELECT_ITEM_AND_FINISH_LOOKUP diff --git a/src/main/kotlin/org/arend/codeInsight/ArendDeclarationRangeHandler.kt b/src/main/kotlin/org/arend/codeInsight/ArendDeclarationRangeHandler.kt new file mode 100644 index 000000000..f8ee0a690 --- /dev/null +++ b/src/main/kotlin/org/arend/codeInsight/ArendDeclarationRangeHandler.kt @@ -0,0 +1,20 @@ +package org.arend.codeInsight + +import com.intellij.codeInsight.hint.DeclarationRangeHandler +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import org.arend.psi.ArendDefClass +import org.arend.psi.ArendDefData +import org.arend.psi.ArendDefFunction +import org.arend.psi.ArendDefInstance + +class ArendDeclarationRangeHandler : DeclarationRangeHandler { + override fun getDeclarationRange(container: PsiElement): TextRange = + when (container) { + is ArendDefFunction -> container.expr ?: container.nameTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier + is ArendDefData -> container.universeExpr ?: container.typeTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier + is ArendDefClass -> container.longNameList.lastOrNull() ?: container.fieldTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier + is ArendDefInstance -> container.nameTeleList.lastOrNull() ?: container.defIdentifier + else -> null + }?.let { TextRange(container.textRange.startOffset, it.textRange.endOffset) } ?: container.textRange +} diff --git a/src/main/kotlin/org/vclang/codeInsight/VcParameterInfoHandler.kt b/src/main/kotlin/org/arend/codeInsight/ArendParameterInfoHandler.kt similarity index 73% rename from src/main/kotlin/org/vclang/codeInsight/VcParameterInfoHandler.kt rename to src/main/kotlin/org/arend/codeInsight/ArendParameterInfoHandler.kt index 2dde7f67a..2fee02975 100644 --- a/src/main/kotlin/org/vclang/codeInsight/VcParameterInfoHandler.kt +++ b/src/main/kotlin/org/arend/codeInsight/ArendParameterInfoHandler.kt @@ -1,4 +1,4 @@ -package org.vclang.codeInsight +package org.arend.codeInsight import com.intellij.codeInsight.lookup.LookupElement import com.intellij.lang.parameterInfo.* @@ -6,25 +6,25 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.util.PsiTreeUtil -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.converter.IdReferableConverter -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.BaseAbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.abs.ConcreteBuilder -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import org.vclang.psi.VcArgument -import org.vclang.psi.VcArgumentAppExpr -import org.vclang.psi.VcExpr -import org.vclang.psi.VcTypeTele -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcSourceNode -import org.vclang.typing.parseBinOp - -class VcParameterInfoHandler: ParameterInfoHandler> { - // private var lastAppExpr: VcArgumentAppExpr? = null +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.converter.IdReferableConverter +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.naming.scope.Scope +import org.arend.term.abs.Abstract +import org.arend.term.abs.BaseAbstractExpressionVisitor +import org.arend.term.abs.ConcreteBuilder +import org.arend.term.concrete.Concrete +import org.arend.psi.ArendArgument +import org.arend.psi.ArendArgumentAppExpr +import org.arend.psi.ArendExpr +import org.arend.psi.ArendTypeTele +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendSourceNode +import org.arend.typing.parseBinOp + +class ArendParameterInfoHandler: ParameterInfoHandler> { + // private var lastAppExpr: ArendArgumentAppExpr? = null override fun updateUI(p: List?, context: ParameterInfoUIContext) { //val types = p?.map { Array(it.referableList.size, {_ -> ConcreteBuilder.convertExpression(it.type).toString()}) }?.toTypedArray()?.flatten() @@ -71,7 +71,7 @@ class VcParameterInfoHandler: ParameterInfoHandler? { + private fun findArgInParsedBinopSeq(arg: ArendExpr, expr: Concrete.Expression, curArgInd: Int, curFunc: Abstract.Reference?): Pair? { if (expr is Concrete.ReferenceExpression || expr is Concrete.HoleExpression) { - if ((expr.data as? VcSourceNode)?.topmostEquivalentSourceNode == arg.topmostEquivalentSourceNode || - (expr.data as? VcSourceNode)?.parentSourceNode?.topmostEquivalentSourceNode == arg.topmostEquivalentSourceNode) { + if ((expr.data as? ArendSourceNode)?.topmostEquivalentSourceNode == arg.topmostEquivalentSourceNode || + (expr.data as? ArendSourceNode)?.parentSourceNode?.topmostEquivalentSourceNode == arg.topmostEquivalentSourceNode) { if (curFunc == null) { if (expr is Concrete.ReferenceExpression && resolveIfNeeded(expr.referent, arg.scope) is Abstract.ParametersHolder && expr.data is Abstract.Reference) { return Pair(-1, expr.data as Abstract.Reference) @@ -207,47 +203,47 @@ class VcParameterInfoHandler: ParameterInfoHandler?>(null) { override fun visitBinOpSequence(data: Any?, left: Abstract.Expression, sequence: Collection, errorData: Abstract.ErrorData?, params: Void?): Pair? = findArgInParsedBinopSeq(arg, parseBinOp(left, sequence), -1, null) }, null) private fun findAppExpr(file: PsiFile, offset: Int): Pair? { - var absNode = fixedFindElement(file, offset)?.let { PsiTreeUtil.findFirstParent(it, {x -> x is Abstract.SourceNode}) as? Abstract.SourceNode } ?: return null + var absNode = fixedFindElement(file, offset)?.let { PsiTreeUtil.findFirstParent(it) { x -> x is Abstract.SourceNode } as? Abstract.SourceNode } ?: return null var absNodeParent = absNode.parentSourceNode ?: return null /* - val mbJumpToExternalAppExpr = lbl_@{arg:VcArgument?, appExpr:VcArgumentAppExpr -> + val mbJumpToExternalAppExpr = lbl_@{arg:ArendArgument?, appExpr:ArendArgumentAppExpr -> if (extractParametersHolder(appExpr) == null) { - if (arg != null || appExpr.parentSourceNode !is VcArgument || appExpr.parentSourceNode?.parentSourceNode !is VcArgumentAppExpr) { + if (arg != null || appExpr.parentSourceNode !is ArendArgument || appExpr.parentSourceNode?.parentSourceNode !is ArendArgumentAppExpr) { return@lbl_ null } - return@lbl_ Pair(appExpr.parentSourceNode as VcArgument, appExpr.parentSourceNode!!.parentSourceNode as VcArgumentAppExpr) + return@lbl_ Pair(appExpr.parentSourceNode as ArendArgument, appExpr.parentSourceNode!!.parentSourceNode as ArendArgumentAppExpr) } return@lbl_ Pair(arg, appExpr) } val processReference = lbl@{ - if (absNodeParent is VcArgument) { - val argLoc = locateArg(absNodeParent as VcArgument) - if (argLoc == null && absNodeParent.parentSourceNode?.parentSourceNode is VcArgument) { - return@lbl locateArg(absNodeParent.parentSourceNode?.parentSourceNode as VcArgument) + if (absNodeParent is ArendArgument) { + val argLoc = locateArg(absNodeParent as ArendArgument) + if (argLoc == null && absNodeParent.parentSourceNode?.parentSourceNode is ArendArgument) { + return@lbl locateArg(absNodeParent.parentSourceNode?.parentSourceNode as ArendArgument) } return@lbl argLoc - /*if (absNodeParent.parentSourceNode !is VcArgumentAppExpr) { + /*if (absNodeParent.parentSourceNode !is ArendArgumentAppExpr) { return@lbl null } else { - //return@lbl Pair(absNodeParent as? VcArgument, absNodeParent!!.parentSourceNode as VcArgumentAppExpr) - return@lbl mbJumpToExternalAppExpr(absNodeParent as? VcArgument, absNodeParent.parentSourceNode as VcArgumentAppExpr) + //return@lbl Pair(absNodeParent as? ArendArgument, absNodeParent!!.parentSourceNode as ArendArgumentAppExpr) + return@lbl mbJumpToExternalAppExpr(absNodeParent as? ArendArgument, absNodeParent.parentSourceNode as ArendArgumentAppExpr) } */ - } else if (absNodeParent is VcArgumentAppExpr) { - //return@lbl Pair(null, absNodeParent as VcArgumentAppExpr) - if (absNodeParent.parentSourceNode is VcArgument) { - return@lbl locateArg(absNodeParent.parentSourceNode as VcArgument) + } else if (absNodeParent is ArendArgumentAppExpr) { + //return@lbl Pair(null, absNodeParent as ArendArgumentAppExpr) + if (absNodeParent.parentSourceNode is ArendArgument) { + return@lbl locateArg(absNodeParent.parentSourceNode as ArendArgument) } - return@lbl extractParametersHolder(absNodeParent as VcArgumentAppExpr)?.let{ Pair(null, it)} - //mbJumpToExternalAppExpr(null, absNodeParent as VcArgumentAppExpr) + return@lbl extractParametersHolder(absNodeParent as ArendArgumentAppExpr)?.let{ Pair(null, it)} + //mbJumpToExternalAppExpr(null, absNodeParent as ArendArgumentAppExpr) } return@lbl null }*/ @@ -256,7 +252,7 @@ class VcParameterInfoHandler: ParameterInfoHandler (parameters.position.parent.parent as VcNsId).asKw == null }, + extend(CompletionType.BASIC, AS_CONTEXT, ProviderWithCondition({ parameters, _ -> (parameters.position.parent.parent as ArendNsId).asKw == null }, KeywordCompletionProvider(AS_KW_LIST))) - extend(CompletionType.BASIC, NS_CMD_CONTEXT, originalPositionCondition(withParent(VcFile::class.java), + extend(CompletionType.BASIC, NS_CMD_CONTEXT, originalPositionCondition(withParent(ArendFile::class.java), KeywordCompletionProvider(HU_KW_LIST))) - extend(CompletionType.BASIC, NS_CMD_CONTEXT, ProviderWithCondition({ parameters, _ -> noUsing(parameters.position.parent.parent as VcStatCmd) }, + extend(CompletionType.BASIC, NS_CMD_CONTEXT, ProviderWithCondition({ parameters, _ -> noUsing(parameters.position.parent.parent as ArendStatCmd) }, KeywordCompletionProvider(USING_KW_LIST))) - extend(CompletionType.BASIC, NS_CMD_CONTEXT, ProviderWithCondition({ parameters, _ -> noUsingAndHiding(parameters.position.parent.parent as VcStatCmd) }, + extend(CompletionType.BASIC, NS_CMD_CONTEXT, ProviderWithCondition({ parameters, _ -> noUsingAndHiding(parameters.position.parent.parent as ArendStatCmd) }, KeywordCompletionProvider(HIDING_KW_LIST))) - extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, VcNsUsing::class.java, VcStatCmd::class.java), - ProviderWithCondition({ parameters, _ -> noHiding(parameters.position.parent.parent.parent as VcStatCmd) }, + extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, ArendNsUsing::class.java, ArendStatCmd::class.java), + ProviderWithCondition({ parameters, _ -> noHiding(parameters.position.parent.parent.parent as ArendStatCmd) }, KeywordCompletionProvider(HIDING_KW_LIST))) - val statementCondition = { psi: PsiElement -> psi is VcStatement || psi is VcClassStat } + val statementCondition = { psi: PsiElement -> psi is ArendStatement || psi is ArendClassStat } extend(CompletionType.BASIC, STATEMENT_END_CONTEXT, onJointOfStatementsCondition(statementCondition, @@ -64,12 +64,12 @@ class VclangCompletionContributor : CompletionContributor() { ProviderWithCondition({ parameters, _ -> val pp = parameters.position val ppp = pp.parent - pp.ancestors.filter { it is VcWhere || it is VcDefClass }.none() || - (ppp is PsiErrorElement && ppp.parent is VcDefClass && ppp.nextSibling == null) + pp.ancestors.filter { it is ArendWhere || it is ArendDefClass }.none() || + (ppp is PsiErrorElement && ppp.parent is ArendDefClass && ppp.nextSibling == null) }, KeywordCompletionProvider(IMPORT_KW_LIST)))) - val coerceAdmissibleAncestors = or(and(ofTypeK(VcWhere::class.java), withParents(VcDefData::class.java, VcDefClass::class.java)), ofTypeK(VcDefClass::class.java)) + val coerceAdmissibleAncestors = or(and(ofTypeK(ArendWhere::class.java), withParents(ArendDefData::class.java, ArendDefClass::class.java)), ofTypeK(ArendDefClass::class.java)) extend(CompletionType.BASIC, STATEMENT_END_CONTEXT, onJointOfStatementsCondition(statementCondition, ProviderWithCondition({ parameters, _ -> parameters.position.ancestors.filter { coerceAdmissibleAncestors.accepts(it) }.toSet().isNotEmpty() }, @@ -80,10 +80,10 @@ class VclangCompletionContributor : CompletionContributor() { extend(CompletionType.BASIC, WHERE_CONTEXT, onJointOfStatementsCondition(statementCondition, KeywordCompletionProvider(WHERE_KW_LIST), true, false) { jD: JointData -> var anc = jD.prevElement - while (anc != null && anc !is VcDefinition && anc !is VcDefModule && anc !is VcClassStat) anc = anc.parent + while (anc != null && anc !is ArendDefinition && anc !is ArendDefModule && anc !is ArendClassStat) anc = anc.parent if (anc != null) { - val da: VcDefinition? = anc as? VcDefinition /* TODO: create WhereHolder concept */ - val dm: VcDefModule? = anc as? VcDefModule + val da: ArendDefinition? = anc as? ArendDefinition /* TODO: create WhereHolder concept */ + val dm: ArendDefModule? = anc as? ArendDefModule (when { da is DefinitionAdapter<*> -> da.getWhere() == null dm != null -> dm.where == null @@ -93,16 +93,16 @@ class VclangCompletionContributor : CompletionContributor() { }) val noExtendsCondition = ProviderWithCondition({ cP, _ -> - val dC = cP.position.ancestors.filterIsInstance().firstOrNull() + val dC = cP.position.ancestors.filterIsInstance().firstOrNull() if (dC != null) dC.extendsKw == null else false }, KeywordCompletionProvider(EXTENDS_KW_LIST)) - extend(CompletionType.BASIC, and(withAncestors(PsiErrorElement::class.java, VcDefClass::class.java), afterLeaf(ID)), noExtendsCondition) - extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, VcFieldTele::class.java, VcDefClass::class.java), + extend(CompletionType.BASIC, and(withAncestors(PsiErrorElement::class.java, ArendDefClass::class.java), afterLeaf(ID)), noExtendsCondition) + extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, ArendFieldTele::class.java, ArendDefClass::class.java), ProviderWithCondition({ parameters, _ -> var nS = parameters.position.parent?.parent?.nextSibling while (nS is PsiWhiteSpace) nS = nS.nextSibling - nS !is VcFieldTele + nS !is ArendFieldTele }, noExtendsCondition)) extend(CompletionType.BASIC, and(DATA_CONTEXT, afterLeaf(COLON)), KeywordCompletionProvider(DATA_UNIVERSE_KW)) @@ -112,26 +112,26 @@ class VclangCompletionContributor : CompletionContributor() { val context = ofType(PI_KW, SIGMA_KW) - var tele: VcTypeTele? = null + var tele: ArendTypeTele? = null while (result != null) { - if (result is VcTypeTele) tele = result - if (result is VcExpr && result !is VcUniverseAtom) break + if (result is ArendTypeTele) tele = result + if (result is ArendExpr && result !is ArendUniverseAtom) break result = result.parent } if (context.accepts(expression)) true else if (tele?.text == null || tele.text.startsWith("(")) false else //Not Bare \Sigma or \Pi -- should display all expression keywords in completion - result is VcSigmaExpr || result is VcPiExpr + result is ArendSigmaExpr || result is ArendPiExpr } val noExpressionKwsAfter = ofType(SET, PROP_KW, UNIVERSE, TRUNCATED_UNIVERSE, NEW_KW) - val afterElimVar = and(ofType(ID), withAncestors(VcRefIdentifier::class.java, VcElim::class.java)) + val afterElimVar = and(ofType(ID), withAncestors(ArendRefIdentifier::class.java, ArendElim::class.java)) val expressionFilter = { basicCompletionProvider: CompletionProvider, allowInBareSigmaOrPiExpressions: Boolean, allowInArgumentExpressionContext: Boolean -> genericJointCondition({ cP, _, jD -> !FIELD_CONTEXT.accepts(jD.prevElement) && //No keyword completion after field !INSTANCE_CONTEXT.accepts(cP.position) && //No keyword completion in instance type - !(ofType(RBRACE).accepts(jD.prevElement) && withParent(VcCaseExpr::class.java).accepts(jD.prevElement)) && //No keyword completion after \with or } in case expr + !(ofType(RBRACE).accepts(jD.prevElement) && withParent(ArendCaseExpr::class.java).accepts(jD.prevElement)) && //No keyword completion after \with or } in case expr !(ofType(LAM_KW, LET_KW, WITH_KW).accepts(jD.prevElement)) && //No keyword completion after \lam or \let !(noExpressionKwsAfter.accepts(jD.prevElement)) && //No expression keyword completion after universe literals or \new keyword !(or(LPH_CONTEXT, LPH_LEVEL_CONTEXT).accepts(cP.position)) && //No expression keywords when completing levels in universes @@ -178,13 +178,13 @@ class VclangCompletionContributor : CompletionContributor() { extend(CompletionType.BASIC, LPH_CONTEXT, ProviderWithCondition({ cP, _ -> val pp = cP.position.parent.parent when (pp) { - is VcSetUniverseAppExpr, is VcTruncatedUniverseAppExpr -> - pp.children.filterIsInstance().isEmpty() - else -> pp.children.filterIsInstance().size <= 1 + is ArendSetUniverseAppExpr, is ArendTruncatedUniverseAppExpr -> + pp.children.filterIsInstance().isEmpty() + else -> pp.children.filterIsInstance().size <= 1 } }, KeywordCompletionProvider(LPH_KW_LIST))) - extend(CompletionType.BASIC, withParent(VcLevelExpr::class.java), ProviderWithCondition({ cP, _ -> + extend(CompletionType.BASIC, withParent(ArendLevelExpr::class.java), ProviderWithCondition({ cP, _ -> when (cP.position.parent?.firstChild?.node?.elementType) { MAX_KW, SUC_KW -> true else -> false @@ -207,8 +207,8 @@ class VclangCompletionContributor : CompletionContributor() { return exprFound } - val pairingInCondition = { pos: PsiElement -> pairingWordCondition({ position: PsiElement? -> position is VcLetExpr && position.inKw == null }, pos) } - val pairingWithCondition = { pos: PsiElement -> pairingWordCondition({ position: PsiElement? -> position is VcCaseExpr && position.withKw == null }, pos) } + val pairingInCondition = { pos: PsiElement -> pairingWordCondition({ position: PsiElement? -> position is ArendLetExpr && position.inKw == null }, pos) } + val pairingWithCondition = { pos: PsiElement -> pairingWordCondition({ position: PsiElement? -> position is ArendCaseExpr && position.withKw == null }, pos) } fun pairingWordProvider(condition: (PsiElement) -> Boolean, cp: CompletionProvider) = ProviderWithCondition({ cP, _ -> condition(cP.position) }, cp) @@ -218,7 +218,7 @@ class VclangCompletionContributor : CompletionContributor() { extend(CompletionType.BASIC, caseContext, pairingWordProvider(pairingWithCondition, KeywordCompletionProvider(WITH_KW_LIST))) - val asCondition1 = { position: PsiElement? -> position is VcCaseArg && position.asKw == null } + val asCondition1 = { position: PsiElement? -> position is ArendCaseArg && position.asKw == null } val asCondition2 = { position: PsiElement? -> //Alternative condition needed to ensure that as is added before semicolon var p = position @@ -227,8 +227,8 @@ class VclangCompletionContributor : CompletionContributor() { } val returnCondition = { pos: PsiElement -> pairingWordCondition({ position: PsiElement? -> - if (position is VcCaseArg) { - val pp = position.parent as? VcCaseExpr + if (position is ArendCaseArg) { + val pp = position.parent as? ArendCaseExpr pp != null && pp.caseArgList.lastOrNull() == position && pp.returnKw == null } else false }, pos) @@ -255,21 +255,21 @@ class VclangCompletionContributor : CompletionContributor() { var body = pos2.nextSibling while (body is PsiWhiteSpace || body is PsiComment) body = body.nextSibling - if ((body is VcFunctionBody) && (pos2.parent is VcDefFunction)) { - val fBody = (pos2.parent as VcDefFunction).functionBody + if ((body is ArendFunctionBody) && (pos2.parent is ArendDefFunction)) { + val fBody = (pos2.parent as ArendDefFunction).functionBody exprFound = fBody == null || fBody.fatArrow == null && fBody.elim?.elimKw == null - exprFound = exprFound && !emptyTeleList((pos2.parent as VcDefFunction).nameTeleList) // No point of writing elim keyword if there are no arguments + exprFound = exprFound && !emptyTeleList((pos2.parent as ArendDefFunction).nameTeleList) // No point of writing elim keyword if there are no arguments break } - if ((body is VcDataBody) && (pos2.parent is VcDefData) &&!functionsOnly) { - val dBody = (pos2.parent as VcDefData).dataBody + if ((body is ArendDataBody) && (pos2.parent is ArendDefData) &&!functionsOnly) { + val dBody = (pos2.parent as ArendDefData).dataBody exprFound = dBody == null || (dBody.elim?.elimKw == null && dBody.constructorList.isNullOrEmpty() && dBody.constructorClauseList.isNullOrEmpty()) - exprFound = exprFound && !emptyTeleList((pos2.parent as VcDefData).typeTeleList) + exprFound = exprFound && !emptyTeleList((pos2.parent as ArendDefData).typeTeleList) break } } - if (pos2 is VcConstructor && pos2.elim == null) { + if (pos2 is ArendConstructor && pos2.elim == null) { exprFound = !emptyTeleList(pos2.typeTeleList) } if (pos2.nextSibling == null) pos2 = pos2.parent else break @@ -280,27 +280,27 @@ class VclangCompletionContributor : CompletionContributor() { extend(CompletionType.BASIC, ELIM_CONTEXT, ProviderWithCondition(elimCondition.invoke(false), KeywordCompletionProvider(ELIM_WITH_KW_LIST))) extend(CompletionType.BASIC, ELIM_CONTEXT, ProviderWithCondition(elimCondition.invoke(true), KeywordCompletionProvider(COWITH_KW_LIST))) - val isLiteralApp = { argumentAppExpr: VcArgumentAppExpr -> + val isLiteralApp = { argumentAppExpr: ArendArgumentAppExpr -> argumentAppExpr.longNameExpr != null || - ((argumentAppExpr.children[0] as? VcAtomFieldsAcc)?.atom?.literal?.longName != null) + ((argumentAppExpr.children[0] as? ArendAtomFieldsAcc)?.atom?.literal?.longName != null) } val unifiedLevelCondition = { atomIndex: Int?, forbidLevelExprs: Boolean, threshold: Int -> { cP: CompletionParameters, _: ProcessingContext? -> - var anchor: PsiElement? = if (atomIndex != null) cP.position.ancestors.filterIsInstance().elementAtOrNull(atomIndex) else null - var argumentAppExpr: VcArgumentAppExpr? = - (anchor?.parent as? VcAtomArgument)?.parent as? VcArgumentAppExpr - ?: anchor?.parent as? VcArgumentAppExpr + var anchor: PsiElement? = if (atomIndex != null) cP.position.ancestors.filterIsInstance().elementAtOrNull(atomIndex) else null + var argumentAppExpr: ArendArgumentAppExpr? = + (anchor?.parent as? ArendAtomArgument)?.parent as? ArendArgumentAppExpr + ?: anchor?.parent as? ArendArgumentAppExpr if (anchor == null) { anchor = cP.position.parent - argumentAppExpr = anchor?.parent as? VcArgumentAppExpr + argumentAppExpr = anchor?.parent as? ArendArgumentAppExpr if (argumentAppExpr == null) { anchor = null } } if (anchor == null) { - argumentAppExpr = cP.position.parent as? VcArgumentAppExpr + argumentAppExpr = cP.position.parent as? ArendArgumentAppExpr } if (argumentAppExpr != null && anchor != null && isLiteralApp(argumentAppExpr)) { @@ -313,7 +313,7 @@ class VclangCompletionContributor : CompletionContributor() { } for (ch in argumentAppExpr.children) { if (ch == anchor || ch == anchor.parent) break - if (ch is VcAtomArgument) forbidden = true + if (ch is ArendAtomArgument) forbidden = true } counter < threshold && !forbidden } else argumentAppExpr?.longNameExpr?.levelsExpr?.levelsKw != null && isLiteralApp(argumentAppExpr) @@ -326,11 +326,11 @@ class VclangCompletionContributor : CompletionContributor() { extend(CompletionType.BASIC, ARGUMENT_EXPRESSION_IN_BRACKETS, ProviderWithCondition(unifiedLevelCondition.invoke(1, false, 2), KeywordCompletionProvider(LPH_LEVEL_KWS))) - extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, VcArgumentAppExpr::class.java), + extend(CompletionType.BASIC, withAncestors(PsiErrorElement::class.java, ArendArgumentAppExpr::class.java), ProviderWithCondition(unifiedLevelCondition.invoke(null, false, 2), KeywordCompletionProvider(LPH_LEVEL_KWS))) - extend(CompletionType.BASIC, withParent(VcArgumentAppExpr::class.java), ProviderWithCondition({ cP, _ -> - val argumentAppExpr: VcArgumentAppExpr? = cP.position.parent as VcArgumentAppExpr + extend(CompletionType.BASIC, withParent(ArendArgumentAppExpr::class.java), ProviderWithCondition({ cP, _ -> + val argumentAppExpr: ArendArgumentAppExpr? = cP.position.parent as ArendArgumentAppExpr argumentAppExpr?.longNameExpr?.levelsExpr?.levelsKw != null && isLiteralApp(argumentAppExpr) }, KeywordCompletionProvider(LPH_LEVEL_KWS))) @@ -385,58 +385,58 @@ class VclangCompletionContributor : CompletionContributor() { private fun withParents(vararg et: Class) = or(*et.map { withParent(it) }.toTypedArray()) private fun withAncestors(vararg et: Class): ElementPattern = and(*et.mapIndexed { i, it -> PlatformPatterns.psiElement().withSuperParent(i + 1, PlatformPatterns.psiElement(it)) }.toTypedArray()) - val PREC_CONTEXT = or(afterLeaf(FUNCTION_KW), afterLeaf(COERCE_KW), afterLeaf(DATA_KW), afterLeaf(CLASS_KW), afterLeaf(RECORD_KW), and(afterLeaf(AS_KW), withGrandParent(VcNsId::class.java)), - and(afterLeaf(PIPE), withGrandParents(VcConstructor::class.java, VcDataBody::class.java)), //simple data type constructor - and(afterLeaf(FAT_ARROW), withGrandParents(VcConstructor::class.java, VcConstructorClause::class.java)), //data type constructors with patterns - and(afterLeaf(PIPE), withGrandParents(VcClassField::class.java, VcClassStat::class.java)), //class field - and(afterLeaf(FAT_ARROW), withGrandParent(VcClassFieldSyn::class.java))) //class field synonym + val PREC_CONTEXT = or(afterLeaf(FUNCTION_KW), afterLeaf(COERCE_KW), afterLeaf(DATA_KW), afterLeaf(CLASS_KW), afterLeaf(RECORD_KW), and(afterLeaf(AS_KW), withGrandParent(ArendNsId::class.java)), + and(afterLeaf(PIPE), withGrandParents(ArendConstructor::class.java, ArendDataBody::class.java)), //simple data type constructor + and(afterLeaf(FAT_ARROW), withGrandParents(ArendConstructor::class.java, ArendConstructorClause::class.java)), //data type constructors with patterns + and(afterLeaf(PIPE), withGrandParents(ArendClassField::class.java, ArendClassStat::class.java)), //class field + and(afterLeaf(FAT_ARROW), withGrandParent(ArendClassFieldSyn::class.java))) //class field synonym - val AS_CONTEXT = and(withGrandParent(VcNsId::class.java), withParents(VcRefIdentifier::class.java, PsiErrorElement::class.java)) - val NS_CMD_CONTEXT = withAncestors(PsiErrorElement::class.java, VcStatCmd::class.java) + val AS_CONTEXT = and(withGrandParent(ArendNsId::class.java), withParents(ArendRefIdentifier::class.java, PsiErrorElement::class.java)) + val NS_CMD_CONTEXT = withAncestors(PsiErrorElement::class.java, ArendStatCmd::class.java) val ANY: PsiElementPattern.Capture = PlatformPatterns.psiElement() - val STATEMENT_END_CONTEXT = withParents(PsiErrorElement::class.java, VcRefIdentifier::class.java) - val WHERE_CONTEXT = and(or(STATEMENT_END_CONTEXT, withAncestors(VcDefIdentifier::class.java, VcIdentifierOrUnknown::class.java, VcNameTele::class.java)), + val STATEMENT_END_CONTEXT = withParents(PsiErrorElement::class.java, ArendRefIdentifier::class.java) + val WHERE_CONTEXT = and(or(STATEMENT_END_CONTEXT, withAncestors(ArendDefIdentifier::class.java, ArendIdentifierOrUnknown::class.java, ArendNameTele::class.java)), not(PREC_CONTEXT), not(or(afterLeaf(COLON), afterLeaf(TRUNCATED_KW), afterLeaf(FAT_ARROW), afterLeaf(WITH_KW), afterLeaf(ARROW), afterLeaf(IN_KW), afterLeaf(INSTANCE_KW), afterLeaf(EXTENDS_KW), afterLeaf(DOT), afterLeaf(NEW_KW), afterLeaf(CASE_KW), afterLeaf(LET_KW), afterLeaf(WHERE_KW))), - not(withAncestors(PsiErrorElement::class.java, VcDefInstance::class.java)), // don't allow \where in incomplete instance expressions - not(withAncestors(VcDefIdentifier::class.java, VcIdentifierOrUnknown::class.java, VcNameTele::class.java, VcDefInstance::class.java)) + not(withAncestors(PsiErrorElement::class.java, ArendDefInstance::class.java)), // don't allow \where in incomplete instance expressions + not(withAncestors(ArendDefIdentifier::class.java, ArendIdentifierOrUnknown::class.java, ArendNameTele::class.java, ArendDefInstance::class.java)) ) - val DATA_CONTEXT = withAncestors(PsiErrorElement::class.java, VcDefData::class.java, VcStatement::class.java) - val EXPRESSION_CONTEXT = or(withAncestors(VcRefIdentifier::class.java, VcLongName::class.java, VcLiteral::class.java, VcAtom::class.java), - withParentOrGrandParent(VcFunctionBody::class.java), - withParentOrGrandParent(VcExpr::class.java), - withAncestors(PsiErrorElement::class.java, VcClause::class.java), - and(ofType(INVALID_KW), afterLeaf(COLON), withParent(VcNameTele::class.java))) - val CASE_CONTEXT = or(EXPRESSION_CONTEXT, withAncestors(PsiErrorElement::class.java, VcCaseArg::class.java, VcCaseExpr::class.java)) - val FIELD_CONTEXT = withAncestors(VcFieldAcc::class.java, VcAtomFieldsAcc::class.java) + val DATA_CONTEXT = withAncestors(PsiErrorElement::class.java, ArendDefData::class.java, ArendStatement::class.java) + val EXPRESSION_CONTEXT = or(withAncestors(ArendRefIdentifier::class.java, ArendLongName::class.java, ArendLiteral::class.java, ArendAtom::class.java), + withParentOrGrandParent(ArendFunctionBody::class.java), + withParentOrGrandParent(ArendExpr::class.java), + withAncestors(PsiErrorElement::class.java, ArendClause::class.java), + and(ofType(INVALID_KW), afterLeaf(COLON), withParent(ArendNameTele::class.java))) + val CASE_CONTEXT = or(EXPRESSION_CONTEXT, withAncestors(PsiErrorElement::class.java, ArendCaseArg::class.java, ArendCaseExpr::class.java)) + val FIELD_CONTEXT = withAncestors(ArendFieldAcc::class.java, ArendAtomFieldsAcc::class.java) val TELE_CONTEXT = - or(and(withAncestors(PsiErrorElement::class.java, VcTypeTele::class.java), - withGreatGrandParents(VcClassField::class.java, VcConstructor::class.java, VcDefData::class.java, VcPiExpr::class.java, VcSigmaExpr::class.java)), - withAncestors(VcRefIdentifier::class.java, VcLongName::class.java, VcLiteral::class.java, VcTypeTele::class.java)) + or(and(withAncestors(PsiErrorElement::class.java, ArendTypeTele::class.java), + withGreatGrandParents(ArendClassField::class.java, ArendConstructor::class.java, ArendDefData::class.java, ArendPiExpr::class.java, ArendSigmaExpr::class.java)), + withAncestors(ArendRefIdentifier::class.java, ArendLongName::class.java, ArendLiteral::class.java, ArendTypeTele::class.java)) val FIRST_TYPE_TELE_CONTEXT = and(afterLeaf(ID), withParent(PsiErrorElement::class.java), - withGrandParents(VcDefData::class.java, VcClassField::class.java, VcConstructor::class.java)) + withGrandParents(ArendDefData::class.java, ArendClassField::class.java, ArendConstructor::class.java)) val DATA_OR_EXPRESSION_CONTEXT = or(DATA_CONTEXT, EXPRESSION_CONTEXT, TELE_CONTEXT, FIRST_TYPE_TELE_CONTEXT) - val ARGUMENT_EXPRESSION = or(withAncestors(VcRefIdentifier::class.java, VcLongName::class.java, VcLiteral::class.java, VcAtom::class.java, VcAtomFieldsAcc::class.java, VcAtomArgument::class.java), - withAncestors(PsiErrorElement::class.java, VcAtomFieldsAcc::class.java, VcArgumentAppExpr::class.java)) - val LPH_CONTEXT = and(withParent(PsiErrorElement::class.java), withGrandParents(VcSetUniverseAppExpr::class.java, VcUniverseAppExpr::class.java, VcTruncatedUniverseAppExpr::class.java)) - val LPH_LEVEL_CONTEXT = and(withAncestors(PsiErrorElement::class.java, VcAtomLevelExpr::class.java)) + val ARGUMENT_EXPRESSION = or(withAncestors(ArendRefIdentifier::class.java, ArendLongName::class.java, ArendLiteral::class.java, ArendAtom::class.java, ArendAtomFieldsAcc::class.java, ArendAtomArgument::class.java), + withAncestors(PsiErrorElement::class.java, ArendAtomFieldsAcc::class.java, ArendArgumentAppExpr::class.java)) + val LPH_CONTEXT = and(withParent(PsiErrorElement::class.java), withGrandParents(ArendSetUniverseAppExpr::class.java, ArendUniverseAppExpr::class.java, ArendTruncatedUniverseAppExpr::class.java)) + val LPH_LEVEL_CONTEXT = and(withAncestors(PsiErrorElement::class.java, ArendAtomLevelExpr::class.java)) val ELIM_CONTEXT = and(not(or(afterLeaf(DATA_KW), afterLeaf(FUNCTION_KW), afterLeaf(COERCE_KW), afterLeaf(TRUNCATED_KW), afterLeaf(COLON))), or(EXPRESSION_CONTEXT, TELE_CONTEXT, - withAncestors(VcDefIdentifier::class.java, VcIdentifierOrUnknown::class.java, VcNameTele::class.java), - and(withParent(PsiErrorElement::class.java), withGrandParents(VcNameTele::class.java, VcTypeTele::class.java, VcDefData::class.java, VcDefFunction::class.java)))) + withAncestors(ArendDefIdentifier::class.java, ArendIdentifierOrUnknown::class.java, ArendNameTele::class.java), + and(withParent(PsiErrorElement::class.java), withGrandParents(ArendNameTele::class.java, ArendTypeTele::class.java, ArendDefData::class.java, ArendDefFunction::class.java)))) val ARGUMENT_EXPRESSION_IN_BRACKETS = - withAncestors(VcRefIdentifier::class.java, VcLongName::class.java, VcLiteral::class.java, VcAtom::class.java, - VcAtomFieldsAcc::class.java, VcArgumentAppExpr::class.java, VcNewExpr::class.java, VcTupleExpr::class.java, VcTuple::class.java, - VcAtom::class.java, VcAtomFieldsAcc::class.java, VcAtomArgument::class.java, VcArgumentAppExpr::class.java) - val INSTANCE_CONTEXT = withAncestors(VcRefIdentifier::class.java, VcLongName::class.java, VcLiteral::class.java, VcAtom::class.java, VcAtomFieldsAcc::class.java, VcArgumentAppExpr::class.java, VcDefInstance::class.java) - val GOAL_IN_COPATTERN = VclangCompletionContributor.withAncestors(VcLiteral::class.java, VcAtom::class.java, VcAtomFieldsAcc::class.java, - VcArgumentAppExpr::class.java, VcNewExpr::class.java, VcCoClause::class.java) + withAncestors(ArendRefIdentifier::class.java, ArendLongName::class.java, ArendLiteral::class.java, ArendAtom::class.java, + ArendAtomFieldsAcc::class.java, ArendArgumentAppExpr::class.java, ArendNewExpr::class.java, ArendTupleExpr::class.java, ArendTuple::class.java, + ArendAtom::class.java, ArendAtomFieldsAcc::class.java, ArendAtomArgument::class.java, ArendArgumentAppExpr::class.java) + val INSTANCE_CONTEXT = withAncestors(ArendRefIdentifier::class.java, ArendLongName::class.java, ArendLiteral::class.java, ArendAtom::class.java, ArendAtomFieldsAcc::class.java, ArendArgumentAppExpr::class.java, ArendDefInstance::class.java) + val GOAL_IN_COPATTERN = ArendCompletionContributor.withAncestors(ArendLiteral::class.java, ArendAtom::class.java, ArendAtomFieldsAcc::class.java, + ArendArgumentAppExpr::class.java, ArendNewExpr::class.java, ArendCoClause::class.java) - private fun noUsing(cmd: VcStatCmd): Boolean = cmd.nsUsing?.usingKw == null - private fun noHiding(cmd: VcStatCmd): Boolean = cmd.hidingKw == null - private fun noUsingAndHiding(cmd: VcStatCmd): Boolean = noUsing(cmd) && noHiding(cmd) + private fun noUsing(cmd: ArendStatCmd): Boolean = cmd.nsUsing?.usingKw == null + private fun noHiding(cmd: ArendStatCmd): Boolean = cmd.hidingKw == null + private fun noUsingAndHiding(cmd: ArendStatCmd): Boolean = noUsing(cmd) && noHiding(cmd) class ProviderWithCondition(private val condition: (CompletionParameters, ProcessingContext?) -> Boolean, private val completionProvider: CompletionProvider) : CompletionProvider() { @@ -499,8 +499,8 @@ class VclangCompletionContributor : CompletionContributor() { private fun parentIsStatementHolder(p: PsiElement?) = when (p?.parent) { - is VcWhere -> true - is VcDefClass -> (p.parent as VcDefClass).fatArrow == null + is ArendWhere -> true + is ArendDefClass -> (p.parent as ArendDefClass).fatArrow == null else -> false } @@ -514,8 +514,8 @@ class VclangCompletionContributor : CompletionContributor() { val rightSideOk = (allowInsideBraces && jointData.nextElement?.node?.elementType == RBRACE && parentIsStatementHolder(jointData.nextElement)) || ancestorsNE.isEmpty() val leftStatement = ancestorsPE.lastOrNull() val rightStatement = ancestorsNE.lastOrNull() - val isInsideClassFields = (leftStatement is VcClassStat && leftStatement.definition == null) && - rightStatement is VcClassStat && rightStatement.definition == null + val isInsideClassFields = (leftStatement is ArendClassStat && leftStatement.definition == null) && + rightStatement is ArendClassStat && rightStatement.definition == null val correctStatements = (leftSideOk || rightSideOk || leftStatement != null && rightStatement != null && !isInsideClassFields && @@ -573,7 +573,7 @@ class VclangCompletionContributor : CompletionContributor() { open fun computePrefix(parameters: CompletionParameters, resultSet: CompletionResultSet): String { var prefix = resultSet.prefixMatcher.prefix - val lastInvalidIndex = prefix.mapIndexedNotNull { i, c -> if (!VcWordScanner.isVclangIdentifierPart(c)) i else null }.lastOrNull() + val lastInvalidIndex = prefix.mapIndexedNotNull { i, c -> if (!ArendWordScanner.isArendIdentifierPart(c)) i else null }.lastOrNull() if (lastInvalidIndex != null) prefix = prefix.substring(lastInvalidIndex + 1, prefix.length) val pos = parameters.offset - prefix.length - 1 if (pos >= 0 && pos < parameters.originalFile.textLength) diff --git a/src/main/kotlin/org/vclang/commenter/VcCommenter.kt b/src/main/kotlin/org/arend/commenter/ArendCommenter.kt similarity index 84% rename from src/main/kotlin/org/vclang/commenter/VcCommenter.kt rename to src/main/kotlin/org/arend/commenter/ArendCommenter.kt index 063eaaa8c..20897b806 100644 --- a/src/main/kotlin/org/vclang/commenter/VcCommenter.kt +++ b/src/main/kotlin/org/arend/commenter/ArendCommenter.kt @@ -1,8 +1,8 @@ -package org.vclang.commenter +package org.arend.commenter import com.intellij.lang.Commenter -class VcCommenter : Commenter { +class ArendCommenter : Commenter { override fun getLineCommentPrefix(): String? = "--" diff --git a/src/main/kotlin/org/arend/editor/ArendColorSettingsPage.kt b/src/main/kotlin/org/arend/editor/ArendColorSettingsPage.kt new file mode 100644 index 000000000..c917172cf --- /dev/null +++ b/src/main/kotlin/org/arend/editor/ArendColorSettingsPage.kt @@ -0,0 +1,47 @@ +package org.arend.editor + +import com.intellij.openapi.editor.colors.TextAttributesKey +import com.intellij.openapi.fileTypes.SyntaxHighlighter +import com.intellij.openapi.options.colors.AttributesDescriptor +import com.intellij.openapi.options.colors.ColorDescriptor +import com.intellij.openapi.options.colors.ColorSettingsPage +import org.arend.ArendIcons +import org.arend.highlight.ArendHighlightingColors +import org.arend.highlight.ArendSyntaxHighlighter +import javax.swing.Icon + +class ArendColorSettingsPage : ColorSettingsPage { + + override fun getIcon(): Icon? = ArendIcons.AREND + + override fun getHighlighter(): SyntaxHighlighter = ArendSyntaxHighlighter() + + override fun getDemoText(): String = DEMO_TEXT + + override fun getAdditionalHighlightingTagToDescriptorMap(): Map? + = null + + override fun getAttributeDescriptors(): Array = DESCRIPTORS + + override fun getColorDescriptors(): Array = ColorDescriptor.EMPTY_ARRAY + + override fun getDisplayName(): String = "Arend" + + companion object { + private val DESCRIPTORS = ArendHighlightingColors.values() + .map { it.attributesDescriptor } + .toTypedArray() + + // TODO: update demo text + private const val DEMO_TEXT = + "\\import Data.Bool\n" + + "\n" + + "\\class Semigroup {\n" + + " \\field X : \\Type0\n" + + " \\field op : X -> X -> X\n" + + " \\field assoc : \\Pi (x y z : X) -> op (op x y) z = op x (op y z)\n" + + "}\n" + + "\n" + + "\\func xor-semigroup => \\new Semigroup { X => Bool | op => xor | assoc => {?} }" + } +} diff --git a/src/main/kotlin/org/vclang/hierarchy/VcHierarchyNodeDescriptor.kt b/src/main/kotlin/org/arend/hierarchy/ArendHierarchyNodeDescriptor.kt similarity index 59% rename from src/main/kotlin/org/vclang/hierarchy/VcHierarchyNodeDescriptor.kt rename to src/main/kotlin/org/arend/hierarchy/ArendHierarchyNodeDescriptor.kt index 98124b95a..2689f647d 100644 --- a/src/main/kotlin/org/vclang/hierarchy/VcHierarchyNodeDescriptor.kt +++ b/src/main/kotlin/org/arend/hierarchy/ArendHierarchyNodeDescriptor.kt @@ -1,15 +1,15 @@ -package org.vclang.hierarchy +package org.arend.hierarchy import com.intellij.ide.hierarchy.HierarchyNodeDescriptor import com.intellij.openapi.project.Project import com.intellij.openapi.util.Comparing import com.intellij.psi.PsiElement -import org.vclang.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiLocatedReferable -class VcHierarchyNodeDescriptor(project: Project, parent: HierarchyNodeDescriptor?, - element: PsiElement, isBase: Boolean) : HierarchyNodeDescriptor(project, parent, element, isBase) { +class ArendHierarchyNodeDescriptor(project: Project, parent: HierarchyNodeDescriptor?, + element: PsiElement, isBase: Boolean) : HierarchyNodeDescriptor(project, parent, element, isBase) { //fun getReferenceElement() : PsiGlobalReferable? { - // return (psiElement as VcReferenceElement).reference?.resolve() as PsiGlobalReferable + // return (psiElement as ArendReferenceElement).reference?.resolve() as PsiGlobalReferable // } override fun update(): Boolean { val oldText = myHighlightedText diff --git a/src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyBrowser.kt b/src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyBrowser.kt similarity index 72% rename from src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyBrowser.kt rename to src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyBrowser.kt index 8818956d4..3c524ef34 100644 --- a/src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyBrowser.kt +++ b/src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyBrowser.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.call +package org.arend.hierarchy.call import com.intellij.ide.hierarchy.CallHierarchyBrowserBase import com.intellij.ide.hierarchy.HierarchyBrowserManager @@ -9,12 +9,12 @@ import com.intellij.ide.util.treeView.NodeDescriptor import com.intellij.ide.util.treeView.SourceComparator import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.ext.PsiLocatedReferable +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ext.PsiLocatedReferable import java.util.* import javax.swing.JTree -class VcCallHierarchyBrowser(project: Project, method: PsiElement) : CallHierarchyBrowserBase(project, method) { +class ArendCallHierarchyBrowser(project: Project, method: PsiElement) : CallHierarchyBrowserBase(project, method) { override fun getComparator(): Comparator>? { return if (HierarchyBrowserManager.getInstance(myProject).state!!.SORT_ALPHABETICALLY) { AlphaComparator.INSTANCE @@ -24,22 +24,22 @@ class VcCallHierarchyBrowser(project: Project, method: PsiElement) : CallHierarc } override fun getElementFromDescriptor(descriptor: HierarchyNodeDescriptor): PsiElement? { - if (descriptor is VcHierarchyNodeDescriptor) { + if (descriptor is ArendHierarchyNodeDescriptor) { return descriptor.psiElement } return null } override fun createTrees(trees: MutableMap) { - trees.put(CALLEE_TYPE, createTree(false)) - trees.put(CALLER_TYPE, createTree(false)) + trees[CALLEE_TYPE] = createTree(false) + trees[CALLER_TYPE] = createTree(false) } override fun createHierarchyTreeStructure(type: String, psiElement: PsiElement): HierarchyTreeStructure? { if (type == CALLEE_TYPE) { - return VcCalleeTreeStructure(myProject, psiElement) + return ArendCalleeTreeStructure(myProject, psiElement) } else if (type == CALLER_TYPE) { - return VcCallerTreeStructure(myProject, psiElement) + return ArendCallerTreeStructure(myProject, psiElement) } return null } diff --git a/src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyProvider.kt b/src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyProvider.kt similarity index 71% rename from src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyProvider.kt rename to src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyProvider.kt index 55a835eeb..8d68cdab0 100644 --- a/src/main/kotlin/org/vclang/hierarchy/call/VcCallHierarchyProvider.kt +++ b/src/main/kotlin/org/arend/hierarchy/call/ArendCallHierarchyProvider.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.call +package org.arend.hierarchy.call import com.intellij.ide.hierarchy.CallHierarchyBrowserBase import com.intellij.ide.hierarchy.HierarchyBrowser @@ -7,15 +7,15 @@ import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import org.vclang.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiLocatedReferable -class VcCallHierarchyProvider : HierarchyProvider { +class ArendCallHierarchyProvider : HierarchyProvider { override fun createHierarchyBrowser(target: PsiElement): HierarchyBrowser { - return VcCallHierarchyBrowser(target.project, target) + return ArendCallHierarchyBrowser(target.project, target) } override fun browserActivated(hierarchyBrowser: HierarchyBrowser) { - (hierarchyBrowser as VcCallHierarchyBrowser).changeView(CallHierarchyBrowserBase.CALLER_TYPE) + (hierarchyBrowser as ArendCallHierarchyBrowser).changeView(CallHierarchyBrowserBase.CALLER_TYPE) } override fun getTarget(dataContext: DataContext): PsiElement? { diff --git a/src/main/kotlin/org/vclang/hierarchy/call/VcCalleeTreeStructure.kt b/src/main/kotlin/org/arend/hierarchy/call/ArendCalleeTreeStructure.kt similarity index 60% rename from src/main/kotlin/org/vclang/hierarchy/call/VcCalleeTreeStructure.kt rename to src/main/kotlin/org/arend/hierarchy/call/ArendCalleeTreeStructure.kt index 870481d77..01a417d54 100644 --- a/src/main/kotlin/org/vclang/hierarchy/call/VcCalleeTreeStructure.kt +++ b/src/main/kotlin/org/arend/hierarchy/call/ArendCalleeTreeStructure.kt @@ -1,22 +1,22 @@ -package org.vclang.hierarchy.call +package org.arend.hierarchy.call import com.intellij.ide.hierarchy.HierarchyNodeDescriptor import com.intellij.ide.hierarchy.HierarchyTreeStructure import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcReferenceElement +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendReferenceElement -class VcCalleeTreeStructure(project: Project, baseNode: PsiElement) : - HierarchyTreeStructure(project, VcHierarchyNodeDescriptor(project, null, baseNode, true)) { +class ArendCalleeTreeStructure(project: Project, baseNode: PsiElement) : + HierarchyTreeStructure(project, ArendHierarchyNodeDescriptor(project, null, baseNode, true)) { override fun buildChildren(descriptor: HierarchyNodeDescriptor): Array { val defElement = descriptor.psiElement as PsiLocatedReferable // ?: return ArrayUtil.EMPTY_OBJECT_ARRAY val callees = HashSet() - val result = ArrayList() + val result = ArrayList() visit(defElement, callees, defElement) - callees.mapTo(result) { VcHierarchyNodeDescriptor(myProject, descriptor, it, false) } + callees.mapTo(result) { ArendHierarchyNodeDescriptor(myProject, descriptor, it, false) } return result.toArray() } @@ -24,7 +24,7 @@ class VcCalleeTreeStructure(project: Project, baseNode: PsiElement) : val children = element.children for (child in children) { visit(child, callees, root) - if (child is VcReferenceElement && root.name != child.referenceName) { + if (child is ArendReferenceElement && root.name != child.referenceName) { val ref = child.reference?.resolve() if (ref is PsiLocatedReferable) { callees.add(ref) diff --git a/src/main/kotlin/org/vclang/hierarchy/call/VcCallerTreeStructure.kt b/src/main/kotlin/org/arend/hierarchy/call/ArendCallerTreeStructure.kt similarity index 74% rename from src/main/kotlin/org/vclang/hierarchy/call/VcCallerTreeStructure.kt rename to src/main/kotlin/org/arend/hierarchy/call/ArendCallerTreeStructure.kt index 3fd5c74b6..33d57a7b6 100644 --- a/src/main/kotlin/org/vclang/hierarchy/call/VcCallerTreeStructure.kt +++ b/src/main/kotlin/org/arend/hierarchy/call/ArendCallerTreeStructure.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.call +package org.arend.hierarchy.call import com.intellij.find.findUsages.DefaultFindUsagesHandlerFactory import com.intellij.find.findUsages.FindUsagesOptions @@ -9,18 +9,18 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import com.intellij.usageView.UsageInfo import com.intellij.util.CommonProcessors -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.ext.PsiLocatedReferable +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ext.PsiLocatedReferable -class VcCallerTreeStructure(project: Project, baseNode: PsiElement) : - HierarchyTreeStructure(project, VcHierarchyNodeDescriptor(project, null, baseNode, true)) { +class ArendCallerTreeStructure(project: Project, baseNode: PsiElement) : + HierarchyTreeStructure(project, ArendHierarchyNodeDescriptor(project, null, baseNode, true)) { override fun buildChildren(descriptor: HierarchyNodeDescriptor): Array { val defElement = descriptor.psiElement as PsiLocatedReferable val finder = DefaultFindUsagesHandlerFactory().createFindUsagesHandler(defElement, false) val processor = CommonProcessors.CollectProcessor() val callers = HashSet() - val result = ArrayList() + val result = ArrayList() val options = FindUsagesOptions(myProject) options.isUsages = true options.isSearchForTextOccurrences = false @@ -33,7 +33,7 @@ class VcCallerTreeStructure(project: Project, baseNode: PsiElement) : callers.add(def) } } - callers.mapTo(result) { VcHierarchyNodeDescriptor(myProject, descriptor, it, false) } + callers.mapTo(result) { ArendHierarchyNodeDescriptor(myProject, descriptor, it, false) } return result.toArray() } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyBrowser.kt b/src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyBrowser.kt similarity index 72% rename from src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyBrowser.kt rename to src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyBrowser.kt index 26f8408e1..312387f7b 100644 --- a/src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyBrowser.kt +++ b/src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyBrowser.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.clazz +package org.arend.hierarchy.clazz import com.intellij.ide.hierarchy.HierarchyBrowserManager import com.intellij.ide.hierarchy.HierarchyNodeDescriptor @@ -9,16 +9,16 @@ import com.intellij.ide.util.treeView.NodeDescriptor import com.intellij.ide.util.treeView.SourceComparator import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.VcDefClass +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ArendDefClass import java.util.* import javax.swing.JPanel import javax.swing.JTree -class VcClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHierarchyBrowserBase(project, method) { - override fun getQualifiedName(psiElement: PsiElement?): String = (psiElement as? VcDefClass)?.name ?: "" +class ArendClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHierarchyBrowserBase(project, method) { + override fun getQualifiedName(psiElement: PsiElement?): String = (psiElement as? ArendDefClass)?.name ?: "" override fun isInterface(psiElement: PsiElement) = true @@ -26,12 +26,12 @@ class VcClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHierar override fun canBeDeleted(psiElement: PsiElement?) = true - override fun isApplicableElement(element: PsiElement) = element is VcDefClass + override fun isApplicableElement(element: PsiElement) = element is ArendDefClass override fun getComparator(): Comparator>? = if (HierarchyBrowserManager.getInstance(myProject).state!!.SORT_ALPHABETICALLY) AlphaComparator.INSTANCE else SourceComparator.INSTANCE - override fun getElementFromDescriptor(descriptor: HierarchyNodeDescriptor) = (descriptor as? VcHierarchyNodeDescriptor)?.psiElement + override fun getElementFromDescriptor(descriptor: HierarchyNodeDescriptor) = (descriptor as? ArendHierarchyNodeDescriptor)?.psiElement override fun createTrees(trees: MutableMap) { trees[SUBTYPES_HIERARCHY_TYPE] = createTree(false) @@ -40,8 +40,8 @@ class VcClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHierar override fun createHierarchyTreeStructure(type: String, psiElement: PsiElement): HierarchyTreeStructure? = when (type) { - SUBTYPES_HIERARCHY_TYPE -> VcSubClassTreeStructure(myProject, psiElement) - SUPERTYPES_HIERARCHY_TYPE -> VcSuperClassTreeStructure(myProject, psiElement) + SUBTYPES_HIERARCHY_TYPE -> ArendSubClassTreeStructure(myProject, psiElement) + SUPERTYPES_HIERARCHY_TYPE -> ArendSuperClassTreeStructure(myProject, psiElement) else -> null } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyProvider.kt b/src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyProvider.kt similarity index 72% rename from src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyProvider.kt rename to src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyProvider.kt index 9170c6216..ffd71c47c 100644 --- a/src/main/kotlin/org/vclang/hierarchy/clazz/VcClassHierarchyProvider.kt +++ b/src/main/kotlin/org/arend/hierarchy/clazz/ArendClassHierarchyProvider.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.clazz +package org.arend.hierarchy.clazz import com.intellij.ide.hierarchy.HierarchyBrowser import com.intellij.ide.hierarchy.HierarchyProvider @@ -7,16 +7,16 @@ import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import org.vclang.psi.VcDefClass +import org.arend.psi.ArendDefClass -class VcClassHierarchyProvider : HierarchyProvider { +class ArendClassHierarchyProvider : HierarchyProvider { override fun getTarget(dataContext: DataContext): PsiElement? { val element = CommonDataKeys.PSI_ELEMENT.getData(dataContext) - return PsiTreeUtil.getParentOfType(element, VcDefClass::class.java, false) + return PsiTreeUtil.getParentOfType(element, ArendDefClass::class.java, false) } override fun createHierarchyBrowser(target: PsiElement): HierarchyBrowser { - val browser = VcClassHierarchyBrowser(target.project, target) + val browser = ArendClassHierarchyBrowser(target.project, target) browser.changeView(TypeHierarchyBrowserBase.SUBTYPES_HIERARCHY_TYPE) return browser } diff --git a/src/main/kotlin/org/vclang/hierarchy/clazz/VcSubClassTreeStructure.kt b/src/main/kotlin/org/arend/hierarchy/clazz/ArendSubClassTreeStructure.kt similarity index 64% rename from src/main/kotlin/org/vclang/hierarchy/clazz/VcSubClassTreeStructure.kt rename to src/main/kotlin/org/arend/hierarchy/clazz/ArendSubClassTreeStructure.kt index 7d12a1819..03c4df1b5 100644 --- a/src/main/kotlin/org/vclang/hierarchy/clazz/VcSubClassTreeStructure.kt +++ b/src/main/kotlin/org/arend/hierarchy/clazz/ArendSubClassTreeStructure.kt @@ -1,4 +1,4 @@ -package org.vclang.hierarchy.clazz +package org.arend.hierarchy.clazz import com.intellij.find.findUsages.DefaultFindUsagesHandlerFactory import com.intellij.find.findUsages.FindUsagesOptions @@ -8,18 +8,18 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.usageView.UsageInfo import com.intellij.util.CommonProcessors -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcLongName +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ArendDefClass +import org.arend.psi.ArendLongName -class VcSubClassTreeStructure(project: Project, baseNode: PsiElement) : - HierarchyTreeStructure(project, VcHierarchyNodeDescriptor(project, null, baseNode, true)) { +class ArendSubClassTreeStructure(project: Project, baseNode: PsiElement) : + HierarchyTreeStructure(project, ArendHierarchyNodeDescriptor(project, null, baseNode, true)) { override fun buildChildren(descriptor: HierarchyNodeDescriptor): Array { - val classElement = descriptor.psiElement as VcDefClass + val classElement = descriptor.psiElement as ArendDefClass val finder = DefaultFindUsagesHandlerFactory().createFindUsagesHandler(classElement, false) val processor = CommonProcessors.CollectProcessor() val subClasses = HashSet() - val result = ArrayList() + val result = ArrayList() val options = FindUsagesOptions(myProject) options.isUsages = true options.isSearchForTextOccurrences = false @@ -27,14 +27,14 @@ class VcSubClassTreeStructure(project: Project, baseNode: PsiElement) : finder?.processElementUsages(descriptor.psiElement as PsiElement, processor, options) } for (usage in processor.results) { - if (usage.element?.parent is VcLongName && usage.element?.parent?.parent is VcDefClass) { - val subclass = usage.element?.parent?.parent as VcDefClass + if (usage.element?.parent is ArendLongName && usage.element?.parent?.parent is ArendDefClass) { + val subclass = usage.element?.parent?.parent as ArendDefClass //if (subclass.name != classElement.name) { subClasses.add(subclass) //} } } - subClasses.mapTo(result) { VcHierarchyNodeDescriptor(myProject, descriptor, it, false) } + subClasses.mapTo(result) { ArendHierarchyNodeDescriptor(myProject, descriptor, it, false) } return result.toArray() } } \ No newline at end of file diff --git a/src/main/kotlin/org/arend/hierarchy/clazz/ArendSuperClassTreeStructure.kt b/src/main/kotlin/org/arend/hierarchy/clazz/ArendSuperClassTreeStructure.kt new file mode 100644 index 000000000..e99eaa0f1 --- /dev/null +++ b/src/main/kotlin/org/arend/hierarchy/clazz/ArendSuperClassTreeStructure.kt @@ -0,0 +1,20 @@ +package org.arend.hierarchy.clazz + +import com.intellij.ide.hierarchy.HierarchyNodeDescriptor +import com.intellij.ide.hierarchy.HierarchyTreeStructure +import com.intellij.openapi.project.Project +import com.intellij.psi.PsiElement +import com.intellij.util.ArrayUtil +import org.arend.hierarchy.ArendHierarchyNodeDescriptor +import org.arend.psi.ArendDefClass + +class ArendSuperClassTreeStructure(project: Project, baseNode: PsiElement) : + HierarchyTreeStructure(project, ArendHierarchyNodeDescriptor(project, null, baseNode, true)) { + override fun buildChildren(descriptor: HierarchyNodeDescriptor): Array { + val classElement = (descriptor.psiElement ?: return ArrayUtil.EMPTY_OBJECT_ARRAY) + as? ArendDefClass ?: return ArrayUtil.EMPTY_OBJECT_ARRAY + val result = ArrayList() + classElement.superClassReferences.mapTo(result) { ArendHierarchyNodeDescriptor(myProject, descriptor, it as ArendDefClass, false) } + return result.toArray() + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/highlight/VcHighlightingColors.kt b/src/main/kotlin/org/arend/highlight/ArendHighlightingColors.kt similarity index 89% rename from src/main/kotlin/org/vclang/highlight/VcHighlightingColors.kt rename to src/main/kotlin/org/arend/highlight/ArendHighlightingColors.kt index 71c057990..1d77dc78c 100644 --- a/src/main/kotlin/org/vclang/highlight/VcHighlightingColors.kt +++ b/src/main/kotlin/org/arend/highlight/ArendHighlightingColors.kt @@ -1,11 +1,11 @@ -package org.vclang.highlight +package org.arend.highlight import com.intellij.openapi.editor.HighlighterColors import com.intellij.openapi.editor.colors.TextAttributesKey import com.intellij.openapi.options.colors.AttributesDescriptor import com.intellij.openapi.editor.DefaultLanguageHighlighterColors as Default -enum class VcHighlightingColors(humanName: String, default: TextAttributesKey) { +enum class ArendHighlightingColors(humanName: String, default: TextAttributesKey) { IDENTIFIER("Identifier", Default.IDENTIFIER), NUMBER("Number", Default.NUMBER), KEYWORD("Keyword", Default.KEYWORD), @@ -28,6 +28,6 @@ enum class VcHighlightingColors(humanName: String, default: TextAttributesKey) { BAD_CHARACTER("Bad character", HighlighterColors.BAD_CHARACTER); - val textAttributesKey = TextAttributesKey.createTextAttributesKey("org.vclang.$name", default) + val textAttributesKey = TextAttributesKey.createTextAttributesKey("org.arend.$name", default) val attributesDescriptor = AttributesDescriptor(humanName, textAttributesKey) } diff --git a/src/main/kotlin/org/vclang/highlight/VcProblemHighlightFilter.kt b/src/main/kotlin/org/arend/highlight/ArendProblemHighlightFilter.kt similarity index 64% rename from src/main/kotlin/org/vclang/highlight/VcProblemHighlightFilter.kt rename to src/main/kotlin/org/arend/highlight/ArendProblemHighlightFilter.kt index a703386df..3cbd1d0dc 100644 --- a/src/main/kotlin/org/vclang/highlight/VcProblemHighlightFilter.kt +++ b/src/main/kotlin/org/arend/highlight/ArendProblemHighlightFilter.kt @@ -1,9 +1,9 @@ -package org.vclang.highlight +package org.arend.highlight import com.intellij.openapi.util.Condition import com.intellij.openapi.vfs.VirtualFile -class VcProblemHighlightFilter : Condition { +class ArendProblemHighlightFilter : Condition { override fun value(t: VirtualFile?): Boolean { return true } diff --git a/src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighter.kt b/src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighter.kt new file mode 100644 index 000000000..488a8d84a --- /dev/null +++ b/src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighter.kt @@ -0,0 +1,45 @@ +package org.arend.highlight + +import com.intellij.lexer.Lexer +import com.intellij.openapi.editor.colors.TextAttributesKey +import com.intellij.openapi.fileTypes.SyntaxHighlighterBase +import com.intellij.psi.TokenType +import com.intellij.psi.tree.IElementType +import org.arend.lexer.ArendLexerAdapter +import org.arend.psi.AREND_KEYWORDS +import org.arend.psi.ArendElementTypes +import com.intellij.openapi.editor.DefaultLanguageHighlighterColors as Default + +class ArendSyntaxHighlighter : SyntaxHighlighterBase() { + + override fun getHighlightingLexer(): Lexer = ArendLexerAdapter() + + override fun getTokenHighlights(tokenType: IElementType): Array = + pack(map(tokenType)?.textAttributesKey) + + companion object { + fun map(tokenType: IElementType?): ArendHighlightingColors? = when (tokenType) { + ArendElementTypes.ID -> ArendHighlightingColors.IDENTIFIER + ArendElementTypes.NUMBER -> ArendHighlightingColors.NUMBER + in AREND_KEYWORDS -> ArendHighlightingColors.KEYWORD + ArendElementTypes.SET, ArendElementTypes.UNIVERSE, ArendElementTypes.TRUNCATED_UNIVERSE -> ArendHighlightingColors.UNIVERSE + ArendElementTypes.UNDERSCORE, ArendElementTypes.GOAL -> ArendHighlightingColors.IMPLICIT + + ArendElementTypes.INFIX, ArendElementTypes.POSTFIX -> ArendHighlightingColors.OPERATORS + ArendElementTypes.DOT -> ArendHighlightingColors.DOT + ArendElementTypes.COMMA -> ArendHighlightingColors.COMMA + ArendElementTypes.COLON -> ArendHighlightingColors.COLON + ArendElementTypes.PIPE -> ArendHighlightingColors.COMMA + ArendElementTypes.ARROW, ArendElementTypes.FAT_ARROW -> ArendHighlightingColors.ARROW + + ArendElementTypes.LBRACE, ArendElementTypes.RBRACE -> ArendHighlightingColors.BRACES + ArendElementTypes.LPAREN, ArendElementTypes.RPAREN -> ArendHighlightingColors.PARENTHESIS + + ArendElementTypes.BLOCK_COMMENT -> ArendHighlightingColors.BLOCK_COMMENT + ArendElementTypes.LINE_COMMENT -> ArendHighlightingColors.LINE_COMMENT + + TokenType.BAD_CHARACTER -> ArendHighlightingColors.BAD_CHARACTER + else -> null + } + } +} diff --git a/src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighterFactory.kt b/src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighterFactory.kt similarity index 68% rename from src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighterFactory.kt rename to src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighterFactory.kt index 263ba8d09..d02a0cf0d 100644 --- a/src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighterFactory.kt +++ b/src/main/kotlin/org/arend/highlight/ArendSyntaxHighlighterFactory.kt @@ -1,13 +1,13 @@ -package org.vclang.highlight +package org.arend.highlight import com.intellij.openapi.fileTypes.SyntaxHighlighter import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -class VcSyntaxHighlighterFactory : SyntaxHighlighterFactory() { +class ArendSyntaxHighlighterFactory : SyntaxHighlighterFactory() { override fun getSyntaxHighlighter( project: Project?, virtualFile: VirtualFile? - ): SyntaxHighlighter = VcSyntaxHighlighter() + ): SyntaxHighlighter = ArendSyntaxHighlighter() } diff --git a/src/main/kotlin/org/arend/lexer/ArendLexerAdapter.kt b/src/main/kotlin/org/arend/lexer/ArendLexerAdapter.kt new file mode 100644 index 000000000..a1c737aa3 --- /dev/null +++ b/src/main/kotlin/org/arend/lexer/ArendLexerAdapter.kt @@ -0,0 +1,6 @@ +package org.arend.lexer + +import com.intellij.lexer.FlexAdapter +import java.io.Reader + +class ArendLexerAdapter : FlexAdapter(ArendLexer(null as Reader?)) diff --git a/src/main/kotlin/org/arend/module/ArendFakeRawSource.kt b/src/main/kotlin/org/arend/module/ArendFakeRawSource.kt new file mode 100644 index 000000000..d46bf128d --- /dev/null +++ b/src/main/kotlin/org/arend/module/ArendFakeRawSource.kt @@ -0,0 +1,15 @@ +package org.arend.module + +import org.arend.source.Source +import org.arend.source.SourceLoader + + +class ArendFakeRawSource(private val modulePath: ModulePath): Source { + override fun getModulePath() = modulePath + + override fun load(sourceLoader: SourceLoader) = true + + override fun getTimeStamp(): Long = -1 + + override fun isAvailable() = true +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/module/ArendModuleType.kt b/src/main/kotlin/org/arend/module/ArendModuleType.kt new file mode 100644 index 000000000..da23e768c --- /dev/null +++ b/src/main/kotlin/org/arend/module/ArendModuleType.kt @@ -0,0 +1,25 @@ +package org.arend.module + +import com.intellij.openapi.module.ModuleTypeManager +import org.arend.ArendIcons +import org.arend.module.util.ArendModuleBuilder +import javax.swing.Icon + +class ArendModuleType : ArendModuleTypeBase(ID) { + + override fun getNodeIcon(isOpened: Boolean): Icon? = ArendIcons.AREND + + override fun createModuleBuilder(): ArendModuleBuilder = ArendModuleBuilder() + + override fun getDescription(): String = "Arend library" + + override fun getName(): String = "Arend" + + companion object { + private const val ID = "AREND_MODULE" + + val INSTANCE: ArendModuleType by lazy { + ModuleTypeManager.getInstance().findByID(ID) as ArendModuleType + } + } +} diff --git a/src/main/kotlin/org/vclang/module/VcPreludeLibrary.kt b/src/main/kotlin/org/arend/module/ArendPreludeLibrary.kt similarity index 58% rename from src/main/kotlin/org/vclang/module/VcPreludeLibrary.kt rename to src/main/kotlin/org/arend/module/ArendPreludeLibrary.kt index 9f536ec57..4fa2216b7 100644 --- a/src/main/kotlin/org/vclang/module/VcPreludeLibrary.kt +++ b/src/main/kotlin/org/arend/module/ArendPreludeLibrary.kt @@ -1,32 +1,31 @@ -package org.vclang.module +package org.arend.module import com.intellij.openapi.project.Project import com.intellij.psi.PsiFileFactory -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.library.BaseLibrary -import com.jetbrains.jetpad.vclang.library.LibraryManager -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.module.scopeprovider.ModuleScopeProvider -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.DefinitionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.CachingScope -import com.jetbrains.jetpad.vclang.naming.scope.ConvertingScope -import com.jetbrains.jetpad.vclang.naming.scope.LexicalScope -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.term.group.Group -import com.jetbrains.jetpad.vclang.typechecking.TypecheckerState -import com.jetbrains.jetpad.vclang.typechecking.order.Ordering -import com.jetbrains.jetpad.vclang.typechecking.typecheckable.provider.ConcreteProvider -import com.jetbrains.jetpad.vclang.util.FileUtils -import org.vclang.VcLanguage -import org.vclang.psi.VcFile +import org.arend.error.ErrorReporter +import org.arend.library.BaseLibrary +import org.arend.library.LibraryManager +import org.arend.module.scopeprovider.ModuleScopeProvider +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.resolving.visitor.DefinitionResolveNameVisitor +import org.arend.naming.scope.CachingScope +import org.arend.naming.scope.ConvertingScope +import org.arend.naming.scope.LexicalScope +import org.arend.naming.scope.Scope +import org.arend.prelude.Prelude +import org.arend.term.group.Group +import org.arend.typechecking.TypecheckerState +import org.arend.typechecking.order.Ordering +import org.arend.typechecking.typecheckable.provider.ConcreteProvider +import org.arend.util.FileUtils +import org.arend.ArendLanguage +import org.arend.psi.ArendFile import java.nio.charset.StandardCharsets -class VcPreludeLibrary(private val project: Project, typecheckerState: TypecheckerState?) : BaseLibrary(typecheckerState) { - var prelude: VcFile? = null +class ArendPreludeLibrary(private val project: Project, typecheckerState: TypecheckerState?) : BaseLibrary(typecheckerState) { + var prelude: ArendFile? = null private set private var isTypechecked: Boolean = false private var scope: Scope? = null @@ -49,7 +48,7 @@ class VcPreludeLibrary(private val project: Project, typecheckerState: Typecheck if (isTypechecked) return true if (Prelude.INTERVAL == null) { - synchronized(VcPreludeLibrary::class.java) { + synchronized(ArendPreludeLibrary::class.java) { if (Prelude.INTERVAL == null) { return if (super.orderModules(ordering)) { isTypechecked = true @@ -69,10 +68,10 @@ class VcPreludeLibrary(private val project: Project, typecheckerState: Typecheck override fun load(libraryManager: LibraryManager): Boolean { if (prelude == null) { - synchronized(VcPreludeLibrary::class.java) { + synchronized(ArendPreludeLibrary::class.java) { if (prelude == null) { - val text = String(VcPreludeLibrary::class.java.getResourceAsStream("/lib/Prelude" + FileUtils.EXTENSION).readBytes(), StandardCharsets.UTF_8) - prelude = PsiFileFactory.getInstance(project).createFileFromText("Prelude" + FileUtils.EXTENSION, VcLanguage.INSTANCE, text) as? VcFile + val text = String(ArendPreludeLibrary::class.java.getResourceAsStream("/lib/Prelude" + FileUtils.EXTENSION).readBytes(), StandardCharsets.UTF_8) + prelude = PsiFileFactory.getInstance(project).createFileFromText("Prelude" + FileUtils.EXTENSION, ArendLanguage.INSTANCE, text) as? ArendFile prelude?.virtualFile?.isWritable = false } } diff --git a/src/main/kotlin/org/vclang/module/VcRawLibrary.kt b/src/main/kotlin/org/arend/module/ArendRawLibrary.kt similarity index 76% rename from src/main/kotlin/org/vclang/module/VcRawLibrary.kt rename to src/main/kotlin/org/arend/module/ArendRawLibrary.kt index 5f23c9776..5204a93d4 100644 --- a/src/main/kotlin/org/vclang/module/VcRawLibrary.kt +++ b/src/main/kotlin/org/arend/module/ArendRawLibrary.kt @@ -1,24 +1,23 @@ -package org.vclang.module +package org.arend.module import com.intellij.openapi.module.Module import com.intellij.psi.SmartPointerManager import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.library.LibraryHeader -import com.jetbrains.jetpad.vclang.library.LibraryManager -import com.jetbrains.jetpad.vclang.library.SourceLibrary -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.source.BinarySource -import com.jetbrains.jetpad.vclang.source.FileBinarySource -import com.jetbrains.jetpad.vclang.source.GZIPStreamBinarySource -import com.jetbrains.jetpad.vclang.typechecking.TypecheckerState +import org.arend.error.ErrorReporter +import org.arend.library.LibraryHeader +import org.arend.library.LibraryManager +import org.arend.library.SourceLibrary +import org.arend.naming.reference.LocatedReferable +import org.arend.source.BinarySource +import org.arend.source.FileBinarySource +import org.arend.source.GZIPStreamBinarySource +import org.arend.typechecking.TypecheckerState import org.jetbrains.yaml.psi.YAMLFile -import org.vclang.module.util.* -import org.vclang.typechecking.TypeCheckingService +import org.arend.module.util.* +import org.arend.typechecking.TypeCheckingService -class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerState): SourceLibrary(typecheckerState) { +class ArendRawLibrary(private val module: Module, typecheckerState: TypecheckerState): SourceLibrary(typecheckerState) { private var headerFilePtr: SmartPsiElementPointer? = null val headerFile: YAMLFile? @@ -26,7 +25,7 @@ class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerStat override fun getName() = module.name - override fun getModuleGroup(modulePath: ModulePath) = headerFilePtr?.element?.findVcFile(modulePath) + override fun getModuleGroup(modulePath: ModulePath) = headerFilePtr?.element?.findArendFile(modulePath) override fun loadHeader(errorReporter: ErrorReporter): LibraryHeader { // TODO: Do not create a header file here @@ -41,7 +40,7 @@ class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerStat headerVirtualFile = VirtualFileManager.getInstance().findFileByUrl(headerUrl) } */ - //else if (headerVirtualFile.fileType == VclFileType) { + //else if (headerVirtualFile.fileType == YAMLFileType) { headerFilePtr = module.libraryConfig?.let { SmartPointerManager.getInstance(module.project).createSmartPsiElementPointer(it) } /* TODO: implement this properly @@ -60,7 +59,7 @@ class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerStat libraryModel.addRoot(file, OrderRootType.CLASSES) libraryModel.commit() tableModel.commit() - ModuleRootModificationUtil.addDependency(module.project.vcModules.elementAt(0), library) + ModuleRootModificationUtil.addDependency(module.project.arendModules.elementAt(0), library) } } } @@ -78,7 +77,7 @@ class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerStat override fun getLoadedModules() = headerFilePtr?.element?.libModules ?: emptyList() - override fun getRawSource(modulePath: ModulePath) = headerFilePtr?.element?.findVcFile(modulePath)?.let { VcRawSource(it) } ?: VcFakeRawSource(modulePath) + override fun getRawSource(modulePath: ModulePath) = headerFilePtr?.element?.findArendFile(modulePath)?.let { ArendRawSource(it) } ?: ArendFakeRawSource(modulePath) override fun getBinarySource(modulePath: ModulePath): BinarySource? { return headerFilePtr?.element?.outputPath?.let { GZIPStreamBinarySource(FileBinarySource(it, modulePath)) } @@ -95,4 +94,4 @@ class VcRawLibrary(private val module: Module, typecheckerState: TypecheckerStat override fun getReferableConverter() = TypeCheckingService.getInstance(module.project).referableConverter override fun getDependencyListener() = TypeCheckingService.getInstance(module.project).dependencyListener -} \ No newline at end of file +} diff --git a/src/main/kotlin/org/vclang/module/VcRawSource.kt b/src/main/kotlin/org/arend/module/ArendRawSource.kt similarity index 51% rename from src/main/kotlin/org/vclang/module/VcRawSource.kt rename to src/main/kotlin/org/arend/module/ArendRawSource.kt index 212f6ad6c..a91fba229 100644 --- a/src/main/kotlin/org/vclang/module/VcRawSource.kt +++ b/src/main/kotlin/org/arend/module/ArendRawSource.kt @@ -1,11 +1,11 @@ -package org.vclang.module +package org.arend.module -import com.jetbrains.jetpad.vclang.source.Source -import com.jetbrains.jetpad.vclang.source.SourceLoader -import org.vclang.psi.VcFile +import org.arend.source.Source +import org.arend.source.SourceLoader +import org.arend.psi.ArendFile -class VcRawSource(private val file: VcFile): Source { +class ArendRawSource(private val file: ArendFile): Source { override fun getModulePath() = file.modulePath override fun load(sourceLoader: SourceLoader) = true diff --git a/src/main/kotlin/org/vclang/module/ModuleScope.kt b/src/main/kotlin/org/arend/module/ModuleScope.kt similarity index 71% rename from src/main/kotlin/org/vclang/module/ModuleScope.kt rename to src/main/kotlin/org/arend/module/ModuleScope.kt index 579c5a1a5..c3b55d9db 100644 --- a/src/main/kotlin/org/vclang/module/ModuleScope.kt +++ b/src/main/kotlin/org/arend/module/ModuleScope.kt @@ -1,19 +1,18 @@ -package org.vclang.module +package org.arend.module import com.intellij.openapi.module.Module import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiManager -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.scope.EmptyScope -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.util.FileUtils -import org.vclang.module.util.libraryConfig -import org.vclang.module.util.sourcesDirFile -import org.vclang.psi.VcFile -import org.vclang.psi.ext.PsiModuleReferable +import org.arend.naming.reference.ModuleReferable +import org.arend.naming.reference.Referable +import org.arend.naming.scope.EmptyScope +import org.arend.naming.scope.Scope +import org.arend.prelude.Prelude +import org.arend.util.FileUtils +import org.arend.module.util.libraryConfig +import org.arend.module.util.sourcesDirFile +import org.arend.psi.ArendFile +import org.arend.psi.ext.PsiModuleReferable class ModuleScope private constructor(private val module: Module, private val rootDirs: List?) : Scope { @@ -33,7 +32,7 @@ class ModuleScope private constructor(private val module: Module, private val ro } } } else if (file.name.endsWith(FileUtils.EXTENSION)) { - (psiManager.findFile(file) as? VcFile)?.let { result.add(PsiModuleReferable(listOf(it), it.modulePath)) } + (psiManager.findFile(file) as? ArendFile)?.let { result.add(PsiModuleReferable(listOf(it), it.modulePath)) } } } } diff --git a/src/main/kotlin/org/vclang/module/util/VcModuleBuilder.kt b/src/main/kotlin/org/arend/module/util/ArendModuleBuilder.kt similarity index 78% rename from src/main/kotlin/org/vclang/module/util/VcModuleBuilder.kt rename to src/main/kotlin/org/arend/module/util/ArendModuleBuilder.kt index bd86c237f..92f379ee0 100644 --- a/src/main/kotlin/org/vclang/module/util/VcModuleBuilder.kt +++ b/src/main/kotlin/org/arend/module/util/ArendModuleBuilder.kt @@ -1,4 +1,4 @@ -package org.vclang.module.util +package org.arend.module.util import com.intellij.ide.util.projectWizard.ModuleBuilder import com.intellij.ide.util.projectWizard.ModuleWizardStep @@ -8,18 +8,18 @@ import com.intellij.openapi.module.ModuleType import com.intellij.openapi.projectRoots.SdkTypeId import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.util.Disposer -import org.vclang.module.VcModuleType +import org.arend.module.ArendModuleType -class VcModuleBuilder : ModuleBuilder() { +class ArendModuleBuilder : ModuleBuilder() { - override fun getModuleType(): ModuleType<*>? = VcModuleType.INSTANCE + override fun getModuleType(): ModuleType<*>? = ArendModuleType.INSTANCE override fun isSuitableSdkType(sdkType: SdkTypeId?): Boolean = true override fun getCustomOptionsStep( context: WizardContext, parentDisposable: Disposable - ): ModuleWizardStep = VcModuleWizardStep(context).apply { + ): ModuleWizardStep = ArendModuleWizardStep(context).apply { Disposer.register(parentDisposable, Disposable { this.disposeUIResources() }) } diff --git a/src/main/kotlin/org/vclang/module/util/VcModuleWizardStep.kt b/src/main/kotlin/org/arend/module/util/ArendModuleWizardStep.kt similarity index 85% rename from src/main/kotlin/org/vclang/module/util/VcModuleWizardStep.kt rename to src/main/kotlin/org/arend/module/util/ArendModuleWizardStep.kt index 3e4c3723e..a0ebf077f 100644 --- a/src/main/kotlin/org/vclang/module/util/VcModuleWizardStep.kt +++ b/src/main/kotlin/org/arend/module/util/ArendModuleWizardStep.kt @@ -1,4 +1,4 @@ -package org.vclang.module.util +package org.arend.module.util import com.intellij.ide.util.importProject.ProjectDescriptor import com.intellij.ide.util.projectWizard.ModuleBuilder.ModuleConfigurationUpdater @@ -8,10 +8,10 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.util.io.FileUtil import com.intellij.ui.layout.panel -import com.jetbrains.jetpad.vclang.util.FileUtils +import org.arend.util.FileUtils import javax.swing.JComponent -class VcModuleWizardStep( +class ArendModuleWizardStep( private val context: WizardContext, private val projectDescriptor: ProjectDescriptor? = null ) : ModuleWizardStep() { @@ -25,7 +25,7 @@ class VcModuleWizardStep( override fun updateDataModel() { val projectBuilder = context.projectBuilder - if (projectBuilder is VcModuleBuilder) { + if (projectBuilder is ArendModuleBuilder) { projectBuilder.addModuleConfigurationUpdater(ConfigurationUpdater) } else { projectDescriptor?.modules?.firstOrNull()?.addConfigurationUpdater(ConfigurationUpdater) @@ -46,8 +46,8 @@ class VcModuleWizardStep( } if (projectRoot.findChild(FileUtils.LIBRARY_CONFIG_FILE) == null) { - val vclFile = projectRoot.createChildData(projectRoot, FileUtils.LIBRARY_CONFIG_FILE) - vclFile.setBinaryContent("sourcesDir: $SOURCE_DIR".toByteArray()) + val configFile = projectRoot.createChildData(projectRoot, FileUtils.LIBRARY_CONFIG_FILE) + configFile.setBinaryContent("sourcesDir: $SOURCE_DIR".toByteArray()) } contentEntry.addSourceFolder(FileUtil.join(projectRoot.url, SOURCE_DIR), false) contentEntry.addExcludeFolder(FileUtil.join(projectRoot.url, OUTPUT_DIR)) diff --git a/src/main/kotlin/org/vclang/module/util/VcProjectStructureDetector.kt b/src/main/kotlin/org/arend/module/util/ArendProjectStructureDetector.kt similarity index 76% rename from src/main/kotlin/org/vclang/module/util/VcProjectStructureDetector.kt rename to src/main/kotlin/org/arend/module/util/ArendProjectStructureDetector.kt index cb2ea1c2b..d533f60ee 100644 --- a/src/main/kotlin/org/vclang/module/util/VcProjectStructureDetector.kt +++ b/src/main/kotlin/org/arend/module/util/ArendProjectStructureDetector.kt @@ -1,4 +1,4 @@ -package org.vclang.module.util +package org.arend.module.util import com.intellij.ide.util.importProject.ModuleDescriptor import com.intellij.ide.util.importProject.ProjectDescriptor @@ -7,12 +7,12 @@ import com.intellij.ide.util.projectWizard.importSources.DetectedProjectRoot import com.intellij.ide.util.projectWizard.importSources.DetectedSourceRoot import com.intellij.ide.util.projectWizard.importSources.ProjectFromSourcesBuilder import com.intellij.ide.util.projectWizard.importSources.ProjectStructureDetector -import org.vclang.VcFileType -import org.vclang.module.VcModuleType +import org.arend.ArendFileType +import org.arend.module.ArendModuleType import java.io.File import javax.swing.Icon -class VcProjectStructureDetector : ProjectStructureDetector() { +class ArendProjectStructureDetector : ProjectStructureDetector() { override fun detectRoots( dir: File, @@ -20,12 +20,12 @@ class VcProjectStructureDetector : ProjectStructureDetector() { base: File, result: MutableList ): DirectoryProcessingResult { - val containsVclangFile = dir + val containsArendFile = dir .walk() - .any { it.extension == VcFileType.defaultExtension } - if (containsVclangFile) { + .any { it.extension == ArendFileType.defaultExtension } + if (containsArendFile) { result.add(object : DetectedProjectRoot(dir) { - override fun getRootTypeName(): String = "Vclang" + override fun getRootTypeName(): String = "Arend" }) } return DirectoryProcessingResult.SKIP_CHILDREN @@ -45,7 +45,7 @@ class VcProjectStructureDetector : ProjectStructureDetector() { val moduleDescriptor = ModuleDescriptor( root.directory, - VcModuleType.INSTANCE, + ArendModuleType.INSTANCE, emptyList() ) projectDescriptor.modules = listOf(moduleDescriptor) @@ -55,5 +55,5 @@ class VcProjectStructureDetector : ProjectStructureDetector() { builder: ProjectFromSourcesBuilder, projectDescriptor: ProjectDescriptor, stepIcon: Icon? - ): List = listOf(VcModuleWizardStep(builder.context, projectDescriptor)) + ): List = listOf(ArendModuleWizardStep(builder.context, projectDescriptor)) } diff --git a/src/main/kotlin/org/vclang/module/util/ModuleUtils.kt b/src/main/kotlin/org/arend/module/util/ModuleUtils.kt similarity index 80% rename from src/main/kotlin/org/vclang/module/util/ModuleUtils.kt rename to src/main/kotlin/org/arend/module/util/ModuleUtils.kt index e3a81193f..03e51d4a4 100644 --- a/src/main/kotlin/org/vclang/module/util/ModuleUtils.kt +++ b/src/main/kotlin/org/arend/module/util/ModuleUtils.kt @@ -1,4 +1,4 @@ -package org.vclang.module.util +package org.arend.module.util import com.intellij.openapi.module.Module import com.intellij.openapi.roots.ModuleRootManager @@ -9,15 +9,15 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiFileSystemItem import com.intellij.psi.PsiManager -import com.jetbrains.jetpad.vclang.library.LibraryDependency -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.util.FileUtils +import org.arend.library.LibraryDependency +import org.arend.module.ModulePath +import org.arend.util.FileUtils import org.jetbrains.yaml.psi.YAMLFile import org.jetbrains.yaml.psi.YAMLMapping import org.jetbrains.yaml.psi.YAMLScalar import org.jetbrains.yaml.psi.YAMLSequence -import org.vclang.psi.VcFile -import org.vclang.psi.module +import org.arend.psi.ArendFile +import org.arend.psi.module import java.nio.file.Path import java.nio.file.Paths @@ -42,14 +42,14 @@ val YAMLFile.libModulesProp: List? get() = (getProp("modules") as? YAMLSequence)?.items?.mapNotNull { (it.value as? YAMLScalar)?.textValue } val YAMLFile.libModules: List - get() = libModulesProp?.mapNotNull { FileUtils.modulePath(it) } ?: sourcesDirFile?.let { getVcFiles(it).map { it.modulePath } } ?: emptyList() + get() = libModulesProp?.mapNotNull { FileUtils.modulePath(it) } ?: sourcesDirFile?.let { getArendFiles(it).map { it.modulePath } } ?: emptyList() -private fun YAMLFile.getVcFiles(root: VirtualFile): List { - val result = ArrayList() +private fun YAMLFile.getArendFiles(root: VirtualFile): List { + val result = ArrayList() val psiManager = PsiManager.getInstance(project) VfsUtilCore.iterateChildrenRecursively(root, null) { file -> if (file.name.endsWith(FileUtils.EXTENSION)) { - (psiManager.findFile(file) as? VcFile)?.let { result.add(it) } + (psiManager.findFile(file) as? ArendFile)?.let { result.add(it) } } return@iterateChildrenRecursively true } @@ -84,10 +84,10 @@ val YAMLFile.sourcesDirFile: VirtualFile? fun YAMLFile.containsModule(modulePath: ModulePath): Boolean { val moduleStr = modulePath.toString() - return libModulesProp?.any { it == moduleStr } ?: findVcFile(modulePath) != null + return libModulesProp?.any { it == moduleStr } ?: findArendFile(modulePath) != null } -fun YAMLFile.findVcFilesAndDirectories(modulePath: ModulePath): List { +fun YAMLFile.findArendFilesAndDirectories(modulePath: ModulePath): List { var dirs = sourcesDirFile?.let { listOf(it) } ?: return emptyList() val path = modulePath.toList() val psiManager = PsiManager.getInstance(project) @@ -101,7 +101,7 @@ fun YAMLFile.findVcFilesAndDirectories(modulePath: ModulePath): List().firstOrNull() +fun YAMLFile.findArendFile(modulePath: ModulePath): ArendFile? = + findArendFilesAndDirectories(modulePath).filterIsInstance().firstOrNull() val Module.libraryConfig: YAMLFile? get() { @@ -118,5 +118,5 @@ val Module.libraryConfig: YAMLFile? return PsiManager.getInstance(project).findFile(virtualFile) as? YAMLFile } -val Module.isVcModule: Boolean +val Module.isArendModule: Boolean get() = libraryConfig != null diff --git a/src/main/kotlin/org/arend/navigation/ArendClassNavigationContributor.kt b/src/main/kotlin/org/arend/navigation/ArendClassNavigationContributor.kt new file mode 100644 index 000000000..1246cf1d0 --- /dev/null +++ b/src/main/kotlin/org/arend/navigation/ArendClassNavigationContributor.kt @@ -0,0 +1,9 @@ +package org.arend.navigation + +import org.arend.psi.ext.PsiReferable +import org.arend.psi.stubs.index.ArendGotoClassIndex + +class ArendClassNavigationContributor : ArendNavigationContributorBase( + ArendGotoClassIndex.KEY, + PsiReferable::class.java +) diff --git a/src/main/kotlin/org/vclang/navigation/VcNavigationContributorBase.kt b/src/main/kotlin/org/arend/navigation/ArendNavigationContributorBase.kt similarity index 84% rename from src/main/kotlin/org/vclang/navigation/VcNavigationContributorBase.kt rename to src/main/kotlin/org/arend/navigation/ArendNavigationContributorBase.kt index 27480c991..c5c7f7028 100644 --- a/src/main/kotlin/org/vclang/navigation/VcNavigationContributorBase.kt +++ b/src/main/kotlin/org/arend/navigation/ArendNavigationContributorBase.kt @@ -1,4 +1,4 @@ -package org.vclang.navigation +package org.arend.navigation import com.intellij.navigation.GotoClassContributor import com.intellij.navigation.NavigationItem @@ -6,12 +6,12 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubIndex import com.intellij.psi.stubs.StubIndexKey -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.ext.fullName +import org.arend.naming.reference.Referable +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiReferable +import org.arend.psi.ext.fullName -abstract class VcNavigationContributorBase protected constructor( +abstract class ArendNavigationContributorBase protected constructor( private val indexKey: StubIndexKey, private val clazz: Class ) : GotoClassContributor where T : NavigationItem, T : PsiReferable { diff --git a/src/main/kotlin/org/arend/navigation/ArendSymbolNavigationContributor.kt b/src/main/kotlin/org/arend/navigation/ArendSymbolNavigationContributor.kt new file mode 100644 index 000000000..32b75fb57 --- /dev/null +++ b/src/main/kotlin/org/arend/navigation/ArendSymbolNavigationContributor.kt @@ -0,0 +1,9 @@ +package org.arend.navigation + +import org.arend.psi.ext.PsiReferable +import org.arend.psi.stubs.index.ArendNamedElementIndex + +class ArendSymbolNavigationContributor : ArendNavigationContributorBase( + ArendNamedElementIndex.KEY, + PsiReferable::class.java +) diff --git a/src/main/kotlin/org/vclang/navigation/Utils.kt b/src/main/kotlin/org/arend/navigation/Utils.kt similarity index 56% rename from src/main/kotlin/org/vclang/navigation/Utils.kt rename to src/main/kotlin/org/arend/navigation/Utils.kt index ef3bdf239..021fad5d8 100644 --- a/src/main/kotlin/org/vclang/navigation/Utils.kt +++ b/src/main/kotlin/org/arend/navigation/Utils.kt @@ -1,27 +1,27 @@ -package org.vclang.navigation +package org.arend.navigation import com.intellij.ide.projectView.PresentationData import com.intellij.navigation.ItemPresentation import com.intellij.psi.PsiElement -import org.vclang.psi.VcFile -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.ext.PsiReferable +import org.arend.psi.ArendFile +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.ext.PsiReferable -fun getPresentation(psi: VcCompositeElement): ItemPresentation { +fun getPresentation(psi: ArendCompositeElement): ItemPresentation { val location = run { val module = psi.containingFile - "(in ${(module as? VcFile)?.fullName ?: module.name})" + "(in ${(module as? ArendFile)?.fullName ?: module.name})" } val name = presentableName(psi) return PresentationData(name, location, psi.getIcon(0), null) } -fun getPresentationForStructure(psi: VcCompositeElement): ItemPresentation = +fun getPresentationForStructure(psi: ArendCompositeElement): ItemPresentation = PresentationData(presentableName(psi), null, psi.getIcon(0), null) private fun presentableName(psi: PsiElement): String? = when (psi) { - is VcFile -> psi.fullName + is ArendFile -> psi.fullName is PsiReferable -> psi.name else -> null } diff --git a/src/main/kotlin/org/arend/parser/ArendParserDefinition.kt b/src/main/kotlin/org/arend/parser/ArendParserDefinition.kt new file mode 100644 index 000000000..f0d490461 --- /dev/null +++ b/src/main/kotlin/org/arend/parser/ArendParserDefinition.kt @@ -0,0 +1,43 @@ +package org.arend.parser + +import com.intellij.lang.ASTNode +import com.intellij.lang.ParserDefinition +import com.intellij.lang.PsiParser +import com.intellij.lexer.Lexer +import com.intellij.openapi.project.Project +import com.intellij.psi.FileViewProvider +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.tree.IFileElementType +import com.intellij.psi.tree.TokenSet +import org.arend.lexer.ArendLexerAdapter +import org.arend.psi.AREND_COMMENTS +import org.arend.psi.AREND_WHITE_SPACES +import org.arend.psi.ArendElementTypes +import org.arend.psi.ArendFile +import org.arend.psi.stubs.ArendFileStub + +class ArendParserDefinition : ParserDefinition { + + override fun createLexer(project: Project): Lexer = ArendLexerAdapter() + + override fun getWhitespaceTokens(): TokenSet = AREND_WHITE_SPACES + + override fun getCommentTokens(): TokenSet = AREND_COMMENTS + + override fun getStringLiteralElements(): TokenSet = TokenSet.EMPTY + + override fun createParser(project: Project): PsiParser = ArendParser() + + override fun getFileNodeType(): IFileElementType = ArendFileStub.Type + + override fun createFile(viewProvider: FileViewProvider): PsiFile = ArendFile(viewProvider) + + override fun spaceExistenceTypeBetweenTokens( + left: ASTNode, + right: ASTNode + ): ParserDefinition.SpaceRequirements = ParserDefinition.SpaceRequirements.MAY + + override fun createElement(node: ASTNode): PsiElement = + ArendElementTypes.Factory.createElement(node) +} diff --git a/src/main/kotlin/org/arend/psi/ArendCompositeElementType.kt b/src/main/kotlin/org/arend/psi/ArendCompositeElementType.kt new file mode 100644 index 000000000..6d3cbd66a --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ArendCompositeElementType.kt @@ -0,0 +1,6 @@ +package org.arend.psi + +import com.intellij.psi.tree.IElementType +import org.arend.ArendLanguage + +class ArendCompositeElementType(debugName: String) : IElementType(debugName, ArendLanguage.INSTANCE) diff --git a/src/main/kotlin/org/vclang/psi/VcFile.kt b/src/main/kotlin/org/arend/psi/ArendFile.kt similarity index 53% rename from src/main/kotlin/org/vclang/psi/VcFile.kt rename to src/main/kotlin/org/arend/psi/ArendFile.kt index caef7f260..08fa154da 100644 --- a/src/main/kotlin/org/vclang/psi/VcFile.kt +++ b/src/main/kotlin/org/arend/psi/ArendFile.kt @@ -1,36 +1,36 @@ -package org.vclang.psi +package org.arend.psi import com.intellij.extapi.psi.PsiFileBase import com.intellij.openapi.fileTypes.FileType import com.intellij.openapi.util.io.FileUtil import com.intellij.psi.FileViewProvider import com.intellij.psi.PsiElement -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.Reference -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.group.ChildGroup -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.VcFileType -import org.vclang.VcIcons -import org.vclang.VcLanguage -import org.vclang.module.util.sourcesDir -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcSourceNode -import org.vclang.psi.stubs.VcFileStub -import org.vclang.resolving.VcReference - -class VcFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, VcLanguage.INSTANCE), VcSourceNode, PsiLocatedReferable, ChildGroup { +import org.arend.module.ModulePath +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.Reference +import org.arend.naming.scope.Scope +import org.arend.naming.scope.ScopeFactory +import org.arend.term.Precedence +import org.arend.term.abs.Abstract +import org.arend.term.group.ChildGroup +import org.arend.term.group.Group +import org.arend.ArendFileType +import org.arend.ArendIcons +import org.arend.ArendLanguage +import org.arend.module.util.sourcesDir +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendSourceNode +import org.arend.psi.stubs.ArendFileStub +import org.arend.resolving.ArendReference + +class ArendFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, ArendLanguage.INSTANCE), ArendSourceNode, PsiLocatedReferable, ChildGroup { val modulePath: ModulePath get() { val fileName = viewProvider.virtualFile.path val root = module?.sourcesDir?.let { FileUtil.toSystemIndependentName(it) } val shortFileName = if (root == null || !fileName.startsWith(root)) fileName else fileName.removePrefix(root) - val fullName = shortFileName.removePrefix("/").removeSuffix('.' + VcFileType.defaultExtension).replace('/', '.') + val fullName = shortFileName.removePrefix("/").removeSuffix('.' + ArendFileType.defaultExtension).replace('/', '.') return ModulePath(fullName.split('.')) } @@ -38,12 +38,12 @@ class VcFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, VcLangu get() = modulePath.toString() val libraryName - get() = module?.name ?: if (name == "Prelude.vc") "prelude" else null + get() = module?.name ?: if (name == "Prelude.ard") "prelude" else null override fun setName(name: String): PsiElement = - super.setName(if (name.endsWith('.' + VcFileType.defaultExtension)) name else name + '.' + VcFileType.defaultExtension) + super.setName(if (name.endsWith('.' + ArendFileType.defaultExtension)) name else name + '.' + ArendFileType.defaultExtension) - override fun getStub(): VcFileStub? = super.getStub() as VcFileStub? + override fun getStub(): ArendFileStub? = super.getStub() as ArendFileStub? override fun getKind() = GlobalReferable.Kind.OTHER @@ -60,11 +60,11 @@ class VcFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, VcLangu override fun getNameIdentifier(): PsiElement? = null - override fun getReference(): VcReference? = null + override fun getReference(): ArendReference? = null - override fun getFileType(): FileType = VcFileType + override fun getFileType(): FileType = ArendFileType - override fun textRepresentation(): String = name.removeSuffix("." + VcFileType.defaultExtension) + override fun textRepresentation(): String = name.removeSuffix("." + ArendFileType.defaultExtension) override fun getPrecedence(): Precedence = Precedence.DEFAULT @@ -72,9 +72,9 @@ class VcFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, VcLangu override fun getReferable(): PsiLocatedReferable = this - override fun getSubgroups(): List = children.mapNotNull { (it as? VcStatement)?.let { it.definition ?: it.defModule as ChildGroup? } } + override fun getSubgroups(): List = children.mapNotNull { (it as? ArendStatement)?.let { it.definition ?: it.defModule as ChildGroup? } } - override fun getNamespaceCommands(): List = children.mapNotNull { (it as? VcStatement)?.statCmd } + override fun getNamespaceCommands(): List = children.mapNotNull { (it as? ArendStatement)?.statCmd } override fun getConstructors(): List = emptyList() @@ -92,9 +92,9 @@ class VcFile(viewProvider: FileViewProvider) : PsiFileBase(viewProvider, VcLangu override fun getTopmostEquivalentSourceNode() = this - override fun getParentSourceNode(): VcSourceNode? = null + override fun getParentSourceNode(): ArendSourceNode? = null override fun getErrorData(): Abstract.ErrorData? = null - override fun getIcon(flags: Int) = VcIcons.MODULE + override fun getIcon(flags: Int) = ArendIcons.MODULE } diff --git a/src/main/kotlin/org/vclang/psi/VcPsiFactory.kt b/src/main/kotlin/org/arend/psi/ArendPsiFactory.kt similarity index 60% rename from src/main/kotlin/org/vclang/psi/VcPsiFactory.kt rename to src/main/kotlin/org/arend/psi/ArendPsiFactory.kt index 05ed60a1f..db37004cc 100644 --- a/src/main/kotlin/org/vclang/psi/VcPsiFactory.kt +++ b/src/main/kotlin/org/arend/psi/ArendPsiFactory.kt @@ -1,36 +1,36 @@ -package org.vclang.psi +package org.arend.psi import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiFileFactory import com.intellij.psi.PsiParserFacade -import org.vclang.VcFileType -import org.vclang.refactoring.VcNamesValidator +import org.arend.ArendFileType +import org.arend.refactoring.ArendNamesValidator -class VcPsiFactory(private val project: Project) { +class ArendPsiFactory(private val project: Project) { - fun createDefIdentifier(name: String): VcDefIdentifier = + fun createDefIdentifier(name: String): ArendDefIdentifier = createFunction(name).defIdentifier ?: error("Failed to create def identifier: `$name`") - fun createRefIdentifier(name: String): VcRefIdentifier = + fun createRefIdentifier(name: String): ArendRefIdentifier = createStatCmd(name).refIdentifierList.getOrNull(0) ?: error("Failed to create ref identifier: `$name`") - fun createInfixName(name: String): VcInfixArgument { - val needsPrefix = !VcNamesValidator.isInfixName(name) - return createArgument("dummy ${if (needsPrefix) "`$name`" else name} dummy") as VcInfixArgument + fun createInfixName(name: String): ArendInfixArgument { + val needsPrefix = !ArendNamesValidator.isInfixName(name) + return createArgument("dummy ${if (needsPrefix) "`$name`" else name} dummy") as ArendInfixArgument } - fun createPostfixName(name: String): VcPostfixArgument { - val needsPrefix = !VcNamesValidator.isPostfixName(name) - return createArgument("dummy ${if (needsPrefix) "`$name" else name}") as VcPostfixArgument + fun createPostfixName(name: String): ArendPostfixArgument { + val needsPrefix = !ArendNamesValidator.isPostfixName(name) + return createArgument("dummy ${if (needsPrefix) "`$name" else name}") as ArendPostfixArgument } private fun createFunction( name: String, teles: List = emptyList(), expr: String? = null - ): VcDefFunction { + ): ArendDefFunction { val code = buildString { append("\\func ") append(name) @@ -40,7 +40,7 @@ class VcPsiFactory(private val project: Project) { return createFromText(code)?.childOfType() ?: error("Failed to create function: `$code`") } - fun createCoClause(name: String, expr: String): VcCoClauses { + fun createCoClause(name: String, expr: String): ArendCoClauses { val code = buildString { append("\\instance Dummy: Dummy\n") append("| $name => $expr") @@ -48,7 +48,7 @@ class VcPsiFactory(private val project: Project) { return createFromText(code)?.childOfType() ?: error("Failed to create instance: `$code`") } - fun createNestedCoClause(name: String): VcCoClauses { + fun createNestedCoClause(name: String): ArendCoClauses { val code = buildString { append("\\instance Dummy: Dummy\n") append("| $name { }") @@ -61,28 +61,28 @@ class VcPsiFactory(private val project: Project) { return Pair(nestedCoClause.lbrace!!, nestedCoClause.rbrace!!) } - private fun createArgument(expr: String): VcArgument = - ((createFunction("dummy", emptyList(), expr).expr as VcNewExpr?)?.appExpr as VcArgumentAppExpr?)?.argumentList?.let { it[0] } + private fun createArgument(expr: String): ArendArgument = + ((createFunction("dummy", emptyList(), expr).expr as ArendNewExpr?)?.appExpr as ArendArgumentAppExpr?)?.argumentList?.let { it[0] } ?: error("Failed to create expression: `$expr`") - fun createLiteral(expr: String): VcLiteral = - ((createFunction("dummy", emptyList(), expr).expr as VcNewExpr?)?.appExpr as VcArgumentAppExpr?)?.atomFieldsAcc?.atom?.literal + fun createLiteral(expr: String): ArendLiteral = + ((createFunction("dummy", emptyList(), expr).expr as ArendNewExpr?)?.appExpr as ArendArgumentAppExpr?)?.atomFieldsAcc?.atom?.literal ?: error("Failed to create literal: `$expr`") - private fun createStatCmd(name: String): VcStatCmd = + private fun createStatCmd(name: String): ArendStatCmd = createFromText("\\open X \\hiding ($name)")?.childOfType() ?: error("Failed to create stat cmd: `$name`") - fun createImportCommand(command : String): VcStatement { - val commands = createFromText("\\import "+command)?.namespaceCommands + fun createImportCommand(command : String): ArendStatement { + val commands = createFromText("\\import $command")?.namespaceCommands if (commands != null && commands.size == 1) { - return commands[0].parent as VcStatement + return commands[0].parent as ArendStatement } error("Failed to create import command: \\import $command") } - fun createFromText(code: String): VcFile? = - PsiFileFactory.getInstance(project).createFileFromText("DUMMY.vc", VcFileType, code) as? VcFile + fun createFromText(code: String): ArendFile? = + PsiFileFactory.getInstance(project).createFileFromText("DUMMY.ard", ArendFileType, code) as? ArendFile fun createWhitespace(symbol: String): PsiElement { return PsiParserFacade.SERVICE.getInstance(project).createWhiteSpaceFromText(symbol) diff --git a/src/main/kotlin/org/vclang/psi/VcPsiPattern.kt b/src/main/kotlin/org/arend/psi/ArendPsiPattern.kt similarity index 97% rename from src/main/kotlin/org/vclang/psi/VcPsiPattern.kt rename to src/main/kotlin/org/arend/psi/ArendPsiPattern.kt index 3a0d15a21..ae146fa3c 100644 --- a/src/main/kotlin/org/vclang/psi/VcPsiPattern.kt +++ b/src/main/kotlin/org/arend/psi/ArendPsiPattern.kt @@ -1,4 +1,4 @@ -package org.vclang.psi +package org.arend.psi import com.intellij.patterns.* import com.intellij.psi.PsiComment @@ -8,7 +8,7 @@ import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.ProcessingContext -object VcPsiPattern { +object ArendPsiPattern { val onStatementBeginning: PsiElementPattern.Capture = PlatformPatterns.psiElement().with(OnStatementBeginning()) @@ -37,7 +37,7 @@ object VcPsiPattern { private class OnExpressionBeginning : PatternCondition("on expression beginning") { override fun accepts(t: PsiElement, context: ProcessingContext?): Boolean { - val ancestor = t.ancestors.firstOrNull { it.parent is VcExpr || it.parent is VcNewExpr } + val ancestor = t.ancestors.firstOrNull { it.parent is ArendExpr || it.parent is ArendNewExpr } ?: return false return ancestor.leftSiblings.all { it is PsiWhiteSpace || it is PsiComment } } diff --git a/src/main/kotlin/org/vclang/psi/VcTokenType.kt b/src/main/kotlin/org/arend/psi/ArendTokenType.kt similarity index 58% rename from src/main/kotlin/org/vclang/psi/VcTokenType.kt rename to src/main/kotlin/org/arend/psi/ArendTokenType.kt index 62f5740e9..504c5aa42 100644 --- a/src/main/kotlin/org/vclang/psi/VcTokenType.kt +++ b/src/main/kotlin/org/arend/psi/ArendTokenType.kt @@ -1,14 +1,14 @@ -package org.vclang.psi +package org.arend.psi import com.intellij.psi.TokenType import com.intellij.psi.tree.IElementType import com.intellij.psi.tree.TokenSet -import org.vclang.VcLanguage -import org.vclang.psi.VcElementTypes.* +import org.arend.ArendLanguage +import org.arend.psi.ArendElementTypes.* -class VcTokenType(debugName: String) : IElementType(debugName, VcLanguage.INSTANCE) +class ArendTokenType(debugName: String) : IElementType(debugName, ArendLanguage.INSTANCE) -val VC_KEYWORDS: TokenSet = TokenSet.create( +val AREND_KEYWORDS: TokenSet = TokenSet.create( OPEN_KW, IMPORT_KW, USING_KW, AS_KW, HIDING_KW, FUNCTION_KW, NON_ASSOC_KW, LEFT_ASSOC_KW, RIGHT_ASSOC_KW, INFIX_NON_KW, INFIX_LEFT_KW, INFIX_RIGHT_KW, PROP_KW, WHERE_KW, WITH_KW, COWITH_KW, ELIM_KW, NEW_KW, PI_KW, SIGMA_KW, LAM_KW, LET_KW, @@ -18,8 +18,8 @@ val VC_KEYWORDS: TokenSet = TokenSet.create( SET, UNIVERSE, TRUNCATED_UNIVERSE ) -val VC_COMMENTS: TokenSet = TokenSet.create(LINE_COMMENT, BLOCK_COMMENT) +val AREND_COMMENTS: TokenSet = TokenSet.create(LINE_COMMENT, BLOCK_COMMENT) -val VC_NAMES: TokenSet = TokenSet.create(ID, INFIX, POSTFIX) +val AREND_NAMES: TokenSet = TokenSet.create(ID, INFIX, POSTFIX) -val VC_WHITE_SPACES: TokenSet = TokenSet.create(TokenType.WHITE_SPACE) +val AREND_WHITE_SPACES: TokenSet = TokenSet.create(TokenType.WHITE_SPACE) diff --git a/src/main/kotlin/org/vclang/psi/PsiElementUtils.kt b/src/main/kotlin/org/arend/psi/PsiElementUtils.kt similarity index 85% rename from src/main/kotlin/org/vclang/psi/PsiElementUtils.kt rename to src/main/kotlin/org/arend/psi/PsiElementUtils.kt index 413f39c01..1a43c7b33 100644 --- a/src/main/kotlin/org/vclang/psi/PsiElementUtils.kt +++ b/src/main/kotlin/org/arend/psi/PsiElementUtils.kt @@ -1,4 +1,4 @@ -package org.vclang.psi +package org.arend.psi import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.module.Module @@ -7,10 +7,10 @@ import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import com.jetbrains.jetpad.vclang.module.scopeprovider.EmptyModuleScopeProvider -import com.jetbrains.jetpad.vclang.module.scopeprovider.ModuleScopeProvider -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.typechecking.TypeCheckingService +import org.arend.module.scopeprovider.EmptyModuleScopeProvider +import org.arend.module.scopeprovider.ModuleScopeProvider +import org.arend.term.group.Group +import org.arend.typechecking.TypeCheckingService val PsiElement.ancestors: Sequence get() = generateSequence(this) { it.parent } diff --git a/src/main/kotlin/org/arend/psi/ext/ArendAppExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendAppExprImplMixin.kt new file mode 100644 index 000000000..ddb5d0eb2 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendAppExprImplMixin.kt @@ -0,0 +1,11 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendAppExpr + + +abstract class ArendAppExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendAppExpr { + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitInferHole(this, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) +} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcArgumentAppExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendArgumentAppExprImplMixin.kt similarity index 56% rename from src/main/kotlin/org/vclang/psi/ext/VcArgumentAppExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendArgumentAppExprImplMixin.kt index 65c557b3c..92472a09c 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcArgumentAppExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendArgumentAppExprImplMixin.kt @@ -1,14 +1,14 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcArgumentAppExpr +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendArgumentAppExpr -abstract class VcArgumentAppExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcArgumentAppExpr { +abstract class ArendArgumentAppExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendArgumentAppExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val expr = atomFieldsAcc ?: longNameExpr ?: error("Incomplete expression: " + this) val args = argumentList - return if (args.isEmpty()) expr.accept(visitor, params) else visitor.visitBinOpSequence(this, expr, args, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return if (args.isEmpty()) expr.accept(visitor, params) else visitor.visitBinOpSequence(this, expr, args, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendArgumentImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendArgumentImplMixin.kt new file mode 100644 index 000000000..b6d173811 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendArgumentImplMixin.kt @@ -0,0 +1,88 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.naming.reference.NamedUnresolvedReference +import org.arend.psi.* +import org.arend.term.Fixity +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.resolving.ArendReference +import org.arend.resolving.ArendReferenceImpl + + +abstract class ArendImplicitArgumentImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendImplicitArgument { + override fun isExplicit(): Boolean = false + + override fun getFixity(): Fixity = Fixity.NONFIX + + override fun getExpression(): Abstract.Expression = expr +} + +abstract class ArendInfixArgumentImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendInfixArgument, ArendReferenceElement { + override fun isExplicit(): Boolean = true + + override fun getData() = this + + override fun getFixity(): Fixity = Fixity.INFIX + + override fun getExpression(): ArendExpr = this + + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitReference(this, NamedUnresolvedReference(this, referenceName), null, null, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override val referenceNameElement + get() = this + + override val referenceName: String + get() = infix.text.removeSurrounding("`") + + override fun getReference(): ArendReference = ArendReferenceImpl(this) +} + +abstract class ArendPostfixArgumentImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendPostfixArgument, ArendReferenceElement { + override fun isExplicit(): Boolean = true + + override fun getData() = this + + override fun getFixity(): Fixity = Fixity.POSTFIX + + override fun getExpression(): ArendExpr = this + + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitReference(this, NamedUnresolvedReference(this, referenceName), null, null, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override val referenceNameElement + get() = this + + override val referenceName: String + get() = postfix.text.removePrefix("`") + + override fun getReference(): ArendReference = ArendReferenceImpl(this) +} + +abstract class ArendNewArgImplMixin(node: ASTNode) : ArendNewExprImplMixin(node), ArendNewArg, Abstract.ClassReferenceHolder { + override fun getFixity(): Fixity = Fixity.NONFIX + + override fun getExpression(): ArendExpr = this +} + +abstract class ArendAtomArgumentImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendAtomArgument { + override fun isExplicit(): Boolean = true + + override fun getFixity(): Fixity { + val atomFieldsAcc = atomFieldsAcc + if (!atomFieldsAcc.fieldAccList.isEmpty()) return Fixity.NONFIX + val literal = atomFieldsAcc.atom.literal ?: return Fixity.NONFIX + return if (literal.longName == null) Fixity.NONFIX else Fixity.UNKNOWN + } + + override fun getExpression(): ArendExpr = atomFieldsAcc +} + +abstract class ArendArgumentImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendArgument { + override fun isExplicit(): Boolean = true + + override fun getFixity(): Fixity = Fixity.UNKNOWN + + override fun getExpression(): ArendExpr? = null +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcArrExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendArrExprImplMixin.kt similarity index 52% rename from src/main/kotlin/org/vclang/psi/ext/VcArrExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendArrExprImplMixin.kt index bae12a400..710c72a40 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcArrExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendArrExprImplMixin.kt @@ -1,13 +1,13 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcArrExpr +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendArrExpr -abstract class VcArrExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcArrExpr { +abstract class ArendArrExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendArrExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val exprs = exprList - return visitor.visitPi(this, if (exprs.isEmpty()) emptyList() else listOf(exprs[0]), exprs.getOrNull(1), if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitPi(this, if (exprs.isEmpty()) emptyList() else listOf(exprs[0]), exprs.getOrNull(1), if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcAtomFieldsAccImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendAtomFieldsAccImplMixin.kt similarity index 54% rename from src/main/kotlin/org/vclang/psi/ext/VcAtomFieldsAccImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendAtomFieldsAccImplMixin.kt index 897fbe4b3..f14860bf5 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcAtomFieldsAccImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendAtomFieldsAccImplMixin.kt @@ -1,13 +1,13 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcAtomFieldsAcc +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendAtomFieldsAcc -abstract class VcAtomFieldsAccImplMixin(node: ASTNode) : VcExprImplMixin(node), VcAtomFieldsAcc { +abstract class ArendAtomFieldsAccImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendAtomFieldsAcc { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val fieldAccs = fieldAccList.mapNotNull { it.number?.text?.toIntOrNull() } - return if (fieldAccs.isEmpty()) atom.accept(visitor, params) else visitor.visitFieldAccs(this, atom, fieldAccs, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return if (fieldAccs.isEmpty()) atom.accept(visitor, params) else visitor.visitFieldAccs(this, atom, fieldAccs, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcAtomImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendAtomImplMixin.kt similarity index 63% rename from src/main/kotlin/org/vclang/psi/ext/VcAtomImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendAtomImplMixin.kt index d4e4b936d..515ad0c7e 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcAtomImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendAtomImplMixin.kt @@ -1,16 +1,16 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcAtom +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendAtom import java.math.BigInteger -abstract class VcAtomImplMixin(node: ASTNode) : VcExprImplMixin(node), VcAtom { +abstract class ArendAtomImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendAtom { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { literal?.let { return it.accept(visitor, params) } tuple?.let { return it.accept(visitor, params) } - (number ?: negativeNumber)?.let { return visitor.visitNumericLiteral(this, BigInteger(it.text), if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) } + (number ?: negativeNumber)?.let { return visitor.visitNumericLiteral(this, BigInteger(it.text), if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } error("Incorrect expression: atom") } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcAtomLevelExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendAtomLevelExprImplMixin.kt similarity index 68% rename from src/main/kotlin/org/vclang/psi/ext/VcAtomLevelExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendAtomLevelExprImplMixin.kt index 9abca5676..b833f0c90 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcAtomLevelExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendAtomLevelExprImplMixin.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractLevelExpressionVisitor -import org.vclang.psi.VcAtomLevelExpr +import org.arend.term.abs.AbstractLevelExpressionVisitor +import org.arend.psi.ArendAtomLevelExpr -abstract class VcAtomLevelExprImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcAtomLevelExpr { +abstract class ArendAtomLevelExprImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendAtomLevelExpr { override fun getData() = this override fun

accept(visitor: AbstractLevelExpressionVisitor, params: P?): R { diff --git a/src/main/kotlin/org/vclang/psi/ext/VcAtomOnlyLevelExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendAtomOnlyLevelExprImplMixin.kt similarity index 63% rename from src/main/kotlin/org/vclang/psi/ext/VcAtomOnlyLevelExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendAtomOnlyLevelExprImplMixin.kt index c271525ae..0837147cc 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcAtomOnlyLevelExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendAtomOnlyLevelExprImplMixin.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractLevelExpressionVisitor -import org.vclang.psi.* +import org.arend.psi.ArendAtomOnlyLevelExpr +import org.arend.term.abs.AbstractLevelExpressionVisitor -abstract class VcAtomOnlyLevelExprImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcAtomOnlyLevelExpr { +abstract class ArendAtomOnlyLevelExprImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendAtomOnlyLevelExpr { override fun getData() = this override fun

accept(visitor: AbstractLevelExpressionVisitor, params: P?): R { diff --git a/src/main/kotlin/org/arend/psi/ext/ArendCaseArgImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendCaseArgImplMixin.kt new file mode 100644 index 000000000..e471ea63c --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendCaseArgImplMixin.kt @@ -0,0 +1,14 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.psi.ArendCaseArg +import org.arend.psi.ArendExpr + + +abstract class ArendCaseArgImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendCaseArg { + override fun getExpression(): ArendExpr = exprList[0] + + override fun getReferable() = defIdentifier + + override fun getType() = exprList.getOrNull(1) +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendCaseExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendCaseExprImplMixin.kt new file mode 100644 index 000000000..ac6b827f0 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendCaseExprImplMixin.kt @@ -0,0 +1,15 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendCaseArg +import org.arend.psi.ArendCaseExpr + + +abstract class ArendCaseExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendCaseExpr, Abstract.CaseArgumentsHolder { + override fun getCaseArguments(): List = caseArgList + + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitCase(this, caseArgList, expr, clauseList, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcClauseImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendClauseImplMixin.kt similarity index 51% rename from src/main/kotlin/org/vclang/psi/ext/VcClauseImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendClauseImplMixin.kt index 8ee2bacb2..39ab92023 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcClauseImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendClauseImplMixin.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcClause +import org.arend.term.abs.Abstract +import org.arend.psi.ArendClause -abstract class VcClauseImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcClause { +abstract class ArendClauseImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendClause { override fun getData(): Any? = this override fun getPatterns(): List = patternList diff --git a/src/main/kotlin/org/arend/psi/ext/ArendCoClauseImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendCoClauseImplMixin.kt new file mode 100644 index 000000000..44f878457 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendCoClauseImplMixin.kt @@ -0,0 +1,31 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.TypedReferable +import org.arend.psi.ArendCoClause +import org.arend.psi.ArendExpr +import org.arend.psi.ArendNameTele + + +abstract class ArendCoClauseImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendCoClause { + override fun getData() = this + + override fun getImplementedField() = longName?.referent + + fun getResolvedImplementedField() = longName?.refIdentifierList?.lastOrNull()?.reference?.resolve() as? Referable + + override fun getParameters(): List = nameTeleList + + override fun getImplementation(): ArendExpr? = expr + + override fun getClassFieldImpls(): List = coClauseList + + override fun getClassReference(): ClassReferable? { + val resolved = getResolvedImplementedField() + return resolved as? ClassReferable ?: (resolved as? TypedReferable)?.typeClassReference + } + + override fun getArgumentsExplicitness() = emptyList() +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendCompositeElement.kt b/src/main/kotlin/org/arend/psi/ext/ArendCompositeElement.kt new file mode 100644 index 000000000..9995304de --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendCompositeElement.kt @@ -0,0 +1,134 @@ +package org.arend.psi.ext + +import com.intellij.extapi.psi.ASTWrapperPsiElement +import com.intellij.extapi.psi.StubBasedPsiElementBase +import com.intellij.lang.ASTNode +import com.intellij.openapi.application.runReadAction +import com.intellij.psi.* +import com.intellij.psi.stubs.IStubElementType +import com.intellij.psi.stubs.StubElement +import org.arend.error.SourceInfo +import org.arend.naming.reference.DataContainer +import org.arend.naming.scope.ClassFieldImplScope +import org.arend.naming.scope.EmptyScope +import org.arend.naming.scope.Scope +import org.arend.naming.scope.ScopeFactory +import org.arend.term.abs.Abstract +import org.arend.module.ModuleScope +import org.arend.psi.* +import org.arend.resolving.ArendReference +import org.arend.typing.ModifiedClassFieldImplScope + +interface ArendCompositeElement : PsiElement, SourceInfo { + val scope: Scope + override fun getReference(): ArendReference? +} + +fun PsiElement.moduleTextRepresentationImpl(): String? = (containingFile as? ArendFile)?.name + +fun PsiElement.positionTextRepresentationImpl(): String? { + val document = PsiDocumentManager.getInstance(project).getDocument(containingFile ?: return null) ?: return null + val offset = textOffset + val line = document.getLineNumber(offset) + val column = offset - document.getLineStartOffset(line) + return (line + 1).toString() + ":" + (column + 1).toString() +} + +interface ArendSourceNode: ArendCompositeElement, Abstract.SourceNode { + override fun getTopmostEquivalentSourceNode(): ArendSourceNode + override fun getParentSourceNode(): ArendSourceNode? +} + +private fun getArendScope(element: ArendCompositeElement): Scope { + val sourceNode = element.ancestors.filterIsInstance().firstOrNull()?.topmostEquivalentSourceNode ?: return (element.containingFile as? ArendFile)?.scope ?: EmptyScope.INSTANCE + val scope = ScopeFactory.forSourceNode(sourceNode.parentSourceNode?.scope ?: (sourceNode.containingFile as? ArendFile)?.scope ?: EmptyScope.INSTANCE, sourceNode, sourceNode.module?.let { ModuleScope(it) }) + if (scope is ClassFieldImplScope && scope.withSuperClasses()) { + val classRef = scope.classReference + if (classRef is ArendDefClass) { + return ModifiedClassFieldImplScope(classRef, sourceNode.parentSourceNode?.parentSourceNode as? Abstract.ClassReferenceHolder) + } + } + return scope +} + +fun getTopmostEquivalentSourceNode(sourceNode: ArendSourceNode): ArendSourceNode { + var current = sourceNode + while (true) { + val parent = current.parent + if (current is Abstract.Expression != parent is Abstract.Expression) { + return current + } + current = when { + parent is ArendLiteral -> parent + parent is ArendAtom -> parent + parent is ArendTuple && parent.tupleExprList.size == 1 && parent.tupleExprList[0].exprList.size == 1 -> parent + parent is ArendNewExpr && parent.newKw == null && parent.lbrace == null && parent.argumentList.isEmpty() -> parent + parent is ArendAtomFieldsAcc && parent.fieldAccList.isEmpty() -> parent + parent is ArendArgumentAppExpr && parent.argumentList.isEmpty() -> parent + parent is ArendLongName && parent.refIdentifierList.size == 1 -> parent + parent is ArendLevelExpr && parent.sucKw == null && parent.maxKw == null -> parent + parent is ArendAtomLevelExpr && parent.lparen != null -> parent + parent is ArendOnlyLevelExpr && parent.sucKw == null && parent.maxKw == null -> parent + parent is ArendAtomOnlyLevelExpr && parent.lparen != null -> parent + else -> return current + } + } +} + +fun getParentSourceNode(sourceNode: ArendSourceNode): ArendSourceNode? { + val parent = sourceNode.topmostEquivalentSourceNode.parent + return parent as? ArendFile ?: parent.ancestors.filterIsInstance().firstOrNull() +} + +private class SourceInfoErrorData(cause: PsiErrorElement) : Abstract.ErrorData(SmartPointerManager.createPointer(cause), cause.errorDescription), SourceInfo, DataContainer { + override fun getData(): Any = cause + + override fun moduleTextRepresentation(): String? = runReadAction { (cause as SmartPsiElementPointer<*>).element?.moduleTextRepresentationImpl() } + + override fun positionTextRepresentation(): String? = runReadAction { (cause as SmartPsiElementPointer<*>).element?.positionTextRepresentationImpl() } +} + +fun getErrorData(element: ArendCompositeElement): Abstract.ErrorData? = + element.children.filterIsInstance().firstOrNull()?.let { SourceInfoErrorData(it) } + +abstract class ArendCompositeElementImpl(node: ASTNode) : ASTWrapperPsiElement(node), ArendCompositeElement { + override val scope + get() = getArendScope(this) + + override fun getReference(): ArendReference? = null + + override fun moduleTextRepresentation(): String? = runReadAction { moduleTextRepresentationImpl() } + + override fun positionTextRepresentation(): String? = runReadAction { positionTextRepresentationImpl() } +} + +abstract class ArendSourceNodeImpl(node: ASTNode) : ArendCompositeElementImpl(node), ArendSourceNode { + override fun getTopmostEquivalentSourceNode() = org.arend.psi.ext.getTopmostEquivalentSourceNode(this) + + override fun getParentSourceNode() = org.arend.psi.ext.getParentSourceNode(this) + + override fun getErrorData(): Abstract.ErrorData? = org.arend.psi.ext.getErrorData(this) +} + +abstract class ArendStubbedElementImpl> : StubBasedPsiElementBase, ArendSourceNode { + constructor(node: ASTNode) : super(node) + + constructor(stub: StubT, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override val scope + get() = getArendScope(this) + + override fun getReference(): ArendReference? = null + + override fun toString(): String = "${javaClass.simpleName}($elementType)" + + override fun moduleTextRepresentation(): String? = runReadAction { moduleTextRepresentationImpl() } + + override fun positionTextRepresentation(): String? = runReadAction { positionTextRepresentationImpl() } + + override fun getTopmostEquivalentSourceNode() = org.arend.psi.ext.getTopmostEquivalentSourceNode(this) + + override fun getParentSourceNode() = org.arend.psi.ext.getParentSourceNode(this) + + override fun getErrorData(): Abstract.ErrorData? = org.arend.psi.ext.getErrorData(this) +} diff --git a/src/main/kotlin/org/arend/psi/ext/ArendConstructorClauseImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendConstructorClauseImplMixin.kt new file mode 100644 index 000000000..730ae61d5 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendConstructorClauseImplMixin.kt @@ -0,0 +1,15 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.psi.ArendConstructor +import org.arend.psi.ArendConstructorClause +import org.arend.psi.ArendPattern + + +abstract class ArendConstructorClauseImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendConstructorClause { + override fun getData(): ArendConstructorClauseImplMixin = this + + override fun getPatterns(): List = patternList + + override fun getConstructors(): List = constructorList +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendExprImplMixin.kt new file mode 100644 index 000000000..dc80f0849 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendExprImplMixin.kt @@ -0,0 +1,17 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.psi.ArendExpr + + +abstract class ArendExprImplMixin(node: ASTNode): ArendSourceNodeImpl(node), ArendExpr { + override fun getData(): ArendExprImplMixin = this + + override fun isExplicit(): Boolean = true + + override fun getReferableList(): List = listOf(null) + + override fun getType(): Abstract.Expression = this +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendLamExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLamExprImplMixin.kt new file mode 100644 index 000000000..479770ecd --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendLamExprImplMixin.kt @@ -0,0 +1,14 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendLamExpr +import org.arend.psi.ArendNameTele + +abstract class ArendLamExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendLamExpr, Abstract.ParametersHolder { + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitLam(this, nameTeleList, expr, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override fun getParameters(): List = nameTeleList +} diff --git a/src/main/kotlin/org/arend/psi/ext/ArendLetClauseImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLetClauseImplMixin.kt new file mode 100644 index 000000000..a9a3a32b6 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendLetClauseImplMixin.kt @@ -0,0 +1,42 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.search.LocalSearchScope +import com.intellij.psi.search.SearchScope +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.psi.ArendExpr +import org.arend.psi.ArendLetClause +import org.arend.psi.ArendLetExpr +import org.arend.psi.ArendNameTele +import org.arend.typing.ExpectedTypeVisitor + + +abstract class ArendLetClauseImplMixin(node: ASTNode) : PsiReferableImpl(node), ArendLetClause, ArendSourceNode { + override fun getReferable(): Referable = this + + override fun getParameters(): List = nameTeleList + + override fun getResultType(): ArendExpr? = typeAnnotation?.expr + + override fun getTerm(): ArendExpr? = expr + + override fun getUseScope(): SearchScope { + if (parent is ArendLetExpr) return LocalSearchScope(parent) + return super.getUseScope() + } + + override fun getParameterType(params: List) = ExpectedTypeVisitor.getParameterType(parameters, resultType, params, textRepresentation()) + + override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, resultType) + + override fun getTopmostEquivalentSourceNode() = org.arend.psi.ext.getTopmostEquivalentSourceNode(this) + + override fun getParentSourceNode() = org.arend.psi.ext.getParentSourceNode(this) + + override fun getErrorData(): Abstract.ErrorData? = org.arend.psi.ext.getErrorData(this) + + override val psiElementType: PsiElement? + get() = resultType +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/ArendLetExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLetExprImplMixin.kt new file mode 100644 index 000000000..4eae1d4b9 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendLetExprImplMixin.kt @@ -0,0 +1,14 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendLetClause +import org.arend.psi.ArendLetExpr + +abstract class ArendLetExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendLetExpr, Abstract.LetClausesHolder { + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitLet(this, letClauseList, expr, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override fun getLetClauses(): List = letClauseList +} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLevelExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLevelExprImplMixin.kt similarity index 69% rename from src/main/kotlin/org/vclang/psi/ext/VcLevelExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendLevelExprImplMixin.kt index a45621e5f..f86c747b6 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcLevelExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendLevelExprImplMixin.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext -import com.jetbrains.jetpad.vclang.term.abs.AbstractLevelExpressionVisitor +import org.arend.term.abs.AbstractLevelExpressionVisitor import com.intellij.lang.ASTNode -import org.vclang.psi.VcLevelExpr +import org.arend.psi.ArendLevelExpr -abstract class VcLevelExprImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcLevelExpr { +abstract class ArendLevelExprImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendLevelExpr { override fun getData() = this override fun

accept(visitor: AbstractLevelExpressionVisitor, params: P?): R { diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLiteralImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLiteralImplMixin.kt similarity index 51% rename from src/main/kotlin/org/vclang/psi/ext/VcLiteralImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendLiteralImplMixin.kt index c4968da30..b5a88cb1c 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcLiteralImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendLiteralImplMixin.kt @@ -1,23 +1,23 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcLiteral +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendLiteral -abstract class VcLiteralImplMixin(node: ASTNode) : VcExprImplMixin(node), VcLiteral { +abstract class ArendLiteralImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendLiteral { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { longName?.let { - return visitor.visitReference(it, it.referent, null, null, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitReference(it, it.referent, null, null, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } if (propKw != null) { - return visitor.visitUniverse(this, 0, -1, null, null, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitUniverse(this, 0, -1, null, null, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } if (underscore != null) { - return visitor.visitInferHole(this, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitInferHole(this, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } goal?.let { - return visitor.visitGoal(it, it.defIdentifier?.textRepresentation(), it.expr, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitGoal(it, it.defIdentifier?.textRepresentation(), it.expr, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } error("Incorrect expression: literal") } diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLongNameExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLongNameExprImplMixin.kt similarity index 62% rename from src/main/kotlin/org/vclang/psi/ext/VcLongNameExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendLongNameExprImplMixin.kt index 0612eb00a..19a2fb57d 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcLongNameExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendLongNameExprImplMixin.kt @@ -1,22 +1,22 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcLongNameExpr +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendLongNameExpr -abstract class VcLongNameExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcLongNameExpr { +abstract class ArendLongNameExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendLongNameExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val name = longName val levels = generateSequence(levelsExpr) { it.levelsExpr }.lastOrNull() if (levels != null) { - levels.propKw?.let { return visitor.visitReference(name, name.referent, 0, -1, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) } + levels.propKw?.let { return visitor.visitReference(name, name.referent, 0, -1, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } val levelExprList = levels.atomLevelExprList if (levelExprList.size == 2) { - return visitor.visitReference(name, name.referent, levelExprList[0], levelExprList[1], if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitReference(name, name.referent, levelExprList[0], levelExprList[1], if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } val levelExprList = atomOnlyLevelExprList - return visitor.visitReference(name, name.referent, levelExprList.getOrNull(0), levelExprList.getOrNull(1), if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitReference(name, name.referent, levelExprList.getOrNull(0), levelExprList.getOrNull(1), if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLongNameImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendLongNameImplMixin.kt similarity index 55% rename from src/main/kotlin/org/vclang/psi/ext/VcLongNameImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendLongNameImplMixin.kt index 8384cf2d0..20866da69 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcLongNameImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendLongNameImplMixin.kt @@ -1,13 +1,13 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.LongUnresolvedReference -import com.jetbrains.jetpad.vclang.naming.reference.UnresolvedReference -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcLongName +import org.arend.naming.reference.LongUnresolvedReference +import org.arend.naming.reference.UnresolvedReference +import org.arend.term.abs.Abstract +import org.arend.psi.ArendLongName -abstract class VcLongNameImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcLongName { +abstract class ArendLongNameImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendLongName { override fun getData() = this override fun getReferent(): UnresolvedReference = diff --git a/src/main/kotlin/org/vclang/psi/ext/VcNewExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendNewExprImplMixin.kt similarity index 56% rename from src/main/kotlin/org/vclang/psi/ext/VcNewExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendNewExprImplMixin.kt index efca77cb4..b14aa3d37 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcNewExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendNewExprImplMixin.kt @@ -1,47 +1,47 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcAppExpr -import org.vclang.psi.VcArgument -import org.vclang.psi.VcArgumentAppExpr -import org.vclang.psi.VcCoClause - -abstract class VcNewExprImplMixin(node: ASTNode) : VcExprImplMixin(node), Abstract.ClassReferenceHolder { +import org.arend.naming.reference.ClassReferable +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendAppExpr +import org.arend.psi.ArendArgument +import org.arend.psi.ArendArgumentAppExpr +import org.arend.psi.ArendCoClause + +abstract class ArendNewExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), Abstract.ClassReferenceHolder { abstract fun getNewKw(): PsiElement? abstract fun getLbrace(): PsiElement? - abstract fun getArgumentAppExpr(): VcArgumentAppExpr? + abstract fun getArgumentAppExpr(): ArendArgumentAppExpr? - open fun getAppExpr(): VcAppExpr? = null + open fun getAppExpr(): ArendAppExpr? = null - open fun getArgumentList(): List = emptyList() + open fun getArgumentList(): List = emptyList() - abstract fun getCoClauseList(): List + abstract fun getCoClauseList(): List override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val isNew = getNewKw() != null if (!isNew && getLbrace() == null && getArgumentList().isEmpty()) { - val expr = getAppExpr() ?: return visitor.visitInferHole(this, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + val expr = getAppExpr() ?: return visitor.visitInferHole(this, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) return expr.accept(visitor, params) } - return visitor.visitClassExt(this, isNew, if (isNew) getArgumentAppExpr() else getAppExpr(), if (getLbrace() == null) null else getCoClauseList(), getArgumentList(), if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + return visitor.visitClassExt(this, isNew, if (isNew) getArgumentAppExpr() else getAppExpr(), if (getLbrace() == null) null else getCoClauseList(), getArgumentList(), if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } override fun getClassReference(): ClassReferable? = getClassReference(getAppExpr()) ?: getClassReference(getArgumentAppExpr()) - override fun getClassFieldImpls(): List = getCoClauseList() + override fun getClassFieldImpls(): List = getCoClauseList() override fun getArgumentsExplicitness() = getArgumentAppExpr()?.argumentList?.map { it.isExplicit } ?: emptyList() companion object { - fun getClassReference(appExpr: VcAppExpr?): ClassReferable? { - val argAppExpr = appExpr as? VcArgumentAppExpr ?: return null + fun getClassReference(appExpr: ArendAppExpr?): ClassReferable? { + val argAppExpr = appExpr as? ArendArgumentAppExpr ?: return null var ref = argAppExpr.longNameExpr?.longName?.referent if (ref == null) { val atomFieldsAcc = argAppExpr.atomFieldsAcc ?: return null diff --git a/src/main/kotlin/org/arend/psi/ext/ArendNsIdImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendNsIdImplMixin.kt new file mode 100644 index 000000000..4831dae1f --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendNsIdImplMixin.kt @@ -0,0 +1,16 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.naming.reference.Referable +import org.arend.term.Precedence +import org.arend.psi.ArendNsId +import org.arend.psi.ext.impl.ReferableAdapter + + +abstract class ArendNsIdImplMixin(node: ASTNode) : ArendCompositeElementImpl(node), ArendNsId { + override fun getOldReference(): Referable = refIdentifier.referent + + override fun getName() = defIdentifier?.referenceName + + override fun getPrecedence(): Precedence? = prec.let { ReferableAdapter.calcPrecedence(it) } +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcOnlyLevelExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendOnlyLevelExprImplMixin.kt similarity index 74% rename from src/main/kotlin/org/vclang/psi/ext/VcOnlyLevelExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendOnlyLevelExprImplMixin.kt index 327f83c96..99087ea91 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcOnlyLevelExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendOnlyLevelExprImplMixin.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractLevelExpressionVisitor -import org.vclang.psi.* +import org.arend.psi.ArendOnlyLevelExpr +import org.arend.term.abs.AbstractLevelExpressionVisitor -abstract class VcOnlyLevelExprImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcOnlyLevelExpr { +abstract class ArendOnlyLevelExprImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendOnlyLevelExpr { override fun getData() = this override fun

accept(visitor: AbstractLevelExpressionVisitor, params: P?): R = diff --git a/src/main/kotlin/org/vclang/psi/ext/VcPatternImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendPatternImplMixin.kt similarity index 74% rename from src/main/kotlin/org/vclang/psi/ext/VcPatternImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendPatternImplMixin.kt index 410bb0dba..a161fb2ab 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcPatternImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendPatternImplMixin.kt @@ -1,22 +1,22 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.NamedUnresolvedReference -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import org.vclang.psi.VcAtomPattern -import org.vclang.psi.VcAtomPatternOrPrefix -import org.vclang.psi.VcDefIdentifier +import org.arend.naming.reference.NamedUnresolvedReference +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.term.concrete.Concrete +import org.arend.psi.ArendAtomPattern +import org.arend.psi.ArendAtomPatternOrPrefix +import org.arend.psi.ArendDefIdentifier -abstract class VcPatternImplMixin(node: ASTNode) : VcSourceNodeImpl(node), Abstract.Pattern { +abstract class ArendPatternImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), Abstract.Pattern { override fun getData(): Any? = this - abstract fun getAtomPattern(): VcAtomPattern? + abstract fun getAtomPattern(): ArendAtomPattern? - abstract fun getDefIdentifier(): VcDefIdentifier? + abstract fun getDefIdentifier(): ArendDefIdentifier? - open fun getAtomPatternOrPrefixList(): List = emptyList() + open fun getAtomPatternOrPrefixList(): List = emptyList() override fun isUnnamed() = getAtomPattern()?.underscore != null diff --git a/src/main/kotlin/org/arend/psi/ext/ArendPiExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendPiExprImplMixin.kt new file mode 100644 index 000000000..2ecc8cadb --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendPiExprImplMixin.kt @@ -0,0 +1,14 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendPiExpr +import org.arend.psi.ArendTypeTele + +abstract class ArendPiExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendPiExpr, Abstract.ParametersHolder { + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitPi(this, typeTeleList, expr, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override fun getParameters(): List = typeTeleList +} diff --git a/src/main/kotlin/org/arend/psi/ext/ArendReferenceElement.kt b/src/main/kotlin/org/arend/psi/ext/ArendReferenceElement.kt new file mode 100644 index 000000000..0ae0d2e6f --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendReferenceElement.kt @@ -0,0 +1,6 @@ +package org.arend.psi.ext + +interface ArendReferenceElement : ArendCompositeElement { + val referenceNameElement: ArendCompositeElement? + val referenceName: String +} diff --git a/src/main/kotlin/org/arend/psi/ext/ArendSigmaExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendSigmaExprImplMixin.kt new file mode 100644 index 000000000..eb4949236 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/ArendSigmaExprImplMixin.kt @@ -0,0 +1,14 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendSigmaExpr +import org.arend.psi.ArendTypeTele + +abstract class ArendSigmaExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendSigmaExpr, Abstract.ParametersHolder { + override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = + visitor.visitSigma(this, typeTeleList, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) + + override fun getParameters(): List = typeTeleList +} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcStatCmdImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendStatCmdImplMixin.kt similarity index 55% rename from src/main/kotlin/org/vclang/psi/ext/VcStatCmdImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendStatCmdImplMixin.kt index ec30d9a82..2df2b7014 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcStatCmdImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendStatCmdImplMixin.kt @@ -1,17 +1,17 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.NamedUnresolvedReference -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.ChildNamespaceCommand -import com.jetbrains.jetpad.vclang.term.NamespaceCommand -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.group.ChildGroup -import org.vclang.psi.VcNsId -import org.vclang.psi.VcStatCmd -import org.vclang.psi.ancestors - -abstract class VcStatCmdImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcStatCmd, ChildNamespaceCommand { +import org.arend.naming.reference.NamedUnresolvedReference +import org.arend.naming.reference.Referable +import org.arend.term.ChildNamespaceCommand +import org.arend.term.NamespaceCommand +import org.arend.term.abs.Abstract +import org.arend.term.group.ChildGroup +import org.arend.psi.ArendNsId +import org.arend.psi.ArendStatCmd +import org.arend.psi.ancestors + +abstract class ArendStatCmdImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendStatCmd, ChildNamespaceCommand { override fun getKind(): NamespaceCommand.Kind { if (importKw != null) return NamespaceCommand.Kind.IMPORT if (openKw != null) return NamespaceCommand.Kind.OPEN @@ -25,7 +25,7 @@ abstract class VcStatCmdImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcSta return using == null || using.usingKw != null } - override fun getOpenedReferences(): List = nsUsing?.nsIdList ?: emptyList() + override fun getOpenedReferences(): List = nsUsing?.nsIdList ?: emptyList() override fun getHiddenReferences(): List = refIdentifierList.map { NamedUnresolvedReference(it, it.text) } diff --git a/src/main/kotlin/org/vclang/psi/ext/VcTeleImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendTeleImplMixin.kt similarity index 62% rename from src/main/kotlin/org/vclang/psi/ext/VcTeleImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendTeleImplMixin.kt index 9db9cdd29..6458e849f 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcTeleImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendTeleImplMixin.kt @@ -1,14 +1,14 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcFieldTele -import org.vclang.psi.VcNameTele -import org.vclang.psi.VcTypeTele +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.psi.ArendFieldTele +import org.arend.psi.ArendNameTele +import org.arend.psi.ArendTypeTele -abstract class VcNameTeleImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcNameTele { +abstract class ArendNameTeleImplMixin(node: ASTNode): ArendSourceNodeImpl(node), ArendNameTele { override fun getData() = this override fun isExplicit() = lbrace == null @@ -18,7 +18,7 @@ abstract class VcNameTeleImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcNam override fun getType() = expr } -abstract class VcTypeTeleImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcTypeTele { +abstract class ArendTypeTeleImplMixin(node: ASTNode): ArendSourceNodeImpl(node), ArendTypeTele { override fun getData() = this override fun isExplicit() = lbrace == null @@ -31,7 +31,7 @@ abstract class VcTypeTeleImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcTyp override fun getType(): Abstract.Expression? = typedExpr?.expr ?: literal ?: universeAtom } -abstract class VcFieldTeleImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcFieldTele { +abstract class ArendFieldTeleImplMixin(node: ASTNode): ArendSourceNodeImpl(node), ArendFieldTele { override fun getData() = this override fun isExplicit() = lbrace == null diff --git a/src/main/kotlin/org/vclang/psi/ext/VcTupleExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendTupleExprImplMixin.kt similarity index 53% rename from src/main/kotlin/org/vclang/psi/ext/VcTupleExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendTupleExprImplMixin.kt index 9b3fe1f9a..9fd989c7a 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcTupleExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendTupleExprImplMixin.kt @@ -1,19 +1,19 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcTupleExpr +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendTupleExpr -abstract class VcTupleExprImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcTupleExpr { +abstract class ArendTupleExprImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendTupleExpr { override fun getData() = this override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val exprs = exprList return when { - exprs.isEmpty() -> visitor.visitInferHole(this, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + exprs.isEmpty() -> visitor.visitInferHole(this, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) exprs.size == 1 -> exprs[0].accept(visitor, params) - else -> visitor.visitTyped(this, exprs[0], exprs[1], if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + else -> visitor.visitTyped(this, exprs[0], exprs[1], if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcTupleImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendTupleImplMixin.kt similarity index 56% rename from src/main/kotlin/org/vclang/psi/ext/VcTupleImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendTupleImplMixin.kt index bfb612fbb..a3eef5b70 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcTupleImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendTupleImplMixin.kt @@ -1,16 +1,16 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcTuple +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendTuple -abstract class VcTupleImplMixin(node: ASTNode) : VcExprImplMixin(node), VcTuple { +abstract class ArendTupleImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendTuple { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { val exprList = tupleExprList return if (exprList.size == 1) { exprList[0].accept(visitor, params) } else { - visitor.visitTuple(this, tupleExprList, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) + visitor.visitTuple(this, tupleExprList, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } } } \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcUniverseExprImplMixin.kt b/src/main/kotlin/org/arend/psi/ext/ArendUniverseExprImplMixin.kt similarity index 50% rename from src/main/kotlin/org/vclang/psi/ext/VcUniverseExprImplMixin.kt rename to src/main/kotlin/org/arend/psi/ext/ArendUniverseExprImplMixin.kt index 534eb58f3..eba32c8af 100644 --- a/src/main/kotlin/org/vclang/psi/ext/VcUniverseExprImplMixin.kt +++ b/src/main/kotlin/org/arend/psi/ext/ArendUniverseExprImplMixin.kt @@ -1,14 +1,14 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcUniverseExpr +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.psi.ArendUniverseExpr -abstract class VcUniverseExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcUniverseExpr { +abstract class ArendUniverseExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendUniverseExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { appExpr?.let { return it.accept(visitor, params) } - propKw?.let { return visitor.visitUniverse(it, 0, -1, null, null, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) } + propKw?.let { return visitor.visitUniverse(it, 0, -1, null, null, if (visitor.visitErrors()) org.arend.psi.ext.getErrorData(this) else null, params) } error("Incorrect expression: universeExpr") } } \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/Identifiers.kt b/src/main/kotlin/org/arend/psi/ext/Identifiers.kt new file mode 100644 index 000000000..a2d3d96ac --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/Identifiers.kt @@ -0,0 +1,108 @@ +package org.arend.psi.ext + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.search.LocalSearchScope +import com.intellij.psi.search.SearchScope +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.NamedUnresolvedReference +import org.arend.naming.reference.Referable +import org.arend.psi.* +import org.arend.resolving.ArendDefReferenceImpl +import org.arend.resolving.ArendPatternDefReferenceImpl +import org.arend.resolving.ArendReference +import org.arend.resolving.ArendReferenceImpl +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor + +abstract class ArendDefIdentifierImplMixin(node: ASTNode) : PsiReferableImpl(node), ArendDefIdentifier { + override val referenceNameElement + get() = this + + override val referenceName: String + get() = text + + override fun getName(): String = referenceName + + override fun textRepresentation(): String = referenceName + + override fun getReference(): ArendReference { + val parent = parent + return when (parent) { + is ArendPattern, is ArendAtomPatternOrPrefix -> ArendPatternDefReferenceImpl(this, parent is ArendPattern && !parent.atomPatternOrPrefixList.isEmpty()) + else -> ArendDefReferenceImpl(this) + } + } + + override fun getTypeClassReference(): ClassReferable? = + typeOf?.let { ReferableExtractVisitor().findClassReferable(it) } + + override fun getParameterType(params: List): Any? = ExpectedTypeVisitor.getParameterType(typeOf, params, name) + + override fun getTypeOf(): ArendExpr? { + val parent = parent + return when (parent) { + is ArendIdentifierOrUnknown -> { + val pparent = parent.parent + when (pparent) { + is ArendNameTele -> pparent.expr + is ArendTypedExpr -> pparent.expr + else -> null + } + } + is ArendFieldDefIdentifier -> (parent.parent as? ArendFieldTele)?.expr + is ArendLetClause -> parent.typeAnnotation?.expr + else -> null + } + } + + override val psiElementType: PsiElement? + get() { + val parent = parent + return when (parent) { + is ArendLetClause -> parent.typeAnnotation?.expr + is ArendIdentifierOrUnknown -> { + val pparent = parent.parent + when (pparent) { + is ArendNameTele -> pparent.expr + is ArendTypedExpr -> pparent.expr + else -> null + } + } + else -> null + } + } + + override fun getUseScope(): SearchScope { + if (parent != null && parent.parent is ArendTypedExpr && parent.parent.parent is ArendTypeTele) { + return LocalSearchScope(parent.parent.parent.parent) //Pi expression + } else if (parent != null && parent.parent is ArendFieldTele) { + return LocalSearchScope(parent.parent.parent) + } else if (parent != null && parent.parent is ArendNameTele) { + return LocalSearchScope(parent.parent.parent) + } else if (parent is ArendAtomPatternOrPrefix && parent.parent != null) { + var p = parent.parent.parent + while (p != null && p !is ArendClause) p = p.parent + if (p is ArendClause) return LocalSearchScope(p) // Pattern variables + } else if (parent is ArendPattern) { + if (parent.parent is ArendClause) return LocalSearchScope(parent.parent) + } + return super.getUseScope() + } +} + +abstract class ArendRefIdentifierImplMixin(node: ASTNode) : ArendSourceNodeImpl(node), ArendRefIdentifier { + override val referenceNameElement + get() = this + + override val referenceName: String + get() = text + + override fun getName(): String = referenceName + + override fun getData() = this + + override fun getReferent(): Referable = NamedUnresolvedReference(this, referenceName) + + override fun getReference(): ArendReference = ArendReferenceImpl(this) +} diff --git a/src/main/kotlin/org/arend/psi/ext/PsiConcreteReferable.kt b/src/main/kotlin/org/arend/psi/ext/PsiConcreteReferable.kt new file mode 100644 index 000000000..d76146bcf --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/PsiConcreteReferable.kt @@ -0,0 +1,10 @@ +package org.arend.psi.ext + +import org.arend.error.ErrorReporter +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.term.concrete.Concrete + + +interface PsiConcreteReferable: PsiLocatedReferable { + fun computeConcrete(referableConverter: ReferableConverter, errorReporter: ErrorReporter): Concrete.Definition? +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/PsiLocatedReferable.kt b/src/main/kotlin/org/arend/psi/ext/PsiLocatedReferable.kt similarity index 73% rename from src/main/kotlin/org/vclang/psi/ext/PsiLocatedReferable.kt rename to src/main/kotlin/org/arend/psi/ext/PsiLocatedReferable.kt index 304902c24..9984aa682 100644 --- a/src/main/kotlin/org/vclang/psi/ext/PsiLocatedReferable.kt +++ b/src/main/kotlin/org/arend/psi/ext/PsiLocatedReferable.kt @@ -1,11 +1,11 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.openapi.application.runReadAction -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import org.vclang.psi.VcFile -import org.vclang.psi.ancestors -import org.vclang.resolving.DataLocatedReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.psi.ArendFile +import org.arend.psi.ancestors +import org.arend.resolving.DataLocatedReferable interface PsiLocatedReferable : LocatedReferable, PsiReferable { @@ -21,7 +21,7 @@ interface PsiLocatedReferable : LocatedReferable, PsiReferable { private fun PsiLocatedReferable.getFullName(builder: StringBuilder) { val parent = parent?.ancestors?.filterIsInstance()?.firstOrNull() - if (!(parent == null || parent is VcFile)) { + if (!(parent == null || parent is ArendFile)) { parent.getFullName(builder) builder.append('.') } diff --git a/src/main/kotlin/org/vclang/psi/ext/PsiReferable.kt b/src/main/kotlin/org/arend/psi/ext/PsiReferable.kt similarity index 58% rename from src/main/kotlin/org/vclang/psi/ext/PsiReferable.kt rename to src/main/kotlin/org/arend/psi/ext/PsiReferable.kt index fb22568a0..889f91982 100644 --- a/src/main/kotlin/org/vclang/psi/ext/PsiReferable.kt +++ b/src/main/kotlin/org/arend/psi/ext/PsiReferable.kt @@ -1,36 +1,36 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode import com.intellij.navigation.ItemPresentation import com.intellij.psi.* import com.intellij.psi.stubs.IStubElementType import com.intellij.psi.stubs.StubElement -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import org.vclang.navigation.getPresentation -import org.vclang.psi.VcDefIdentifier -import org.vclang.psi.VcPsiFactory -import org.vclang.psi.childOfType -import org.vclang.psi.stubs.VcNamedStub - -interface PsiReferable : VcCompositeElement, PsiNameIdentifierOwner, NavigatablePsiElement, TypedReferable { +import org.arend.module.ModulePath +import org.arend.naming.reference.ModuleReferable +import org.arend.naming.reference.TypedReferable +import org.arend.navigation.getPresentation +import org.arend.psi.ArendDefIdentifier +import org.arend.psi.ArendPsiFactory +import org.arend.psi.childOfType +import org.arend.psi.stubs.ArendNamedStub + +interface PsiReferable : ArendCompositeElement, PsiNameIdentifierOwner, NavigatablePsiElement, TypedReferable { val psiElementType: PsiElement? get() = null } class PsiModuleReferable(val modules: List, val modulePath: ModulePath): ModuleReferable(modulePath) -abstract class PsiReferableImpl(node: ASTNode) : VcCompositeElementImpl(node), PsiReferable { +abstract class PsiReferableImpl(node: ASTNode) : ArendCompositeElementImpl(node), PsiReferable { - override fun getNameIdentifier(): VcCompositeElement? = childOfType() + override fun getNameIdentifier(): ArendCompositeElement? = childOfType() override fun getName(): String? = nameIdentifier?.text override fun textRepresentation(): String = name ?: "_" override fun setName(name: String): PsiElement? { - nameIdentifier?.replace(VcPsiFactory(project).createDefIdentifier(name)) + nameIdentifier?.replace(ArendPsiFactory(project).createDefIdentifier(name)) return this } @@ -41,21 +41,21 @@ abstract class PsiReferableImpl(node: ASTNode) : VcCompositeElementImpl(node), P override fun getPresentation(): ItemPresentation = getPresentation(this) } -abstract class PsiStubbedReferableImpl : VcStubbedElementImpl, PsiReferable -where StubT : VcNamedStub, StubT : StubElement<*> { +abstract class PsiStubbedReferableImpl : ArendStubbedElementImpl, PsiReferable +where StubT : ArendNamedStub, StubT : StubElement<*> { constructor(node: ASTNode) : super(node) constructor(stub: StubT, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - override fun getNameIdentifier(): VcDefIdentifier? = childOfType() + override fun getNameIdentifier(): ArendDefIdentifier? = childOfType() override fun getName(): String? = stub?.name ?: nameIdentifier?.referenceName override fun textRepresentation(): String = name ?: "_" override fun setName(name: String): PsiElement? { - nameIdentifier?.replace(VcPsiFactory(project).createDefIdentifier(name)) + nameIdentifier?.replace(ArendPsiFactory(project).createDefIdentifier(name)) return this } diff --git a/src/main/kotlin/org/vclang/psi/ext/Universes.kt b/src/main/kotlin/org/arend/psi/ext/Universes.kt similarity index 70% rename from src/main/kotlin/org/vclang/psi/ext/Universes.kt rename to src/main/kotlin/org/arend/psi/ext/Universes.kt index cecbbf27b..7a27c681b 100644 --- a/src/main/kotlin/org/vclang/psi/ext/Universes.kt +++ b/src/main/kotlin/org/arend/psi/ext/Universes.kt @@ -1,18 +1,18 @@ -package org.vclang.psi.ext +package org.arend.psi.ext import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement -import com.jetbrains.jetpad.vclang.term.Fixity -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.* +import org.arend.psi.* +import org.arend.term.Fixity +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor private fun

acceptSet(data: Any, setElem: PsiElement, pLevel: Abstract.LevelExpression?, visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitUniverse(data, setElem.text.substring("\\Set".length).toIntOrNull(), 0, pLevel, null, if (visitor.visitErrors() && setElem is VcCompositeElement) org.vclang.psi.ext.getErrorData(setElem) else null, params) + visitor.visitUniverse(data, setElem.text.substring("\\Set".length).toIntOrNull(), 0, pLevel, null, if (visitor.visitErrors() && setElem is ArendCompositeElement) org.arend.psi.ext.getErrorData(setElem) else null, params) private fun

acceptUniverse(data: Any, universeElem: PsiElement, pLevel: Abstract.LevelExpression?, hLevel: Abstract.LevelExpression?, visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitUniverse(data, universeElem.text.substring("\\Type".length).toIntOrNull(), null, pLevel, hLevel, if (visitor.visitErrors() && universeElem is VcCompositeElement) org.vclang.psi.ext.getErrorData(universeElem) else null, params) + visitor.visitUniverse(data, universeElem.text.substring("\\Type".length).toIntOrNull(), null, pLevel, hLevel, if (visitor.visitErrors() && universeElem is ArendCompositeElement) org.arend.psi.ext.getErrorData(universeElem) else null, params) private fun

acceptTruncated(data: Any, truncatedElem: PsiElement, pLevel: Abstract.LevelExpression?, visitor: AbstractExpressionVisitor, params: P?): R { val uniText = truncatedElem.text @@ -23,31 +23,31 @@ private fun

acceptTruncated(data: Any, truncatedElem: PsiEl else -> null } val pLevelNum = if (hLevelNum != null) uniText.substring(index + "-Type".length).toIntOrNull() else null - return visitor.visitUniverse(data, pLevelNum, hLevelNum, pLevel, null, if (visitor.visitErrors() && truncatedElem is VcCompositeElement) org.vclang.psi.ext.getErrorData(truncatedElem) else null, params) + return visitor.visitUniverse(data, pLevelNum, hLevelNum, pLevel, null, if (visitor.visitErrors() && truncatedElem is ArendCompositeElement) org.arend.psi.ext.getErrorData(truncatedElem) else null, params) } -abstract class VcSetUniverseAppExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcSetUniverseAppExpr { +abstract class ArendSetUniverseAppExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendSetUniverseAppExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = acceptSet(this, set, atomLevelExpr, visitor, params) } -abstract class VcTruncatedUniverseAppExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcTruncatedUniverseAppExpr { +abstract class ArendTruncatedUniverseAppExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendTruncatedUniverseAppExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = acceptTruncated(this, truncatedUniverse, atomLevelExpr, visitor, params) } -abstract class VcUniverseAppExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcUniverseAppExpr { +abstract class ArendUniverseAppExprImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendUniverseAppExpr { override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = acceptUniverse(this, universe, atomLevelExprList.getOrNull(0), atomLevelExprList.getOrNull(1), visitor, params) } -abstract class VcUniverseAtomImplMixin(node: ASTNode) : VcExprImplMixin(node), VcUniverseAtom { +abstract class ArendUniverseAtomImplMixin(node: ASTNode) : ArendExprImplMixin(node), ArendUniverseAtom { override fun isExplicit(): Boolean = true override fun getFixity(): Fixity = Fixity.NONFIX - override fun getExpression(): VcExpr = this + override fun getExpression(): ArendExpr = this override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R { set?.let { return acceptSet(this, it, null, visitor, params) } diff --git a/src/main/kotlin/org/arend/psi/ext/impl/ArendDefModuleMixin.kt b/src/main/kotlin/org/arend/psi/ext/impl/ArendDefModuleMixin.kt new file mode 100644 index 000000000..98fd52812 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/impl/ArendDefModuleMixin.kt @@ -0,0 +1,35 @@ +package org.arend.psi.ext.impl + +import com.intellij.lang.ASTNode +import com.intellij.psi.stubs.IStubElementType +import org.arend.term.group.ChildGroup +import org.arend.term.group.Group +import org.arend.psi.ArendConstructor +import org.arend.psi.ArendDefModule +import org.arend.psi.ArendStatCmd +import org.arend.psi.ancestors +import org.arend.psi.stubs.ArendDefModuleStub +import org.arend.typing.ExpectedTypeVisitor + + +abstract class ArendDefModuleMixin : ReferableAdapter, ArendDefModule { + constructor(node: ASTNode) : super(node) + + constructor(stub: ArendDefModuleStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override fun getParentGroup(): ChildGroup? = parent.ancestors.filterIsInstance().firstOrNull() + + override fun getReferable() = this + + override fun getSubgroups(): List = where?.statementList?.mapNotNull { it.definition ?: it.defModule as ChildGroup? } ?: emptyList() + + override fun getNamespaceCommands(): List = where?.statementList?.mapNotNull { it.statCmd } ?: emptyList() + + override fun getConstructors(): List = emptyList() + + override fun getDynamicSubgroups(): List = emptyList() + + override fun getFields(): List = emptyList() + + override fun getParameterType(params: List) = ExpectedTypeVisitor.TooManyArgumentsError(textRepresentation(), 0) +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/ClassDefinition.kt b/src/main/kotlin/org/arend/psi/ext/impl/ClassDefinition.kt similarity index 69% rename from src/main/kotlin/org/vclang/psi/ext/impl/ClassDefinition.kt rename to src/main/kotlin/org/arend/psi/ext/impl/ClassDefinition.kt index 24474a026..d7b548a19 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/ClassDefinition.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/ClassDefinition.kt @@ -1,24 +1,24 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.* -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractDefinitionVisitor -import com.jetbrains.jetpad.vclang.term.group.ChildGroup -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcDefClassStub -import org.vclang.typing.ExpectedTypeVisitor +import org.arend.naming.reference.* +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.naming.scope.ScopeFactory +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractDefinitionVisitor +import org.arend.term.group.ChildGroup +import org.arend.term.group.Group +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendDefClassStub +import org.arend.typing.ExpectedTypeVisitor import javax.swing.Icon -abstract class ClassDefinitionAdapter : DefinitionAdapter, VcDefClass, Abstract.ClassDefinition { +abstract class ClassDefinitionAdapter : DefinitionAdapter, ArendDefClass, Abstract.ClassDefinition { constructor(node: ASTNode) : super(node) - constructor(stub: VcDefClassStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + constructor(stub: ArendDefClassStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) override fun getReferable() = this @@ -35,7 +35,7 @@ abstract class ClassDefinitionAdapter : DefinitionAdapter, VcDef override fun getDynamicSubgroups(): List = classStatList.mapNotNull { it.definition ?: it.defModule as ChildGroup? } - private inline val parameterFields: List get() = fieldTeleList.flatMap { it.fieldDefIdentifierList } + private inline val parameterFields: List get() = fieldTeleList.flatMap { it.fieldDefIdentifierList } override fun getFields(): List = (parameterFields as List ) + @@ -52,11 +52,11 @@ abstract class ClassDefinitionAdapter : DefinitionAdapter, VcDef override fun getParameters(): List = fieldTeleList - override fun getSuperClasses(): List = longNameList + override fun getSuperClasses(): List = longNameList override fun getClassFields(): List = classStatList.mapNotNull { it.classField } - override fun getClassFieldImpls(): List = classStatList.mapNotNull { it.classImplement } + override fun getClassFieldImpls(): List = classStatList.mapNotNull { it.classImplement } override fun getArgumentsExplicitness() = emptyList() @@ -69,7 +69,7 @@ abstract class ClassDefinitionAdapter : DefinitionAdapter, VcDef override fun getUnresolvedUnderlyingReference(): Reference? = underlyingClass override fun getCoercingFunctions(): List = - (dynamicSubgroups + subgroups).mapNotNull { if (it is VcDefFunction && it.coerceKw != null) it else null } + (dynamicSubgroups + subgroups).mapNotNull { if (it is ArendDefFunction && it.coerceKw != null) it else null } override fun getParameterType(params: List): Any? { val fields = ClassReferable.Helper.getNotImplementedFields(this) @@ -93,5 +93,5 @@ abstract class ClassDefinitionAdapter : DefinitionAdapter, VcDef override fun accept(visitor: AbstractDefinitionVisitor): R = visitor.visitClass(this) - override fun getIcon(flags: Int): Icon = VcIcons.CLASS_DEFINITION + override fun getIcon(flags: Int): Icon = ArendIcons.CLASS_DEFINITION } diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/ClassField.kt b/src/main/kotlin/org/arend/psi/ext/impl/ClassField.kt similarity index 56% rename from src/main/kotlin/org/vclang/psi/ext/impl/ClassField.kt rename to src/main/kotlin/org/arend/psi/ext/impl/ClassField.kt index 133fbec00..28255f0a2 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/ClassField.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/ClassField.kt @@ -1,21 +1,21 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcClassFieldStub -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendClassFieldStub +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor import javax.swing.Icon -abstract class ClassFieldAdapter : ReferableAdapter, VcClassField { +abstract class ClassFieldAdapter : ReferableAdapter, ArendClassField { constructor(node: ASTNode) : super(node) - constructor(stub: VcClassFieldStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + constructor(stub: ArendClassFieldStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) override fun getKind() = GlobalReferable.Kind.FIELD @@ -23,13 +23,13 @@ abstract class ClassFieldAdapter : ReferableAdapter, VcClassFi override fun getReferable() = this - override fun getParameters(): List = typeTeleList + override fun getParameters(): List = typeTeleList - override fun getResultType(): VcExpr? = expr + override fun getResultType(): ArendExpr? = expr override fun isVisible() = true - override fun getIcon(flags: Int): Icon = VcIcons.CLASS_FIELD + override fun getIcon(flags: Int): Icon = ArendIcons.CLASS_FIELD override fun isExplicitField() = true @@ -41,7 +41,7 @@ abstract class ClassFieldAdapter : ReferableAdapter, VcClassFi override fun getParameterType(params: List) = when { params[0] -> ExpectedTypeVisitor.getParameterType(parameters, resultType, params, textRepresentation()) - params.size == 1 -> ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) } + params.size == 1 -> ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) } else -> ExpectedTypeVisitor.getParameterType(parameters, resultType, params.drop(1), textRepresentation()) } diff --git a/src/main/kotlin/org/arend/psi/ext/impl/ClassFieldImpl.kt b/src/main/kotlin/org/arend/psi/ext/impl/ClassFieldImpl.kt new file mode 100644 index 000000000..214ed8a8e --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/impl/ClassFieldImpl.kt @@ -0,0 +1,47 @@ +package org.arend.psi.ext.impl + +import com.intellij.lang.ASTNode +import com.intellij.psi.stubs.IStubElementType +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.TypedReferable +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.ArendIcons +import org.arend.psi.ArendClassImplement +import org.arend.psi.ArendCoClause +import org.arend.psi.ArendNameTele +import org.arend.psi.ext.PsiStubbedReferableImpl +import org.arend.psi.stubs.ArendClassImplementStub + +abstract class ClassFieldImplAdapter : PsiStubbedReferableImpl, ArendClassImplement { + constructor(node: ASTNode) : super(node) + + constructor(stub: ArendClassImplementStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override fun getData() = this + + override fun getName() = longName.refIdentifierList.lastOrNull()?.referenceName + + override fun getImplementedField() = longName.referent + + fun getResolvedImplementedField(): Referable? { + val longName = longName + return ExpressionResolveNameVisitor.resolve(longName.referent, longName.scope) + // return longName.reference?.resolve() + } + + override fun getParameters(): List = nameTeleList + + override fun getImplementation() = expr + + override fun getClassFieldImpls(): List = coClauseList + + override fun getArgumentsExplicitness() = emptyList() + + override fun getClassReference(): ClassReferable? { + val resolved = getResolvedImplementedField() + return resolved as? ClassReferable ?: (resolved as? TypedReferable)?.typeClassReference + } + + override fun getIcon(flags: Int) = ArendIcons.IMPLEMENTATION +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldSyn.kt b/src/main/kotlin/org/arend/psi/ext/impl/ClassFieldSyn.kt similarity index 57% rename from src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldSyn.kt rename to src/main/kotlin/org/arend/psi/ext/impl/ClassFieldSyn.kt index fb4ad6856..546f33d54 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldSyn.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/ClassFieldSyn.kt @@ -1,22 +1,22 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.ClassFieldImplScope -import org.vclang.VcIcons -import org.vclang.psi.VcClassFieldSyn -import org.vclang.psi.stubs.VcClassFieldSynStub +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.TypedReferable +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.naming.scope.ClassFieldImplScope +import org.arend.ArendIcons +import org.arend.psi.ArendClassFieldSyn +import org.arend.psi.stubs.ArendClassFieldSynStub import javax.swing.Icon -abstract class ClassFieldSynAdapter : ReferableAdapter, VcClassFieldSyn { +abstract class ClassFieldSynAdapter : ReferableAdapter, ArendClassFieldSyn { constructor(node: ASTNode) : super(node) - constructor(stub: VcClassFieldSynStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + constructor(stub: ArendClassFieldSynStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) override fun getKind() = GlobalReferable.Kind.FIELD @@ -28,7 +28,7 @@ abstract class ClassFieldSynAdapter : ReferableAdapter, VcC override fun isVisible() = true - override fun getIcon(flags: Int): Icon = VcIcons.CLASS_FIELD + override fun getIcon(flags: Int): Icon = ArendIcons.CLASS_FIELD override fun getUnderlyingReference() = (parent as? ClassReferable)?.underlyingReference?.let { classRef -> ExpressionResolveNameVisitor.resolve(unresolvedUnderlyingReference.referent, ClassFieldImplScope(classRef, true)) as? LocatedReferable } diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/ClassInstance.kt b/src/main/kotlin/org/arend/psi/ext/impl/ClassInstance.kt similarity index 51% rename from src/main/kotlin/org/vclang/psi/ext/impl/ClassInstance.kt rename to src/main/kotlin/org/arend/psi/ext/impl/ClassInstance.kt index a0cb9a915..b3f2f98e9 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/ClassInstance.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/ClassInstance.kt @@ -1,31 +1,31 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractDefinitionVisitor -import org.vclang.VcIcons -import org.vclang.psi.VcArgumentAppExpr -import org.vclang.psi.VcCoClause -import org.vclang.psi.VcDefInstance -import org.vclang.psi.VcNameTele -import org.vclang.psi.stubs.VcDefInstanceStub -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor +import org.arend.naming.reference.ClassReferable +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractDefinitionVisitor +import org.arend.ArendIcons +import org.arend.psi.ArendArgumentAppExpr +import org.arend.psi.ArendCoClause +import org.arend.psi.ArendDefInstance +import org.arend.psi.ArendNameTele +import org.arend.psi.stubs.ArendDefInstanceStub +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor import javax.swing.Icon -abstract class InstanceAdapter : DefinitionAdapter, VcDefInstance, Abstract.InstanceDefinition { +abstract class InstanceAdapter : DefinitionAdapter, ArendDefInstance, Abstract.InstanceDefinition { constructor(node: ASTNode) : super(node) - constructor(stub: VcDefInstanceStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + constructor(stub: ArendDefInstanceStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - override fun getParameters(): List = nameTeleList + override fun getParameters(): List = nameTeleList - override fun getResultType(): VcArgumentAppExpr? = argumentAppExpr + override fun getResultType(): ArendArgumentAppExpr? = argumentAppExpr - override fun getClassFieldImpls(): List = coClauses?.coClauseList ?: emptyList() + override fun getClassFieldImpls(): List = coClauses?.coClauseList ?: emptyList() override fun getArgumentsExplicitness() = argumentAppExpr?.argumentList?.map { it.isExplicit } ?: emptyList() @@ -45,7 +45,7 @@ abstract class InstanceAdapter : DefinitionAdapter, VcDefInst return ReferableExtractVisitor().findClassReferable(type) } - override fun getIcon(flags: Int): Icon = VcIcons.CLASS_INSTANCE + override fun getIcon(flags: Int): Icon = ArendIcons.CLASS_INSTANCE override val psiElementType: PsiElement? get() = resultType diff --git a/src/main/kotlin/org/arend/psi/ext/impl/Constructor.kt b/src/main/kotlin/org/arend/psi/ext/impl/Constructor.kt new file mode 100644 index 000000000..ad10836df --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/impl/Constructor.kt @@ -0,0 +1,53 @@ +package org.arend.psi.ext.impl + +import com.intellij.lang.ASTNode +import com.intellij.psi.stubs.IStubElementType +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.term.Precedence +import org.arend.term.abs.Abstract +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendConstructorStub +import org.arend.typing.ExpectedTypeVisitor +import javax.swing.Icon + +abstract class ConstructorAdapter : ReferableAdapter, ArendConstructor { + constructor(node: ASTNode) : super(node) + + constructor(stub: ArendConstructorStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override fun getKind() = GlobalReferable.Kind.CONSTRUCTOR + + override fun getData() = this + + override fun getPatterns(): List = emptyList() + + override fun getConstructors(): List = listOf(this) + + override fun getPrecedence(): Precedence = calcPrecedence(prec) + + override fun getReferable(): LocatedReferable = this + + override fun getParameters(): List = typeTeleList + + override fun getEliminatedExpressions(): List = elim?.refIdentifierList ?: emptyList() + + override fun getClauses(): List = clauseList + + override fun isVisible(): Boolean = true + + override fun getResultType() = expr + + override fun getParameterType(params: List): Any? { + val parameters = (ancestors.filterIsInstance().firstOrNull()?.typeTeleList?.map { ExpectedTypeVisitor.ParameterImpl(false, it.referableList, it.type) } ?: emptyList()) + parameters + return ExpectedTypeVisitor.getParameterType(parameters, ExpectedTypeVisitor.TooManyArgumentsError(textRepresentation(), parameters.sumBy { it.referableList.size }), params, textRepresentation()) + } + + override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) }) + + override fun getIcon(flags: Int): Icon = ArendIcons.CONSTRUCTOR + + override val psiElementType: ArendDefIdentifier? + get() = ancestors.filterIsInstance().firstOrNull()?.defIdentifier +} diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/DataDefinition.kt b/src/main/kotlin/org/arend/psi/ext/impl/DataDefinition.kt similarity index 55% rename from src/main/kotlin/org/vclang/psi/ext/impl/DataDefinition.kt rename to src/main/kotlin/org/arend/psi/ext/impl/DataDefinition.kt index c575013bd..83e90bb01 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/DataDefinition.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/DataDefinition.kt @@ -1,35 +1,35 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.PsiElement import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractDefinitionVisitor -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcDefDataStub -import org.vclang.typing.ExpectedTypeVisitor +import org.arend.naming.reference.LocatedReferable +import org.arend.term.Precedence +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractDefinitionVisitor +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendDefDataStub +import org.arend.typing.ExpectedTypeVisitor import javax.swing.Icon -abstract class DataDefinitionAdapter : DefinitionAdapter, VcDefData, Abstract.DataDefinition { +abstract class DataDefinitionAdapter : DefinitionAdapter, ArendDefData, Abstract.DataDefinition { constructor(node: ASTNode) : super(node) - constructor(stub: VcDefDataStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + constructor(stub: ArendDefDataStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - override fun getConstructors(): List { + override fun getConstructors(): List { val body = dataBody ?: return emptyList() return body.constructorClauseList.flatMap { it.constructorList } + body.constructorList } - override fun getParameters(): List = typeTeleList + override fun getParameters(): List = typeTeleList - override fun getEliminatedExpressions(): List? = dataBody?.elim?.refIdentifierList + override fun getEliminatedExpressions(): List? = dataBody?.elim?.refIdentifierList override fun isTruncated(): Boolean = truncatedKw != null - override fun getUniverse(): VcExpr? = universeExpr + override fun getUniverse(): ArendExpr? = universeExpr override fun getClauses(): List { val body = dataBody ?: return emptyList() @@ -40,7 +40,7 @@ abstract class DataDefinitionAdapter : DefinitionAdapter, VcDefDa override fun getCoercingFunctions(): List = where?.statementList?.mapNotNull { val def = it.definition - if (def is VcDefFunction && def.coerceKw != null) def else null + if (def is ArendDefFunction && def.coerceKw != null) def else null } ?: emptyList() override fun getParameterType(params: List) = @@ -50,7 +50,7 @@ abstract class DataDefinitionAdapter : DefinitionAdapter, VcDefDa override fun accept(visitor: AbstractDefinitionVisitor): R = visitor.visitData(this) - override fun getIcon(flags: Int): Icon = VcIcons.DATA_DEFINITION + override fun getIcon(flags: Int): Icon = ArendIcons.DATA_DEFINITION override val psiElementType: PsiElement? get() = universe diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/Definition.kt b/src/main/kotlin/org/arend/psi/ext/impl/Definition.kt similarity index 60% rename from src/main/kotlin/org/vclang/psi/ext/impl/Definition.kt rename to src/main/kotlin/org/arend/psi/ext/impl/Definition.kt index 7c358b458..72cb78e11 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/Definition.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/Definition.kt @@ -1,23 +1,23 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.stubs.IStubElementType import com.intellij.psi.stubs.StubElement -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.ConcreteBuilder -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import com.jetbrains.jetpad.vclang.term.group.ChildGroup -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.psi.* -import org.vclang.psi.ext.PsiConcreteReferable -import org.vclang.psi.stubs.VcNamedStub +import org.arend.error.ErrorReporter +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.scope.Scope +import org.arend.term.abs.Abstract +import org.arend.term.abs.ConcreteBuilder +import org.arend.term.concrete.Concrete +import org.arend.term.group.ChildGroup +import org.arend.term.group.Group +import org.arend.psi.* +import org.arend.psi.ext.PsiConcreteReferable +import org.arend.psi.stubs.ArendNamedStub abstract class DefinitionAdapter : ReferableAdapter, ChildGroup, Abstract.Definition, PsiConcreteReferable -where StubT : VcNamedStub, StubT : StubElement<*> { +where StubT : ArendNamedStub, StubT : StubElement<*> { constructor(node: ASTNode) : super(node) constructor(stub: StubT, nodeType: IStubElementType<*, *>) : super(stub, nodeType) @@ -25,7 +25,7 @@ where StubT : VcNamedStub, StubT : StubElement<*> { override val scope: Scope get() = groupScope - open fun getWhere(): VcWhere? = null + open fun getWhere(): ArendWhere? = null override fun computeConcrete(referableConverter: ReferableConverter, errorReporter: ErrorReporter): Concrete.Definition? = ConcreteBuilder.convert(referableConverter, this, errorReporter) @@ -36,9 +36,9 @@ where StubT : VcNamedStub, StubT : StubElement<*> { override fun getSubgroups(): List = getWhere()?.statementList?.mapNotNull { it.definition ?: it.defModule as ChildGroup? } ?: emptyList() - override fun getNamespaceCommands(): List = getWhere()?.statementList?.mapNotNull { it.statCmd } ?: emptyList() + override fun getNamespaceCommands(): List = getWhere()?.statementList?.mapNotNull { it.statCmd } ?: emptyList() - override fun getConstructors(): List = emptyList() + override fun getConstructors(): List = emptyList() override fun getDynamicSubgroups(): List = emptyList() @@ -46,7 +46,7 @@ where StubT : VcNamedStub, StubT : StubElement<*> { override fun getEnclosingClass(): ClassReferable? { var parent = parentGroup - while (parent != null && parent !is VcFile) { + while (parent != null && parent !is ArendFile) { val ref = parent.referable if (ref is ClassReferable) { for (subgroup in parent.dynamicSubgroups) { diff --git a/src/main/kotlin/org/arend/psi/ext/impl/FieldDefIdentifierAdapter.kt b/src/main/kotlin/org/arend/psi/ext/impl/FieldDefIdentifierAdapter.kt new file mode 100644 index 000000000..0623c15d9 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/impl/FieldDefIdentifierAdapter.kt @@ -0,0 +1,65 @@ +package org.arend.psi.ext.impl + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.stubs.IStubElementType +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.term.Precedence +import org.arend.term.abs.Abstract +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendClassFieldParamStub +import org.arend.resolving.ArendDefReferenceImpl +import org.arend.resolving.ArendReference +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor + +abstract class FieldDefIdentifierAdapter : ReferableAdapter, ArendFieldDefIdentifier { + constructor(node: ASTNode) : super(node) + + constructor(stub: ArendClassFieldParamStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override fun getKind() = GlobalReferable.Kind.FIELD + + override val referenceNameElement + get() = this + + override val referenceName: String + get() = name + + override fun getName(): String = stub?.name ?: text + + override fun textRepresentation(): String = name + + override fun getReference(): ArendReference = ArendDefReferenceImpl(this) + + override fun getPrecedence(): Precedence = Precedence.DEFAULT + + override fun getReferable() = this + + override fun isVisible() = false + + override fun isExplicitField() = (parent as? ArendFieldTele)?.isExplicit ?: true + + override fun getTypeClassReference(): ClassReferable? = + resultType?.let { ReferableExtractVisitor().findClassReferable(it) } + + override fun getParameterType(params: List) = + when { + params[0] -> ExpectedTypeVisitor.getParameterType(resultType, params, name) + params.size == 1 -> ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) } + else -> ExpectedTypeVisitor.getParameterType(resultType, params.drop(1), name) + } + + override fun getTypeOf() = resultType + + override fun getParameters(): List = emptyList() + + override fun getResultType(): ArendExpr? = (parent as? ArendFieldTele)?.expr + + override fun getIcon(flags: Int) = ArendIcons.CLASS_FIELD + + override val psiElementType: PsiElement? + get() = (parent as? ArendFieldTele)?.expr +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/psi/ext/impl/FunctionDefinition.kt b/src/main/kotlin/org/arend/psi/ext/impl/FunctionDefinition.kt new file mode 100644 index 000000000..e4cc9503a --- /dev/null +++ b/src/main/kotlin/org/arend/psi/ext/impl/FunctionDefinition.kt @@ -0,0 +1,59 @@ +package org.arend.psi.ext.impl + +import com.intellij.lang.ASTNode +import com.intellij.psi.PsiElement +import com.intellij.psi.stubs.IStubElementType +import org.arend.naming.reference.ClassReferable +import org.arend.term.Precedence +import org.arend.term.abs.AbstractDefinitionVisitor +import org.arend.ArendIcons +import org.arend.psi.* +import org.arend.psi.stubs.ArendDefFunctionStub +import org.arend.typing.ExpectedTypeVisitor +import org.arend.typing.ReferableExtractVisitor +import javax.swing.Icon + +abstract class FunctionDefinitionAdapter : DefinitionAdapter, ArendDefFunction { + constructor(node: ASTNode) : super(node) + + constructor(stub: ArendDefFunctionStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) + + override fun getParameters(): List = nameTeleList + + override fun getResultType(): ArendExpr? = expr + + override fun getTerm(): ArendExpr? = functionBody?.expr + + override fun getEliminatedExpressions(): List = functionBody?.elim?.refIdentifierList ?: emptyList() + + override fun getClauses(): List = functionBody?.functionClauses?.clauseList ?: emptyList() + + override fun getPrecedence(): Precedence = calcPrecedence(prec) + + override fun isCoerce() = coerceKw != null + + override fun accept(visitor: AbstractDefinitionVisitor): R = visitor.visitFunction(this) + + override fun getIcon(flags: Int): Icon = ArendIcons.FUNCTION_DEFINITION + + override fun getTypeClassReference(): ClassReferable? { + val type = resultType ?: return null + return if (parameters.all { !it.isExplicit }) ReferableExtractVisitor().findClassReferable(type) else null + } + + override fun getParameterType(params: List) = ExpectedTypeVisitor.getParameterType(parameters, resultType, params, textRepresentation()) + + override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, resultType) + + override fun getClassReference(): ClassReferable? { + val type = resultType ?: return null + return ReferableExtractVisitor().findClassReferable(type) + } + + override fun getClassFieldImpls(): List = functionBody?.coClauses?.coClauseList ?: emptyList() + + override fun getArgumentsExplicitness() = (resultType as? ArendNewExpr)?.argumentAppExpr?.argumentList?.map { it.isExplicit } ?: emptyList() + + override val psiElementType: PsiElement? + get() = resultType +} diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/Referable.kt b/src/main/kotlin/org/arend/psi/ext/impl/Referable.kt similarity index 66% rename from src/main/kotlin/org/vclang/psi/ext/impl/Referable.kt rename to src/main/kotlin/org/arend/psi/ext/impl/Referable.kt index 1a077ec9a..608d0a20b 100644 --- a/src/main/kotlin/org/vclang/psi/ext/impl/Referable.kt +++ b/src/main/kotlin/org/arend/psi/ext/impl/Referable.kt @@ -1,30 +1,30 @@ -package org.vclang.psi.ext.impl +package org.arend.psi.ext.impl import com.intellij.lang.ASTNode import com.intellij.psi.stubs.IStubElementType import com.intellij.psi.stubs.StubElement -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.Reference -import com.jetbrains.jetpad.vclang.term.Precedence -import org.vclang.psi.VcDefinition -import org.vclang.psi.VcFile -import org.vclang.psi.VcPrec -import org.vclang.psi.ancestors -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.PsiStubbedReferableImpl -import org.vclang.psi.stubs.VcNamedStub +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.Reference +import org.arend.term.Precedence +import org.arend.psi.ArendDefinition +import org.arend.psi.ArendFile +import org.arend.psi.ArendPrec +import org.arend.psi.ancestors +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiStubbedReferableImpl +import org.arend.psi.stubs.ArendNamedStub abstract class ReferableAdapter : PsiStubbedReferableImpl, PsiLocatedReferable -where StubT : VcNamedStub, StubT : StubElement<*> { +where StubT : ArendNamedStub, StubT : StubElement<*> { constructor(node: ASTNode) : super(node) constructor(stub: StubT, nodeType: IStubElementType<*, *>) : super(stub, nodeType) override fun getPrecedence(): Precedence = Precedence.DEFAULT - override fun getTypecheckable(): PsiLocatedReferable = ancestors.filterIsInstance().firstOrNull() ?: this + override fun getTypecheckable(): PsiLocatedReferable = ancestors.filterIsInstance().firstOrNull() ?: this - override fun getLocation() = (containingFile as? VcFile)?.modulePath + override fun getLocation() = (containingFile as? ArendFile)?.modulePath override fun getLocatedReferableParent() = parent.ancestors.filterIsInstance().firstOrNull() @@ -33,7 +33,7 @@ where StubT : VcNamedStub, StubT : StubElement<*> { override fun getUnresolvedUnderlyingReference(): Reference? = null companion object { - fun calcPrecedence(prec: VcPrec?): Precedence { + fun calcPrecedence(prec: ArendPrec?): Precedence { if (prec == null) return Precedence.DEFAULT val assoc = when { prec.rightAssocKw != null || prec.infixRightKw != null -> Precedence.Associativity.RIGHT_ASSOC diff --git a/src/main/kotlin/org/vclang/psi/stubs/VcStubElementType.kt b/src/main/kotlin/org/arend/psi/stubs/ArendStubElementType.kt similarity index 59% rename from src/main/kotlin/org/vclang/psi/stubs/VcStubElementType.kt rename to src/main/kotlin/org/arend/psi/stubs/ArendStubElementType.kt index 305393cb4..de8b8ee27 100644 --- a/src/main/kotlin/org/vclang/psi/stubs/VcStubElementType.kt +++ b/src/main/kotlin/org/arend/psi/stubs/ArendStubElementType.kt @@ -1,17 +1,17 @@ -package org.vclang.psi.stubs +package org.arend.psi.stubs import com.intellij.lang.ASTNode import com.intellij.psi.stubs.IStubElementType import com.intellij.psi.stubs.StubElement import com.intellij.psi.tree.IStubFileElementType -import org.vclang.VcLanguage -import org.vclang.psi.ext.VcCompositeElement +import org.arend.ArendLanguage +import org.arend.psi.ext.ArendCompositeElement -abstract class VcStubElementType, PsiT : VcCompositeElement>( +abstract class ArendStubElementType, PsiT : ArendCompositeElement>( debugName: String -) : IStubElementType(debugName, VcLanguage.INSTANCE) { +) : IStubElementType(debugName, ArendLanguage.INSTANCE) { - final override fun getExternalId(): String = "vclang.${super.toString()}" + final override fun getExternalId(): String = "arend.${super.toString()}" protected fun createStubIfParentIsStub(node: ASTNode): Boolean { val parent = node.treeParent diff --git a/src/main/kotlin/org/arend/psi/stubs/StubImplementations.kt b/src/main/kotlin/org/arend/psi/stubs/StubImplementations.kt new file mode 100644 index 000000000..afc242440 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/StubImplementations.kt @@ -0,0 +1,306 @@ +package org.arend.psi.stubs + +import com.intellij.psi.PsiFile +import com.intellij.psi.StubBuilder +import com.intellij.psi.stubs.* +import com.intellij.psi.tree.IStubFileElementType +import org.arend.ArendLanguage +import org.arend.psi.* +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.impl.* + +class ArendFileStub(file: ArendFile?) : PsiFileStubImpl(file) { + + override fun getType(): Type = Type + + object Type : IStubFileElementType(ArendLanguage.INSTANCE) { + + override fun getStubVersion(): Int = 1 + + override fun getBuilder(): StubBuilder = object : DefaultStubBuilder() { + override fun createStubForFile(file: PsiFile): StubElement<*> = + ArendFileStub(file as ArendFile) + } + + override fun serialize(stub: ArendFileStub, dataStream: StubOutputStream) { + } + + override fun deserialize( + dataStream: StubInputStream, + parentStub: StubElement<*>? + ): ArendFileStub = ArendFileStub(null) + + override fun getExternalId(): String = "Arend.file" + } +} + +fun factory(name: String): ArendStubElementType<*, *> = when (name) { + "DEF_CLASS" -> ArendDefClassStub.Type + "CLASS_FIELD" -> ArendClassFieldStub.Type + "FIELD_DEF_IDENTIFIER" -> ArendClassFieldParamStub.Type + "CLASS_FIELD_SYN" -> ArendClassFieldSynStub.Type + "CLASS_IMPLEMENT" -> ArendClassImplementStub.Type + "DEF_INSTANCE" -> ArendDefInstanceStub.Type + "CONSTRUCTOR" -> ArendConstructorStub.Type + "DEF_DATA" -> ArendDefDataStub.Type + "DEF_FUNCTION" -> ArendDefFunctionStub.Type + "DEF_MODULE" -> ArendDefModuleStub.Type + else -> error("Unknown element $name") +} + +abstract class ArendStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + override val name: String? +) : StubBase(parent, elementType), ArendNamedStub + +class ArendDefClassStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("DEF_CLASS") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendDefClassStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendDefClassStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendDefClassStub): ArendDefClass = ArendDefClassImpl(stub, this) + + override fun createStub(psi: ArendDefClass, parentStub: StubElement<*>?): ArendDefClassStub = + ArendDefClassStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendDefClassStub, sink: IndexSink) = sink.indexClass(stub) + } +} + +class ArendClassFieldStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("CLASS_FIELD") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendClassFieldStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendClassFieldStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendClassFieldStub): ArendClassField = ArendClassFieldImpl(stub, this) + + override fun createStub(psi: ArendClassField, parentStub: StubElement<*>?): ArendClassFieldStub = + ArendClassFieldStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendClassFieldStub, sink: IndexSink) = sink.indexClassField(stub) + } +} + +class ArendClassFieldParamStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("FIELD_DEF_IDENTIFIER") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendClassFieldParamStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendClassFieldParamStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendClassFieldParamStub): ArendFieldDefIdentifier = ArendFieldDefIdentifierImpl(stub, this) + + override fun createStub(psi: ArendFieldDefIdentifier, parentStub: StubElement<*>?): ArendClassFieldParamStub = + ArendClassFieldParamStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendClassFieldParamStub, sink: IndexSink) = sink.indexClassFieldParam(stub) + } +} + +class ArendClassFieldSynStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("CLASS_FIELD_SYN") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendClassFieldSynStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendClassFieldSynStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendClassFieldSynStub): ArendClassFieldSyn = ArendClassFieldSynImpl(stub, this) + + override fun createStub(psi: ArendClassFieldSyn, parentStub: StubElement<*>?): ArendClassFieldSynStub = + ArendClassFieldSynStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendClassFieldSynStub, sink: IndexSink) = sink.indexClassFieldSyn(stub) + } +} + +class ArendClassImplementStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("CLASS_IMPLEMENT") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendClassImplementStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendClassImplementStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendClassImplementStub): ArendClassImplement = + ArendClassImplementImpl(stub, this) + + override fun createStub( + psi: ArendClassImplement, + parentStub: StubElement<*>? + ): ArendClassImplementStub = ArendClassImplementStub(parentStub, this, psi.longName.refIdentifierList.lastOrNull()?.referenceName) + + override fun indexStub(stub: ArendClassImplementStub, sink: IndexSink) = + sink.indexClassImplement(stub) + } +} + +class ArendDefInstanceStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("DEF_INSTANCE") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendDefInstanceStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendDefInstanceStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendDefInstanceStub): ArendDefInstance = + ArendDefInstanceImpl(stub, this) + + override fun createStub( + psi: ArendDefInstance, + parentStub: StubElement<*>? + ): ArendDefInstanceStub = ArendDefInstanceStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendDefInstanceStub, sink: IndexSink) = + sink.indexClassInstance(stub) + } +} + +class ArendConstructorStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("CONSTRUCTOR") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendConstructorStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendConstructorStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendConstructorStub): ArendConstructor = + ArendConstructorImpl(stub, this) + + override fun createStub( + psi: ArendConstructor, + parentStub: StubElement<*>? + ): ArendConstructorStub = ArendConstructorStub(parentStub, this, psi.textRepresentation()) + + override fun indexStub(stub: ArendConstructorStub, sink: IndexSink) = + sink.indexConstructor(stub) + } +} + + +class ArendDefDataStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("DEF_DATA") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendDefDataStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendDefDataStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendDefDataStub): ArendDefData = ArendDefDataImpl(stub, this) + + override fun createStub( + psi: ArendDefData, + parentStub: StubElement<*>? + ): ArendDefDataStub = ArendDefDataStub(parentStub, this, psi.name) + + override fun indexStub(stub: ArendDefDataStub, sink: IndexSink) = sink.indexData(stub) + } +} + +class ArendDefFunctionStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("DEF_FUNCTION") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendDefFunctionStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendDefFunctionStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendDefFunctionStub): ArendDefFunction = + ArendDefFunctionImpl(stub, this) + + override fun createStub( + psi: ArendDefFunction, + parentStub: StubElement<*>? + ): ArendDefFunctionStub = ArendDefFunctionStub(parentStub, this, psi.name) + + override fun indexStub(stub: ArendDefFunctionStub, sink: IndexSink) = sink.indexFunction(stub) + } +} + +class ArendDefModuleStub( + parent: StubElement<*>?, + elementType: IStubElementType<*, *>, + name: String? +) : ArendStub(parent, elementType, name) { + + object Type : ArendStubElementType("DEF_MODULE") { + + override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = + ArendDefModuleStub(parentStub, this, dataStream.readName()?.string) + + override fun serialize(stub: ArendDefModuleStub, dataStream: StubOutputStream) = + with(dataStream) { writeName(stub.name) } + + override fun createPsi(stub: ArendDefModuleStub): ArendDefModule = + ArendDefModuleImpl(stub, this) + + override fun createStub( + psi: ArendDefModule, + parentStub: StubElement<*>? + ): ArendDefModuleStub = ArendDefModuleStub(parentStub, this, psi.name) + + override fun indexStub(stub: ArendDefModuleStub, sink: IndexSink) = sink.indexModule(stub) + } +} diff --git a/src/main/kotlin/org/arend/psi/stubs/StubIndexing.kt b/src/main/kotlin/org/arend/psi/stubs/StubIndexing.kt new file mode 100644 index 000000000..6e8f480fa --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/StubIndexing.kt @@ -0,0 +1,69 @@ +package org.arend.psi.stubs + +import com.intellij.psi.stubs.IndexSink +import org.arend.psi.stubs.index.ArendDefinitionIndex +import org.arend.psi.stubs.index.ArendGotoClassIndex +import org.arend.psi.stubs.index.ArendNamedElementIndex + +fun IndexSink.indexClass(stub: ArendDefClassStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) + indexGotoClass(stub) +} + +fun IndexSink.indexClassField(stub: ArendClassFieldStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexClassFieldParam(stub: ArendClassFieldParamStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexClassFieldSyn(stub: ArendClassFieldSynStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexClassImplement(stub: ArendClassImplementStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexClassInstance(stub: ArendDefInstanceStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexConstructor(stub: ArendConstructorStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexData(stub: ArendDefDataStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexFunction(stub: ArendDefFunctionStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +fun IndexSink.indexModule(stub: ArendDefModuleStub) { + indexNamedStub(stub) + indexDefinitionStub(stub) +} + +private fun IndexSink.indexNamedStub(stub: ArendNamedStub) { + stub.name?.let { occurrence(ArendNamedElementIndex.KEY, it) } +} + +private fun IndexSink.indexDefinitionStub(stub: ArendNamedStub) { + stub.name?.let { occurrence(ArendDefinitionIndex.KEY, it) } +} + +private fun IndexSink.indexGotoClass(stub: ArendNamedStub) { + stub.name?.let { occurrence(ArendGotoClassIndex.KEY, it) } +} diff --git a/src/main/kotlin/org/arend/psi/stubs/StubInterfaces.kt b/src/main/kotlin/org/arend/psi/stubs/StubInterfaces.kt new file mode 100644 index 000000000..ddfb68d43 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/StubInterfaces.kt @@ -0,0 +1,5 @@ +package org.arend.psi.stubs + +interface ArendNamedStub { + val name: String? +} diff --git a/src/main/kotlin/org/arend/psi/stubs/index/ArendDefinitionIndex.kt b/src/main/kotlin/org/arend/psi/stubs/index/ArendDefinitionIndex.kt new file mode 100644 index 000000000..fa85cc656 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/index/ArendDefinitionIndex.kt @@ -0,0 +1,18 @@ +package org.arend.psi.stubs.index + +import com.intellij.psi.stubs.StringStubIndexExtension +import com.intellij.psi.stubs.StubIndexKey +import org.arend.psi.ext.PsiReferable +import org.arend.psi.stubs.ArendFileStub + +class ArendDefinitionIndex : StringStubIndexExtension() { + + override fun getVersion(): Int = ArendFileStub.Type.stubVersion + + override fun getKey(): StubIndexKey = KEY + + companion object { + val KEY: StubIndexKey = + StubIndexKey.createIndexKey(ArendDefinitionIndex::class.java.canonicalName) + } +} diff --git a/src/main/kotlin/org/arend/psi/stubs/index/ArendGotoClassIndex.kt b/src/main/kotlin/org/arend/psi/stubs/index/ArendGotoClassIndex.kt new file mode 100644 index 000000000..cf459c8a8 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/index/ArendGotoClassIndex.kt @@ -0,0 +1,18 @@ +package org.arend.psi.stubs.index + +import com.intellij.psi.stubs.StringStubIndexExtension +import com.intellij.psi.stubs.StubIndexKey +import org.arend.psi.ext.PsiReferable +import org.arend.psi.stubs.ArendFileStub + +class ArendGotoClassIndex : StringStubIndexExtension() { + + override fun getVersion(): Int = ArendFileStub.Type.stubVersion + + override fun getKey(): StubIndexKey = KEY + + companion object { + val KEY: StubIndexKey = + StubIndexKey.createIndexKey(ArendGotoClassIndex::class.java.canonicalName) + } +} diff --git a/src/main/kotlin/org/arend/psi/stubs/index/ArendNamedElementIndex.kt b/src/main/kotlin/org/arend/psi/stubs/index/ArendNamedElementIndex.kt new file mode 100644 index 000000000..a67f40dc2 --- /dev/null +++ b/src/main/kotlin/org/arend/psi/stubs/index/ArendNamedElementIndex.kt @@ -0,0 +1,18 @@ +package org.arend.psi.stubs.index + +import com.intellij.psi.stubs.StringStubIndexExtension +import com.intellij.psi.stubs.StubIndexKey +import org.arend.psi.ext.PsiReferable +import org.arend.psi.stubs.ArendFileStub + +class ArendNamedElementIndex : StringStubIndexExtension() { + + override fun getVersion(): Int = ArendFileStub.Type.stubVersion + + override fun getKey(): StubIndexKey = KEY + + companion object { + val KEY: StubIndexKey = + StubIndexKey.createIndexKey(ArendNamedElementIndex::class.java.canonicalName) + } +} diff --git a/src/main/kotlin/org/vclang/quickfix/InstanceQuickFix.kt b/src/main/kotlin/org/arend/quickfix/InstanceQuickFix.kt similarity index 85% rename from src/main/kotlin/org/vclang/quickfix/InstanceQuickFix.kt rename to src/main/kotlin/org/arend/quickfix/InstanceQuickFix.kt index e797c35f9..cda108c74 100644 --- a/src/main/kotlin/org/vclang/quickfix/InstanceQuickFix.kt +++ b/src/main/kotlin/org/arend/quickfix/InstanceQuickFix.kt @@ -1,4 +1,4 @@ -package org.vclang.quickfix +package org.arend.quickfix import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInspection.ProblemHighlightType @@ -12,24 +12,24 @@ import com.intellij.openapi.wm.IdeFocusManager import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiWhiteSpace -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.FieldReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.codeInsight.completion.VclangCompletionContributor -import org.vclang.psi.* -import org.vclang.psi.ext.VcNewExprImplMixin -import org.vclang.psi.ext.impl.InstanceAdapter -import org.vclang.quickfix.InstanceQuickFix.Companion.INCREASE_IN_INDENT -import org.vclang.quickfix.InstanceQuickFix.Companion.moveCaretToTheEnd +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.FieldReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.codeInsight.completion.ArendCompletionContributor +import org.arend.psi.* +import org.arend.psi.ext.ArendNewExprImplMixin +import org.arend.psi.ext.impl.InstanceAdapter +import org.arend.quickfix.InstanceQuickFix.Companion.INCREASE_IN_INDENT +import org.arend.quickfix.InstanceQuickFix.Companion.moveCaretToTheEnd interface ExpressionWithCoClauses { fun getRangeToReport(): TextRange fun getClassReferenceHolder(): Abstract.ClassReferenceHolder - fun getCoClauseList(): List + fun getCoClauseList(): List fun calculateWhiteSpace(): String - fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) + fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) fun isError(): Boolean fun getPsiElement(): PsiElement } @@ -57,11 +57,11 @@ class InstanceQuickFix { } private fun isEmptyGoal(element: PsiElement): Boolean { - val goal: VcGoal? = element.childOfType() - return goal != null && VclangCompletionContributor.GOAL_IN_COPATTERN.accepts(goal) + val goal: ArendGoal? = element.childOfType() + return goal != null && ArendCompletionContributor.GOAL_IN_COPATTERN.accepts(goal) } - private fun doAnnotate(expression: ExpressionWithCoClauses, classReference: VcDefClass, holder: AnnotationHolder, onlyCheckFields: Boolean): Boolean { + private fun doAnnotate(expression: ExpressionWithCoClauses, classReference: ArendDefClass, holder: AnnotationHolder, onlyCheckFields: Boolean): Boolean { val superClassesFields = HashMap>() val fields = ClassReferable.Helper.getNotImplementedFields(classReference, expression.getClassReferenceHolder().argumentsExplicitness, superClassesFields) @@ -89,13 +89,13 @@ class InstanceQuickFix { } } - private fun annotateClauses(coClauseList: List, holder: AnnotationHolder, superClassesFields: HashMap>, fields: MutableSet){ - val classClauses = ArrayList>() + private fun annotateClauses(coClauseList: List, holder: AnnotationHolder, superClassesFields: HashMap>, fields: MutableSet){ + val classClauses = ArrayList>() for (coClause in coClauseList) { val referable = coClause.longName?.refIdentifierList?.lastOrNull()?.reference?.resolve() as? LocatedReferable ?: continue val underlyingRef = referable.underlyingReference ?: referable - if (underlyingRef is VcDefClass) { + if (underlyingRef is ArendDefClass) { classClauses.add(Pair(underlyingRef,coClause)) continue } @@ -114,12 +114,12 @@ class InstanceQuickFix { if (clauseBlock || emptyGoal) { val typeClassReference = underlyingRef.typeClassReference - if (typeClassReference is VcDefClass) doAnnotate(object : CoClauseAdapter(coClause) { + if (typeClassReference is ArendDefClass) doAnnotate(object : CoClauseAdapter(coClause) { override fun isError() = clauseBlock override fun getRangeToReport() = if (emptyGoal) coClause.textRange else coClause.longName?.textRange ?: coClause.textRange - override fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) { + override fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) { if (emptyGoal) coClause.deleteChildRange(fatArrow, expr) super.insertFirstCoClause(name, factory, editor) } @@ -146,7 +146,7 @@ class InstanceQuickFix { warningAnnotation.registerFix(object: IntentionAction { override fun startInWriteAction() = true - override fun getFamilyName() = "vclang.instance" + override fun getFamilyName() = "arend.instance" override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = true @@ -174,10 +174,10 @@ class InstanceQuickFix { } } - fun annotateFunctionDefinitionWithCoWith(functionDefinition: VcDefFunction, holder: AnnotationHolder): Boolean { + fun annotateFunctionDefinitionWithCoWith(functionDefinition: ArendDefFunction, holder: AnnotationHolder): Boolean { val classReference = functionDefinition.classReference val coWithKw = functionDefinition.functionBody?.cowithKw - if (classReference is VcDefClass && coWithKw != null) { + if (classReference is ArendDefClass && coWithKw != null) { return doAnnotate(object: ExpressionWithCoClauses { override fun getRangeToReport() = TextRange(functionDefinition.textRange.startOffset, coWithKw.textRange.endOffset) @@ -185,15 +185,15 @@ class InstanceQuickFix { override fun getPsiElement(): PsiElement = functionDefinition - override fun getCoClauseList(): List = functionDefinition.functionBody?.coClauses?.coClauseList ?: emptyList() + override fun getCoClauseList(): List = functionDefinition.functionBody?.coClauses?.coClauseList ?: emptyList() override fun calculateWhiteSpace(): String { val defaultWhitespace = INCREASE_IN_INDENT - return if (functionDefinition.parent is VcStatement && functionDefinition.parent.prevSibling is PsiWhiteSpace) + return if (functionDefinition.parent is ArendStatement && functionDefinition.parent.prevSibling is PsiWhiteSpace) getIndent(functionDefinition.parent.prevSibling.text, defaultWhitespace, INCREASE_IN_INDENT) else defaultWhitespace } - override fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) { + override fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) { val whitespace = calculateWhiteSpace() var nodeCoClauses = functionDefinition.functionBody?.coClauses if (nodeCoClauses == null) { @@ -228,7 +228,7 @@ class InstanceQuickFix { fun annotateClassInstance(instance: InstanceAdapter, holder: AnnotationHolder): Boolean { val classReference = instance.classReference - if (classReference is VcDefClass && classReference.recordKw == null) { + if (classReference is ArendDefClass && classReference.recordKw == null) { val argumentAppExpr = instance.argumentAppExpr if (argumentAppExpr != null) { return doAnnotate(object: ExpressionWithCoClauses { @@ -236,7 +236,7 @@ class InstanceQuickFix { override fun getRangeToReport(): TextRange = TextRange(instance.instanceKw.textRange.startOffset, argumentAppExpr.textRange.endOffset) - override fun getCoClauseList(): List = instance.coClauses?.coClauseList ?: emptyList() + override fun getCoClauseList(): List = instance.coClauses?.coClauseList ?: emptyList() override fun getClassReferenceHolder() = instance @@ -244,11 +244,11 @@ class InstanceQuickFix { override fun calculateWhiteSpace(): String { val defaultWhitespace = INCREASE_IN_INDENT - return if (instance.parent is VcStatement && instance.parent.prevSibling is PsiWhiteSpace) + return if (instance.parent is ArendStatement && instance.parent.prevSibling is PsiWhiteSpace) getIndent(instance.parent.prevSibling.text, defaultWhitespace, INCREASE_IN_INDENT) else defaultWhitespace } - override fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) { + override fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) { val whitespace = calculateWhiteSpace() var nodeCoClauses = instance.coClauses if (nodeCoClauses == null) { @@ -273,9 +273,9 @@ class InstanceQuickFix { return false } - fun annotateNewExpr(newExpr: VcNewExprImplMixin, holder: AnnotationHolder): Boolean { + fun annotateNewExpr(newExpr: ArendNewExprImplMixin, holder: AnnotationHolder): Boolean { val classReference = newExpr.classReference - if (classReference is VcDefClass) { + if (classReference is ArendDefClass) { val argumentAppExpr = newExpr.getArgumentAppExpr() if (argumentAppExpr != null) { return doAnnotate(object: ExpressionWithCoClauses { @@ -283,7 +283,7 @@ class InstanceQuickFix { override fun getRangeToReport(): TextRange = argumentAppExpr.textRange - override fun getCoClauseList(): List = newExpr.getCoClauseList() + override fun getCoClauseList(): List = newExpr.getCoClauseList() override fun getClassReferenceHolder() = newExpr @@ -295,7 +295,7 @@ class InstanceQuickFix { getIndent(newExpr.prevSibling.text, defaultWhitespace, INCREASE_IN_INDENT) else defaultWhitespace } - override fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) { + override fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) { val whitespace = calculateWhiteSpace() val lbrace = newExpr.getLbrace() val anchor : PsiElement = if (lbrace != null) lbrace else { @@ -320,8 +320,8 @@ class InstanceQuickFix { } } -abstract class CoClauseAdapter(private val coClause: VcCoClause) : ExpressionWithCoClauses{ - override fun getCoClauseList(): List = coClause.coClauseList +abstract class CoClauseAdapter(private val coClause: ArendCoClause) : ExpressionWithCoClauses{ + override fun getCoClauseList(): List = coClause.coClauseList override fun getClassReferenceHolder() = coClause @@ -333,7 +333,7 @@ abstract class CoClauseAdapter(private val coClause: VcCoClause) : ExpressionWit return if (anchor is PsiWhiteSpace) InstanceQuickFix.getIndent(anchor.text, defaultIndent, INCREASE_IN_INDENT) else defaultIndent } - override fun insertFirstCoClause(name: String, factory: VcPsiFactory, editor: Editor?) { + override fun insertFirstCoClause(name: String, factory: ArendPsiFactory, editor: Editor?) { val whitespace = calculateWhiteSpace() var anchor: PsiElement @@ -362,13 +362,13 @@ class ImplementFieldsQuickFix(val instance: ExpressionWithCoClauses, private val override fun startInWriteAction() = true - override fun getFamilyName() = "vclang.instance" + override fun getFamilyName() = "arend.instance" override fun isAvailable(project: Project, editor: Editor?, file: PsiFile?) = instance.getPsiElement().isValid && !fieldsToImplement.isEmpty() override fun getText() = actionText - private fun addField(field: Referable, whitespace: String, editor: Editor?, psiFactory: VcPsiFactory) { + private fun addField(field: Referable, whitespace: String, editor: Editor?, psiFactory: ArendPsiFactory) { val coClauses = instance.getCoClauseList() if (coClauses.isEmpty()) { instance.insertFirstCoClause(field.textRepresentation(), psiFactory, editor) @@ -395,13 +395,13 @@ class ImplementFieldsQuickFix(val instance: ExpressionWithCoClauses, private val override fun invoke(project: Project, editor: Editor?, file: PsiFile?) { val whitespace = instance.calculateWhiteSpace() - val psiFactory = VcPsiFactory(project) + val psiFactory = ArendPsiFactory(project) for (f in fieldsToImplement) addField(f, whitespace, editor, psiFactory) if (instance.getCoClauseList().isNotEmpty()) { // Add CRLF + indent after the last coclause val lastCC = instance.getCoClauseList().last() if (lastCC.nextSibling != null && - lastCC.nextSibling.node.elementType == VcElementTypes.RBRACE) { + lastCC.nextSibling.node.elementType == ArendElementTypes.RBRACE) { lastCC.parent.addAfter(psiFactory.createWhitespace("\n"+whitespace), lastCC) } else if (lastCC.nextSibling != null && lastCC.nextSibling.node is PsiWhiteSpace && !lastCC.nextSibling.text.contains('\n') && diff --git a/src/main/kotlin/org/vclang/quickfix/ResolveRefQuickFix.kt b/src/main/kotlin/org/arend/quickfix/ResolveRefQuickFix.kt similarity index 87% rename from src/main/kotlin/org/vclang/quickfix/ResolveRefQuickFix.kt rename to src/main/kotlin/org/arend/quickfix/ResolveRefQuickFix.kt index fa9e6f3ec..168ad9395 100644 --- a/src/main/kotlin/org/vclang/quickfix/ResolveRefQuickFix.kt +++ b/src/main/kotlin/org/arend/quickfix/ResolveRefQuickFix.kt @@ -1,22 +1,22 @@ -package org.vclang.quickfix +package org.arend.quickfix import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import com.intellij.psi.PsiWhiteSpace -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.RedirectingReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.scope.* -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.term.group.Group -import com.jetbrains.jetpad.vclang.util.LongName -import org.vclang.module.util.findVcFile -import org.vclang.module.util.libraryConfig -import org.vclang.psi.* -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.ext.VcReferenceElement +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.RedirectingReferable +import org.arend.naming.reference.Referable +import org.arend.naming.scope.* +import org.arend.prelude.Prelude +import org.arend.term.group.Group +import org.arend.util.LongName +import org.arend.module.util.findArendFile +import org.arend.module.util.libraryConfig +import org.arend.psi.* +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.PsiReferable +import org.arend.psi.ext.ArendReferenceElement import java.util.Collections.singletonList interface ResolveRefFixAction { @@ -24,20 +24,20 @@ interface ResolveRefFixAction { fun isValid(): Boolean = true } -class ImportFileAction(private val importFile: VcFile, private val currentFile: VcFile, private val usingList: List?): ResolveRefFixAction { +class ImportFileAction(private val importFile: ArendFile, private val currentFile: ArendFile, private val usingList: List?): ResolveRefFixAction { override fun toString() = "Import file " + importFile.fullName - override fun isValid() = currentFile.module?.libraryConfig?.findVcFile(importFile.modulePath) == importFile || ResolveRefQuickFix.isPrelude(importFile) + override fun isValid() = currentFile.module?.libraryConfig?.findArendFile(importFile.modulePath) == importFile || ResolveRefQuickFix.isPrelude(importFile) private fun calculateWhiteSpace(statement: PsiElement): String { var s = statement.nextSibling while (s is PsiWhiteSpace || s is PsiComment) s = s.nextSibling - return if (s is VcStatement && s.statCmd == null) "\n" else "" + return if (s is ArendStatement && s.statCmd == null) "\n" else "" } override fun execute(editor: Editor?) { val fullName = importFile.fullName - val factory = VcPsiFactory(importFile.project) + val factory = ArendPsiFactory(importFile.project) val commandStatement = factory.createImportCommand(fullName + (if (usingList == null) "" else " ()")) if (currentFile.children.isEmpty()) @@ -76,7 +76,7 @@ class ImportFileAction(private val importFile: VcFile, private val currentFile: } } -class AddIdToUsingAction(private val statCmd: VcStatCmd, private val idList: List): ResolveRefFixAction { +class AddIdToUsingAction(private val statCmd: ArendStatCmd, private val idList: List): ResolveRefFixAction { override fun toString(): String { val name = if (idList.size == 1) idList[0] else idList.toString() return "Add "+ name + " to "+ ResolveRefQuickFix.statCmdName(statCmd)+" import's \"using\" list" @@ -99,7 +99,7 @@ class AddIdToUsingAction(private val statCmd: VcStatCmd, private val idList: Lis needsCommaBefore = true } - val factory = VcPsiFactory(project) + val factory = ArendPsiFactory(project) val nsCmd = factory.createImportCommand("Dummy (a,$id)").statCmd val newNsUsing = nsCmd!!.nsUsing!! val nsId = newNsUsing.nsIdList[1] @@ -137,7 +137,7 @@ class AddIdToUsingAction(private val statCmd: VcStatCmd, private val idList: Lis } } -class RemoveFromHidingAction(private val statCmd: VcStatCmd, val id: VcRefIdentifier): ResolveRefFixAction { +class RemoveFromHidingAction(private val statCmd: ArendStatCmd, val id: ArendRefIdentifier): ResolveRefFixAction { override fun toString(): String { return "Remove "+ id.referenceName + " from " + ResolveRefQuickFix.statCmdName(statCmd) + " import's \"hiding\" list" } @@ -148,17 +148,17 @@ class RemoveFromHidingAction(private val statCmd: VcStatCmd, val id: VcRefIdenti if (startSibling.prevSibling is PsiWhiteSpace) startSibling = startSibling.prevSibling - val leftEnd = startSibling.prevSibling.node.elementType == VcElementTypes.LPAREN + val leftEnd = startSibling.prevSibling.node.elementType == ArendElementTypes.LPAREN - while (endSibling.nextSibling is PsiWhiteSpace || endSibling.nextSibling.node.elementType == VcElementTypes.COMMA) { + while (endSibling.nextSibling is PsiWhiteSpace || endSibling.nextSibling.node.elementType == ArendElementTypes.COMMA) { endSibling = endSibling.nextSibling - if (endSibling.node.elementType == VcElementTypes.COMMA && !leftEnd) + if (endSibling.node.elementType == ArendElementTypes.COMMA && !leftEnd) break } - val rightEnd = endSibling.nextSibling.node.elementType == VcElementTypes.RPAREN + val rightEnd = endSibling.nextSibling.node.elementType == ArendElementTypes.RPAREN - if (rightEnd && startSibling.prevSibling.node.elementType == VcElementTypes.COMMA) { + if (rightEnd && startSibling.prevSibling.node.elementType == ArendElementTypes.COMMA) { startSibling = startSibling.prevSibling if (startSibling.prevSibling is PsiWhiteSpace) startSibling = startSibling.prevSibling @@ -169,7 +169,7 @@ class RemoveFromHidingAction(private val statCmd: VcStatCmd, val id: VcRefIdenti endSibling = endSibling.nextSibling if (startSibling.prevSibling is PsiWhiteSpace) startSibling = startSibling.prevSibling - if (startSibling.prevSibling.node.elementType == VcElementTypes.HIDING_KW) + if (startSibling.prevSibling.node.elementType == ArendElementTypes.HIDING_KW) startSibling = startSibling.prevSibling if (startSibling.prevSibling is PsiWhiteSpace) startSibling = startSibling.prevSibling @@ -179,15 +179,15 @@ class RemoveFromHidingAction(private val statCmd: VcStatCmd, val id: VcRefIdenti } } -class RenameReferenceAction(private val element: VcReferenceElement, private val id: List): ResolveRefFixAction { +class RenameReferenceAction(private val element: ArendReferenceElement, private val id: List): ResolveRefFixAction { override fun toString(): String { return "Rename " + element.text + " to "+LongName(id).toString() } override fun execute(editor: Editor?) { - if (element.parent is VcLongName) { + if (element.parent is ArendLongName) { val lName = LongName(id).toString() - val factory = VcPsiFactory(element.project) + val factory = ArendPsiFactory(element.project) val literal = factory.createLiteral(lName) val longName = literal.longName val offset = element.textOffset @@ -206,8 +206,8 @@ class ResolveRefFixData(val target: PsiLocatedReferable, private val cursorFixAction: ResolveRefFixAction?): ResolveRefFixAction { override fun toString(): String { - return LongName(targetFullName).toString() + (if (target.containingFile is VcFile) - " in " + LongName((target.containingFile as VcFile).modulePath.toList()).toString() else + return LongName(targetFullName).toString() + (if (target.containingFile is ArendFile) + " in " + LongName((target.containingFile as ArendFile).modulePath.toList()).toString() else "") } @@ -220,17 +220,17 @@ class ResolveRefFixData(val target: PsiLocatedReferable, class ResolveRefQuickFix { companion object { - fun statCmdName(statCmd : VcStatCmd) = - (statCmd.longName?.refIdentifierList?.lastOrNull()?.reference?.resolve() as? VcFile)?.fullName ?: "???" + fun statCmdName(statCmd : ArendStatCmd) = + (statCmd.longName?.refIdentifierList?.lastOrNull()?.reference?.resolve() as? ArendFile)?.fullName ?: "???" - fun isPrelude(file: VcFile) = file.fullName == Prelude.MODULE_PATH.toString() && file.containingDirectory == null + fun isPrelude(file: ArendFile) = file.fullName == Prelude.MODULE_PATH.toString() && file.containingDirectory == null - fun getDecision(target: PsiLocatedReferable, element: VcReferenceElement): ResolveRefFixData? { + fun getDecision(target: PsiLocatedReferable, element: ArendReferenceElement): ResolveRefFixData? { val targetFile = target.containingFile val currentFile = element.containingFile val fullName = ArrayList() - val alternativeFullName : ArrayList? = if (target is VcClassFieldSyn || target is VcClassField || target is VcConstructor) + val alternativeFullName : ArrayList? = if (target is ArendClassFieldSyn || target is ArendClassField || target is ArendConstructor) ArrayList() else null var ignoreFlag = true @@ -243,7 +243,7 @@ class ResolveRefQuickFix { val importActionMap: HashMap, ResolveRefFixAction?> = HashMap() while (psi.parent != null) { - if (psi is PsiReferable && psi !is VcFile) { + if (psi is PsiReferable && psi !is ArendFile) { val name = psi.name ?: return null fullName.add(0, name) @@ -269,7 +269,7 @@ class ResolveRefQuickFix { fullNames.add(fullName) if (alternativeFullName != null) fullNames.add(alternativeFullName) - if (currentFile is VcFile && targetFile is VcFile) { + if (currentFile is ArendFile && targetFile is ArendFile) { if (currentFile != targetFile) { val fileGroup = object: Group by currentFile { override fun getSubgroups(): Collection = emptyList() @@ -278,7 +278,7 @@ class ResolveRefQuickFix { val cautiousMode = targetFile.subgroups.any { importedScope.resolveName(it.referable.textRepresentation()) != null } // True if imported scope of the current file has nonempty intersection with the scope of the target file - var suitableImport: VcStatCmd? = null + var suitableImport: ArendStatCmd? = null val aliases = HashMap, HashSet>() for (fName in fullNames) { @@ -350,7 +350,7 @@ class ResolveRefQuickFix { val hiddenList = suitableImport.refIdentifierList for (fName in fullNames) { - val hiddenRef : VcRefIdentifier? = hiddenList.lastOrNull { it.referenceName == fName[0] } + val hiddenRef : ArendRefIdentifier? = hiddenList.lastOrNull { it.referenceName == fName[0] } if (hiddenRef != null) importActionMap[fName] = RemoveFromHidingAction(suitableImport, hiddenRef) else if (nsUsing != null) @@ -380,14 +380,14 @@ class ResolveRefQuickFix { for (fName in fullNames) currentBlock.put(fName, importActionMap[fName]) if (fullName.size > 1) { - val namespaceCommands = ArrayList>() + val namespaceCommands = ArrayList>() psi = element while (psi.parent != null) { - var statements : List? = null + var statements : List? = null - if (psi is VcWhere) - statements = psi.children.mapNotNull { (it as? VcStatement)?.statCmd } - else if (psi is VcFile) + if (psi is ArendWhere) + statements = psi.children.mapNotNull { (it as? ArendStatement)?.statCmd } + else if (psi is ArendFile) statements = psi.namespaceCommands if (statements != null) @@ -459,7 +459,7 @@ class ResolveRefQuickFix { if (modifyingImportsNeeded && targetTop.isNotEmpty()) { // calculate the scope imitating current scope after the imports have been fixed val complementScope = object : ListScope(targetTop) { override fun resolveNamespace(name: String?): Scope? = targetTop - .filterIsInstance() + .filterIsInstance() .firstOrNull { name == it.textRepresentation() } ?.let { LexicalScope.opened(it) } } diff --git a/src/main/kotlin/org/vclang/refactoring/VcNamesValidator.kt b/src/main/kotlin/org/arend/refactoring/ArendNamesValidator.kt similarity index 64% rename from src/main/kotlin/org/vclang/refactoring/VcNamesValidator.kt rename to src/main/kotlin/org/arend/refactoring/ArendNamesValidator.kt index 2aa3b0b59..447fe1aea 100644 --- a/src/main/kotlin/org/vclang/refactoring/VcNamesValidator.kt +++ b/src/main/kotlin/org/arend/refactoring/ArendNamesValidator.kt @@ -1,30 +1,30 @@ -package org.vclang.refactoring +package org.arend.refactoring import com.intellij.lang.refactoring.NamesValidator import com.intellij.openapi.project.Project import com.intellij.psi.tree.IElementType -import org.vclang.lexer.VcLexerAdapter -import org.vclang.psi.VC_KEYWORDS -import org.vclang.psi.VcElementTypes +import org.arend.lexer.ArendLexerAdapter +import org.arend.psi.AREND_KEYWORDS +import org.arend.psi.ArendElementTypes -class VcNamesValidator : NamesValidator { +class ArendNamesValidator : NamesValidator { override fun isKeyword(name: String, project: Project?): Boolean = - getLexerType(name) in VC_KEYWORDS + getLexerType(name) in AREND_KEYWORDS override fun isIdentifier(name: String, project: Project?): Boolean = isPrefixName(name) || isInfixName(name) || isPostfixName(name) companion object { - fun isPrefixName(name: String): Boolean = getLexerType(name) == VcElementTypes.ID && !containsComment(name) + fun isPrefixName(name: String): Boolean = getLexerType(name) == ArendElementTypes.ID && !containsComment(name) - fun isInfixName(name: String): Boolean = getLexerType(name) == VcElementTypes.INFIX && !containsComment(name) + fun isInfixName(name: String): Boolean = getLexerType(name) == ArendElementTypes.INFIX && !containsComment(name) - fun isPostfixName(name: String): Boolean = getLexerType(name) == VcElementTypes.POSTFIX && !containsComment(name) + fun isPostfixName(name: String): Boolean = getLexerType(name) == ArendElementTypes.POSTFIX && !containsComment(name) private fun containsComment(name: String): Boolean = name.contains("--") fun getLexerType (text : String): IElementType? { - val lexer = VcLexerAdapter() + val lexer = ArendLexerAdapter() lexer.start(text) return if (lexer.tokenEnd == text.length) lexer.tokenType else null } diff --git a/src/main/kotlin/org/arend/refactoring/ArendRefactoringSupportProvider.kt b/src/main/kotlin/org/arend/refactoring/ArendRefactoringSupportProvider.kt new file mode 100644 index 000000000..610d89f01 --- /dev/null +++ b/src/main/kotlin/org/arend/refactoring/ArendRefactoringSupportProvider.kt @@ -0,0 +1,21 @@ +package org.arend.refactoring + +import com.intellij.lang.refactoring.RefactoringSupportProvider +import com.intellij.psi.PsiElement +import com.intellij.psi.impl.source.tree.LeafPsiElement +import org.arend.psi.* +import org.arend.psi.ArendElementTypes.INFIX +import org.arend.psi.ArendElementTypes.POSTFIX + +class ArendRefactoringSupportProvider : RefactoringSupportProvider() { + override fun isInplaceRenameAvailable(element: PsiElement, context: PsiElement?): Boolean { + return element is ArendDefIdentifier || element is ArendFieldDefIdentifier || element is ArendLetClause + } + + override fun isMemberInplaceRenameAvailable(element: PsiElement, context: PsiElement?): Boolean { + if (context is LeafPsiElement && (context.elementType == INFIX || context.elementType == POSTFIX)) return false + + return element is ArendDefClass || element is ArendDefFunction || element is ArendDefData || + element is ArendClassField || element is ArendClassFieldSyn || element is ArendConstructor || element is ArendDefModule + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/refactoring/VcRenameInputValidator.kt b/src/main/kotlin/org/arend/refactoring/ArendRenameInputValidator.kt similarity index 67% rename from src/main/kotlin/org/vclang/refactoring/VcRenameInputValidator.kt rename to src/main/kotlin/org/arend/refactoring/ArendRenameInputValidator.kt index 58010c341..037628095 100644 --- a/src/main/kotlin/org/vclang/refactoring/VcRenameInputValidator.kt +++ b/src/main/kotlin/org/arend/refactoring/ArendRenameInputValidator.kt @@ -1,19 +1,16 @@ -package org.vclang.refactoring +package org.arend.refactoring import com.intellij.patterns.ElementPattern import com.intellij.patterns.PlatformPatterns import com.intellij.psi.PsiElement import com.intellij.refactoring.rename.RenameInputValidator import com.intellij.util.ProcessingContext -import org.vclang.psi.ext.PsiReferable +import org.arend.psi.ext.PsiReferable -/** - * Created by Sinchuk Sergey on 12/6/17. - */ -class VcRenameInputValidator : RenameInputValidator { +class ArendRenameInputValidator : RenameInputValidator { override fun getPattern(): ElementPattern = PlatformPatterns.psiElement(PsiReferable::class.java) override fun isInputValid(newName: String, element: PsiElement, context: ProcessingContext) = - VcNamesValidator.isPrefixName(newName) + ArendNamesValidator.isPrefixName(newName) } diff --git a/src/main/kotlin/org/vclang/resolving/VcReferableConverter.kt b/src/main/kotlin/org/arend/resolving/ArendReferableConverter.kt similarity index 82% rename from src/main/kotlin/org/vclang/resolving/VcReferableConverter.kt rename to src/main/kotlin/org/arend/resolving/ArendReferableConverter.kt index 847937f48..11e4a0392 100644 --- a/src/main/kotlin/org/vclang/resolving/VcReferableConverter.kt +++ b/src/main/kotlin/org/arend/resolving/ArendReferableConverter.kt @@ -1,18 +1,18 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.SmartPointerManager -import com.jetbrains.jetpad.vclang.naming.reference.* -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.reference.converter.SimpleReferableConverter -import org.vclang.psi.VcClassField -import org.vclang.psi.VcFieldDefIdentifier -import org.vclang.psi.VcFile -import org.vclang.psi.ext.PsiReferable +import org.arend.naming.reference.* +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.reference.converter.SimpleReferableConverter +import org.arend.psi.ArendClassField +import org.arend.psi.ArendFieldDefIdentifier +import org.arend.psi.ArendFile +import org.arend.psi.ext.PsiReferable -class VcReferableConverter(private val project: Project, private val state: SimpleReferableConverter) : ReferableConverter { +class ArendReferableConverter(private val project: Project, private val state: SimpleReferableConverter) : ReferableConverter { private val cache = HashMap() override fun toDataReferable(referable: Referable?): Referable? = @@ -21,9 +21,9 @@ class VcReferableConverter(private val project: Project, private val state: Simp override fun toDataLocatedReferable(referable: LocatedReferable?): TCReferable? = when (referable) { - is VcFile -> null + is ArendFile -> null is PsiReferable -> { - if (referable is VcClassField || referable is VcFieldDefIdentifier) { + if (referable is ArendClassField || referable is ArendFieldDefIdentifier) { cache.computeIfAbsent(referable) { state[referable] } ?: run { toDataLocatedReferable(referable.locatedReferableParent) cache[referable] @@ -32,10 +32,10 @@ class VcReferableConverter(private val project: Project, private val state: Simp val result = cache.computeIfAbsent(referable) { state.computeIfAbsent(referable) { val pointer = SmartPointerManager.getInstance(project).createSmartPsiElementPointer(referable) val locatedParent = referable.locatedReferableParent - val parent = if (locatedParent is VcFile) ModuleReferable(locatedParent.modulePath) else toDataLocatedReferable(locatedParent) + val parent = if (locatedParent is ArendFile) ModuleReferable(locatedParent.modulePath) else toDataLocatedReferable(locatedParent) when (referable) { is ClassReferable -> ClassDataLocatedReferable(pointer, referable, parent, ArrayList(), ArrayList(), ArrayList(), null) - is VcClassField, is VcFieldDefIdentifier -> cache[referable] + is ArendClassField, is ArendFieldDefIdentifier -> cache[referable] else -> DataLocatedReferable(pointer, referable, parent, toDataLocatedReferable(referable.getTypeClassReference()) as? TCClassReferable) } } } diff --git a/src/main/kotlin/org/vclang/resolving/VcReference.kt b/src/main/kotlin/org/arend/resolving/ArendReference.kt similarity index 59% rename from src/main/kotlin/org/vclang/resolving/VcReference.kt rename to src/main/kotlin/org/arend/resolving/ArendReference.kt index fd254fe12..26d945bcc 100644 --- a/src/main/kotlin/org/vclang/resolving/VcReference.kt +++ b/src/main/kotlin/org/arend/resolving/ArendReference.kt @@ -1,31 +1,31 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.openapi.util.TextRange import com.intellij.psi.* -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import com.jetbrains.jetpad.vclang.naming.reference.RedirectingReferable -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.VcFileType -import org.vclang.VcIcons -import org.vclang.module.util.findVcFilesAndDirectories -import org.vclang.module.util.libraryConfig -import org.vclang.psi.* -import org.vclang.psi.ext.PsiModuleReferable -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.ext.VcReferenceElement -import org.vclang.refactoring.VcNamesValidator -import org.vclang.typechecking.TypeCheckingService +import org.arend.naming.reference.ModuleReferable +import org.arend.naming.reference.RedirectingReferable +import org.arend.prelude.Prelude +import org.arend.term.abs.Abstract +import org.arend.ArendFileType +import org.arend.ArendIcons +import org.arend.module.util.findArendFilesAndDirectories +import org.arend.module.util.libraryConfig +import org.arend.psi.* +import org.arend.psi.ext.PsiModuleReferable +import org.arend.psi.ext.PsiReferable +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.ext.ArendReferenceElement +import org.arend.refactoring.ArendNamesValidator +import org.arend.typechecking.TypeCheckingService -interface VcReference : PsiReference { - override fun getElement(): VcCompositeElement +interface ArendReference : PsiReference { + override fun getElement(): ArendCompositeElement override fun resolve(): PsiElement? } -open class VcDefReferenceImpl(element: T): PsiReferenceBase(element, TextRange(0, element.textLength)), VcReference { +open class ArendDefReferenceImpl(element: T): PsiReferenceBase(element, TextRange(0, element.textLength)), ArendReference { override fun handleElementRename(newName: String): PsiElement { element.referenceNameElement?.let { doRename(it, newName) } return element @@ -36,11 +36,11 @@ open class VcDefReferenceImpl(element: T): PsiReferenceB override fun resolve(): PsiElement = element.parent as? PsiReferable ?: element } -open class VcPatternDefReferenceImpl(element: T, private val onlyResolve: Boolean): VcReferenceImpl(element) { +open class ArendPatternDefReferenceImpl(element: T, private val onlyResolve: Boolean): ArendReferenceImpl(element) { override fun resolve(): PsiElement? = super.resolve() ?: if (onlyResolve) null else element } -open class VcReferenceImpl(element: T): PsiReferenceBase(element, TextRange(0, element.textLength)), VcReference { +open class ArendReferenceImpl(element: T): PsiReferenceBase(element, TextRange(0, element.textLength)), ArendReference { override fun handleElementRename(newName: String): PsiElement { element.referenceNameElement?.let { doRename(it, newName) } return element @@ -52,25 +52,25 @@ open class VcReferenceImpl(element: T): PsiReferenceBase var clazz: Class<*>? = null val element = element val parent = element.parent - val pparent = parent as? VcDefClass ?: (parent as? VcLongName)?.parent - if (pparent is VcDefClass) { - clazz = VcDefClass::class.java - notARecord = parent is VcDefClass // inside a class synonym - notASynonym = parent is VcDefClass + val pparent = parent as? ArendDefClass ?: (parent as? ArendLongName)?.parent + if (pparent is ArendDefClass) { + clazz = ArendDefClass::class.java + notARecord = parent is ArendDefClass // inside a class synonym + notASynonym = parent is ArendDefClass } else { - val atomFieldsAcc = ((pparent as? VcLiteral)?.parent as? VcAtom)?.parent as? VcAtomFieldsAcc - val argParent = ((if (atomFieldsAcc == null) (pparent as? VcLongNameExpr)?.parent else - if (!atomFieldsAcc.fieldAccList.isEmpty()) null else atomFieldsAcc.parent) as? VcArgumentAppExpr)?.parent - if (argParent is VcDefInstance || argParent is VcNewArg || (argParent as? VcNewExpr)?.newKw != null) { - clazz = VcDefClass::class.java - notARecord = argParent is VcDefInstance + val atomFieldsAcc = ((pparent as? ArendLiteral)?.parent as? ArendAtom)?.parent as? ArendAtomFieldsAcc + val argParent = ((if (atomFieldsAcc == null) (pparent as? ArendLongNameExpr)?.parent else + if (!atomFieldsAcc.fieldAccList.isEmpty()) null else atomFieldsAcc.parent) as? ArendArgumentAppExpr)?.parent + if (argParent is ArendDefInstance || argParent is ArendNewArg || (argParent as? ArendNewExpr)?.newKw != null) { + clazz = ArendDefClass::class.java + notARecord = argParent is ArendDefInstance } } return element.scope.elements.mapNotNull { val ref = (it as? RedirectingReferable)?.originalReferable ?: it val origRef: Any? = if (ref is DataLocatedReferable) ref.data.element else ref - if (origRef !is ModuleReferable && (clazz != null && !clazz.isInstance(origRef) || notARecord && (origRef as? VcDefClass)?.recordKw != null || notASynonym && (origRef as? VcDefClass)?.fatArrow != null)) { + if (origRef !is ModuleReferable && (clazz != null && !clazz.isInstance(origRef) || notARecord && (origRef as? ArendDefClass)?.recordKw != null || notASynonym && (origRef as? ArendDefClass)?.fatArrow != null)) { null } else when (origRef) { is PsiNamedElement -> { @@ -89,12 +89,12 @@ open class VcReferenceImpl(element: T): PsiReferenceBase builder } is ModuleReferable -> { - val module = if (origRef is PsiModuleReferable) (origRef.modules.firstOrNull()) else element.module?.libraryConfig?.findVcFilesAndDirectories(origRef.path)?.firstOrNull() + val module = if (origRef is PsiModuleReferable) (origRef.modules.firstOrNull()) else element.module?.libraryConfig?.findArendFilesAndDirectories(origRef.path)?.firstOrNull() module?.let { - if (it is VcFile) - LookupElementBuilder.create(it, it.textRepresentation()).withIcon(VcIcons.MODULE) else + if (it is ArendFile) + LookupElementBuilder.create(it, it.textRepresentation()).withIcon(ArendIcons.MODULE) else LookupElementBuilder.createWithIcon(it) - } ?: LookupElementBuilder.create(origRef, origRef.textRepresentation()).withIcon(VcIcons.DIRECTORY) + } ?: LookupElementBuilder.create(origRef, origRef.textRepresentation()).withIcon(ArendIcons.DIRECTORY) } else -> LookupElementBuilder.create(ref, ref.textRepresentation()) } @@ -102,7 +102,7 @@ open class VcReferenceImpl(element: T): PsiReferenceBase } override fun resolve(): PsiElement? { - var ref: Any? = VcResolveCache.resolveCached( { element -> + var ref: Any? = ArendResolveCache.resolveCached( { element -> element.scope.resolveName(element.referenceName) }, this.element) @@ -115,8 +115,8 @@ open class VcReferenceImpl(element: T): PsiReferenceBase if (ref.path == Prelude.MODULE_PATH) { TypeCheckingService.getInstance(element.project).prelude } else { - val list = element.module?.libraryConfig?.findVcFilesAndDirectories(ref.path) ?: return null - list.firstOrNull { it is VcFile } ?: list.firstOrNull() + val list = element.module?.libraryConfig?.findArendFilesAndDirectories(ref.path) ?: return null + list.firstOrNull { it is ArendFile } ?: list.firstOrNull() } } else -> null @@ -125,20 +125,20 @@ open class VcReferenceImpl(element: T): PsiReferenceBase } private fun doRename(oldNameIdentifier: PsiElement, rawName: String) { - val name = rawName.removeSuffix('.' + VcFileType.defaultExtension) - if (!VcNamesValidator().isIdentifier(name, oldNameIdentifier.project)) return - val factory = VcPsiFactory(oldNameIdentifier.project) + val name = rawName.removeSuffix('.' + ArendFileType.defaultExtension) + if (!ArendNamesValidator().isIdentifier(name, oldNameIdentifier.project)) return + val factory = ArendPsiFactory(oldNameIdentifier.project) val newNameIdentifier = when (oldNameIdentifier) { - is VcDefIdentifier -> factory.createDefIdentifier(name) - is VcRefIdentifier -> factory.createRefIdentifier(name) - is VcInfixArgument -> factory.createInfixName(name) - is VcPostfixArgument -> factory.createPostfixName(name) + is ArendDefIdentifier -> factory.createDefIdentifier(name) + is ArendRefIdentifier -> factory.createRefIdentifier(name) + is ArendInfixArgument -> factory.createInfixName(name) + is ArendPostfixArgument -> factory.createPostfixName(name) else -> error("Unsupported identifier type for `$name`") } oldNameIdentifier.replace(newNameIdentifier) } -open class VcPolyReferenceImpl(element: T): VcReferenceImpl(element), PsiPolyVariantReference { +open class ArendPolyReferenceImpl(element: T): ArendReferenceImpl(element), PsiPolyVariantReference { override fun multiResolve(incompleteCode: Boolean): Array { var ref: Any? = element.scope.resolveName(element.referenceName) if (ref is RedirectingReferable) ref = ref.originalReferable @@ -150,7 +150,7 @@ open class VcPolyReferenceImpl(element: T): VcReferenceI if (ref.path == Prelude.MODULE_PATH) { TypeCheckingService.getInstance(element.project).prelude?.let { listOf(it) } } else { - element.module?.libraryConfig?.findVcFilesAndDirectories(ref.path) + element.module?.libraryConfig?.findArendFilesAndDirectories(ref.path) }?.map { PsiElementResolveResult(it) }?.toTypedArray() ?: emptyArray() else -> emptyArray() } diff --git a/src/main/kotlin/org/vclang/resolving/VcResolveCache.kt b/src/main/kotlin/org/arend/resolving/ArendResolveCache.kt similarity index 64% rename from src/main/kotlin/org/vclang/resolving/VcResolveCache.kt rename to src/main/kotlin/org/arend/resolving/ArendResolveCache.kt index 060a021d8..52f80abaa 100644 --- a/src/main/kotlin/org/vclang/resolving/VcResolveCache.kt +++ b/src/main/kotlin/org/arend/resolving/ArendResolveCache.kt @@ -1,18 +1,18 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.util.containers.ContainerUtil -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import org.vclang.psi.ext.VcReferenceElement +import org.arend.naming.reference.Referable +import org.arend.psi.ext.ArendReferenceElement import java.util.concurrent.ConcurrentMap -class VcResolveCache { +class ArendResolveCache { companion object { - private val map : ConcurrentMap = + private val map : ConcurrentMap = ContainerUtil.createConcurrentWeakKeySoftValueMap(100, 0.75f, Runtime.getRuntime().availableProcessors(), ContainerUtil.canonicalStrategy()) - fun resolveCached(resolver: (VcReferenceElement) -> Referable?, ref : VcReferenceElement) : Referable? { + fun resolveCached(resolver: (ArendReferenceElement) -> Referable?, ref : ArendReferenceElement) : Referable? { var result = map[ref] if (result == null) { diff --git a/src/main/kotlin/org/vclang/resolving/DataLocalReferable.kt b/src/main/kotlin/org/arend/resolving/DataLocalReferable.kt similarity index 66% rename from src/main/kotlin/org/vclang/resolving/DataLocalReferable.kt rename to src/main/kotlin/org/arend/resolving/DataLocalReferable.kt index 7f635d14e..9478b74c9 100644 --- a/src/main/kotlin/org/vclang/resolving/DataLocalReferable.kt +++ b/src/main/kotlin/org/arend/resolving/DataLocalReferable.kt @@ -1,13 +1,13 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.openapi.application.runReadAction import com.intellij.psi.PsiElement import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.SourceInfo -import com.jetbrains.jetpad.vclang.naming.reference.DataContainer -import com.jetbrains.jetpad.vclang.naming.reference.LocalReferable -import org.vclang.psi.ext.moduleTextRepresentationImpl -import org.vclang.psi.ext.positionTextRepresentationImpl +import org.arend.error.SourceInfo +import org.arend.naming.reference.DataContainer +import org.arend.naming.reference.LocalReferable +import org.arend.psi.ext.moduleTextRepresentationImpl +import org.arend.psi.ext.positionTextRepresentationImpl class DataLocalReferable(private val psiElementPointer: SmartPsiElementPointer, name: String) : LocalReferable(name), DataContainer, SourceInfo { diff --git a/src/main/kotlin/org/vclang/resolving/DataLocatedReferable.kt b/src/main/kotlin/org/arend/resolving/DataLocatedReferable.kt similarity index 89% rename from src/main/kotlin/org/vclang/resolving/DataLocatedReferable.kt rename to src/main/kotlin/org/arend/resolving/DataLocatedReferable.kt index bfcac6cf5..c04826ae8 100644 --- a/src/main/kotlin/org/vclang/resolving/DataLocatedReferable.kt +++ b/src/main/kotlin/org/arend/resolving/DataLocatedReferable.kt @@ -1,16 +1,16 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.openapi.application.runReadAction import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.SmartPointerManager import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.SourceInfo -import com.jetbrains.jetpad.vclang.naming.reference.* -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.moduleTextRepresentationImpl -import org.vclang.psi.ext.positionTextRepresentationImpl -import org.vclang.typechecking.TypeCheckingService +import org.arend.error.SourceInfo +import org.arend.naming.reference.* +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.moduleTextRepresentationImpl +import org.arend.psi.ext.positionTextRepresentationImpl +import org.arend.typechecking.TypeCheckingService open class DataLocatedReferable( diff --git a/src/main/kotlin/org/vclang/resolving/PsiConcreteProvider.kt b/src/main/kotlin/org/arend/resolving/PsiConcreteProvider.kt similarity index 72% rename from src/main/kotlin/org/vclang/resolving/PsiConcreteProvider.kt rename to src/main/kotlin/org/arend/resolving/PsiConcreteProvider.kt index 7a57ce090..e871fb82e 100644 --- a/src/main/kotlin/org/vclang/resolving/PsiConcreteProvider.kt +++ b/src/main/kotlin/org/arend/resolving/PsiConcreteProvider.kt @@ -1,27 +1,27 @@ -package org.vclang.resolving +package org.arend.resolving import com.intellij.openapi.application.runReadAction import com.intellij.openapi.project.Project -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.naming.error.ReferenceError -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferableImpl -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.DefinitionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.CachingScope -import com.jetbrains.jetpad.vclang.naming.scope.ConvertingScope -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import com.jetbrains.jetpad.vclang.term.concrete.ConcreteDefinitionVisitor -import com.jetbrains.jetpad.vclang.typechecking.error.ProxyError -import com.jetbrains.jetpad.vclang.typechecking.typecheckable.provider.ConcreteProvider -import org.vclang.psi.* -import org.vclang.psi.ext.PsiConcreteReferable -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.typechecking.TypeCheckingService -import org.vclang.typechecking.execution.TypecheckingEventsProcessor +import org.arend.error.ErrorReporter +import org.arend.naming.error.ReferenceError +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.LocatedReferableImpl +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.resolving.visitor.DefinitionResolveNameVisitor +import org.arend.naming.scope.CachingScope +import org.arend.naming.scope.ConvertingScope +import org.arend.naming.scope.Scope +import org.arend.term.Precedence +import org.arend.term.concrete.Concrete +import org.arend.term.concrete.ConcreteDefinitionVisitor +import org.arend.typechecking.error.ProxyError +import org.arend.typechecking.typecheckable.provider.ConcreteProvider +import org.arend.psi.* +import org.arend.psi.ext.PsiConcreteReferable +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.typechecking.TypeCheckingService +import org.arend.typechecking.execution.TypecheckingEventsProcessor private object NullDefinition : Concrete.Definition(LocatedReferableImpl(Precedence.DEFAULT, "_", null, GlobalReferable.Kind.TYPECHECKABLE)) { @@ -35,7 +35,7 @@ class PsiConcreteProvider(private val project: Project, private val referableCon var cached = true var scope: Scope? = null val result = cache.computeIfAbsent(psiReferable) { runReadAction { - if (psiReferable is VcDefClass && psiReferable.fatArrow != null) { + if (psiReferable is ArendDefClass && psiReferable.fatArrow != null) { return@runReadAction NullDefinition } @@ -121,33 +121,33 @@ class PsiConcreteProvider(private val project: Project, private val referableCon override fun getConcreteFunction(referable: GlobalReferable): Concrete.FunctionDefinition? { val psiReferable = PsiLocatedReferable.fromReferable(referable) - return if (psiReferable is VcDefFunction) getConcreteDefinition(psiReferable) as? Concrete.FunctionDefinition else null + return if (psiReferable is ArendDefFunction) getConcreteDefinition(psiReferable) as? Concrete.FunctionDefinition else null } override fun getConcreteInstance(referable: GlobalReferable): Concrete.Instance? { val psiReferable = PsiLocatedReferable.fromReferable(referable) - return if (psiReferable is VcDefInstance) getConcreteDefinition(psiReferable) as? Concrete.Instance else null + return if (psiReferable is ArendDefInstance) getConcreteDefinition(psiReferable) as? Concrete.Instance else null } override fun getConcreteClass(referable: ClassReferable): Concrete.ClassDefinition? { val psiReferable = PsiLocatedReferable.fromReferable(referable) - return if (psiReferable is VcDefClass) getConcreteDefinition(psiReferable) as? Concrete.ClassDefinition else null + return if (psiReferable is ArendDefClass) getConcreteDefinition(psiReferable) as? Concrete.ClassDefinition else null } override fun getConcreteData(referable: GlobalReferable): Concrete.DataDefinition? { val psiReferable = PsiLocatedReferable.fromReferable(referable) - return if (psiReferable is VcDefData) getConcreteDefinition(psiReferable) as? Concrete.DataDefinition else null + return if (psiReferable is ArendDefData) getConcreteDefinition(psiReferable) as? Concrete.DataDefinition else null } override fun isRecord(classRef: ClassReferable): Boolean { val psiReferable = PsiLocatedReferable.fromReferable(classRef) - return psiReferable is VcDefClass && runReadAction { psiReferable.recordKw != null } + return psiReferable is ArendDefClass && runReadAction { psiReferable.recordKw != null } } - override fun isInstance(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is VcDefInstance + override fun isInstance(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is ArendDefInstance override fun isCoerce(ref: GlobalReferable): Boolean { val psiReferable = PsiLocatedReferable.fromReferable(ref) - return psiReferable is VcDefFunction && runReadAction { psiReferable.coerceKw != null } + return psiReferable is ArendDefFunction && runReadAction { psiReferable.coerceKw != null } } } \ No newline at end of file diff --git a/src/main/kotlin/org/arend/resolving/PsiPartialConcreteProvider.kt b/src/main/kotlin/org/arend/resolving/PsiPartialConcreteProvider.kt new file mode 100644 index 000000000..11b5ecb0c --- /dev/null +++ b/src/main/kotlin/org/arend/resolving/PsiPartialConcreteProvider.kt @@ -0,0 +1,30 @@ +package org.arend.resolving + +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.Reference +import org.arend.typechecking.typecheckable.provider.PartialConcreteProvider +import org.arend.psi.ArendDefClass +import org.arend.psi.ArendDefData +import org.arend.psi.ArendDefFunction +import org.arend.psi.ArendDefInstance +import org.arend.psi.ext.PsiLocatedReferable + + +object PsiPartialConcreteProvider : PartialConcreteProvider { + override fun getInstanceTypeReference(instance: GlobalReferable): Reference? = + (PsiLocatedReferable.fromReferable(instance) as? ArendDefInstance)?.let { getInstanceReference(it) } + + override fun isRecord(classRef: ClassReferable) = (PsiLocatedReferable.fromReferable(classRef) as? ArendDefClass)?.recordKw != null + + private fun getInstanceReference(instance: ArendDefInstance): Reference? = + instance.argumentAppExpr?.let { argumentAppExpr -> + argumentAppExpr.longNameExpr?.longName ?: argumentAppExpr.atomFieldsAcc?.let { it.atom.literal?.longName } + } + + override fun isInstance(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is ArendDefInstance + + override fun isCoerce(ref: GlobalReferable) = (PsiLocatedReferable.fromReferable(ref) as? ArendDefFunction)?.coerceKw != null + + override fun isData(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is ArendDefData +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/search/VcCustomSearcher.kt b/src/main/kotlin/org/arend/search/ArendCustomSearcher.kt similarity index 76% rename from src/main/kotlin/org/vclang/search/VcCustomSearcher.kt rename to src/main/kotlin/org/arend/search/ArendCustomSearcher.kt index f788cf216..5cdefd4f7 100644 --- a/src/main/kotlin/org/vclang/search/VcCustomSearcher.kt +++ b/src/main/kotlin/org/arend/search/ArendCustomSearcher.kt @@ -1,4 +1,4 @@ -package org.vclang.search +package org.arend.search import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.QueryExecutorBase @@ -13,12 +13,12 @@ import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.util.Processor import com.intellij.util.Processors import com.intellij.util.indexing.FileBasedIndex -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable +import org.arend.naming.reference.GlobalReferable import gnu.trove.THashSet -import org.vclang.psi.VcFile +import org.arend.psi.ArendFile import java.util.* -class VcCustomSearcher : QueryExecutorBase() { +class ArendCustomSearcher : QueryExecutorBase() { override fun processQuery(parameters: ReferencesSearch.SearchParameters, consumer: Processor) { val elementToSearch = parameters.elementToSearch val scope = parameters.scopeDeterminedByUser @@ -26,7 +26,7 @@ class VcCustomSearcher : QueryExecutorBase() @@ -34,9 +34,9 @@ class VcCustomSearcher : QueryExecutorBase if (element.fatArrow == null) "class" else "class synonym" - is VcClassField -> "class field" - is VcClassFieldSyn -> "class field synonym" - is VcDefInstance -> "class instance" - is VcDefData -> "data" - is VcConstructor -> "constructor" - is VcDefFunction -> "function" + is ArendDefClass -> if (element.fatArrow == null) "class" else "class synonym" + is ArendClassField -> "class field" + is ArendClassFieldSyn -> "class field synonym" + is ArendDefInstance -> "class instance" + is ArendDefData -> "data" + is ArendConstructor -> "constructor" + is ArendDefFunction -> "function" else -> "" } diff --git a/src/main/kotlin/org/vclang/search/VcGroupRuleProviders.kt b/src/main/kotlin/org/arend/search/ArendGroupRuleProviders.kt similarity index 61% rename from src/main/kotlin/org/vclang/search/VcGroupRuleProviders.kt rename to src/main/kotlin/org/arend/search/ArendGroupRuleProviders.kt index 603dfd0d7..f023ad254 100644 --- a/src/main/kotlin/org/vclang/search/VcGroupRuleProviders.kt +++ b/src/main/kotlin/org/arend/search/ArendGroupRuleProviders.kt @@ -1,4 +1,4 @@ -package org.vclang.search +package org.arend.search import com.intellij.openapi.project.Project import com.intellij.usages.PsiNamedElementUsageGroupBase @@ -9,42 +9,42 @@ import com.intellij.usages.impl.FileStructureGroupRuleProvider import com.intellij.usages.rules.PsiElementUsage import com.intellij.usages.rules.SingleParentUsageGroupingRule import com.intellij.usages.rules.UsageGroupingRule -import org.vclang.psi.* -import org.vclang.psi.ext.PsiReferable +import org.arend.psi.* +import org.arend.psi.ext.PsiReferable -class VcDefClassGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendDefClassGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcDefDataGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendDefDataGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcDefFunctionGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendDefFunctionGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcClassFieldGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendClassFieldGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcDefInstanceGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendDefInstanceGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcConstructorGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendConstructorGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } -class VcClassFieldSynGroupingRuleProvider : FileStructureGroupRuleProvider { +class ArendClassFieldSynGroupingRuleProvider : FileStructureGroupRuleProvider { override fun getUsageGroupingRule(project: Project): UsageGroupingRule? = - createGroupingRule() + createGroupingRule() } private inline fun createGroupingRule(): UsageGroupingRule { diff --git a/src/main/kotlin/org/vclang/search/VcWordScanner.kt b/src/main/kotlin/org/arend/search/ArendWordScanner.kt similarity index 78% rename from src/main/kotlin/org/vclang/search/VcWordScanner.kt rename to src/main/kotlin/org/arend/search/ArendWordScanner.kt index e971f0a7d..f3f3ca581 100644 --- a/src/main/kotlin/org/vclang/search/VcWordScanner.kt +++ b/src/main/kotlin/org/arend/search/ArendWordScanner.kt @@ -1,22 +1,22 @@ -package org.vclang.search +package org.arend.search import com.intellij.lang.cacheBuilder.VersionedWordsScanner import com.intellij.lang.cacheBuilder.WordOccurrence import com.intellij.util.Processor -import org.vclang.lexer.VcLexerAdapter -import org.vclang.psi.VC_COMMENTS -import org.vclang.psi.VC_NAMES +import org.arend.lexer.ArendLexerAdapter +import org.arend.psi.AREND_COMMENTS +import org.arend.psi.AREND_NAMES -open class VcWordScanner : VersionedWordsScanner() { - private val lexer = VcLexerAdapter() +open class ArendWordScanner : VersionedWordsScanner() { + private val lexer = ArendLexerAdapter() override fun processWords(fileText: CharSequence, processor: Processor) { lexer.start(fileText) val occurrence = WordOccurrence(fileText, 0, 0, null) while (lexer.tokenType != null) { - if (VC_COMMENTS.contains(lexer.tokenType)) { + if (AREND_COMMENTS.contains(lexer.tokenType)) { if (!stripWords(processor, fileText, lexer.tokenStart, lexer.tokenEnd, WordOccurrence.Kind.COMMENTS, occurrence)) return - } else if (VC_NAMES.contains(lexer.tokenType)) { + } else if (AREND_NAMES.contains(lexer.tokenType)) { var start = lexer.tokenStart if (fileText[start] == '`') start++ var end = lexer.tokenEnd @@ -30,10 +30,10 @@ open class VcWordScanner : VersionedWordsScanner() { companion object { - fun isVclangIdentifierPart(c: Char): Boolean = - isVclangIdentifierStart(c) || c in '0'..'9' || c == '\'' + fun isArendIdentifierPart(c: Char): Boolean = + isArendIdentifierStart(c) || c in '0'..'9' || c == '\'' - fun isVclangIdentifierStart(c: Char): Boolean = + fun isArendIdentifierStart(c: Char): Boolean = c in 'a'..'z' || c in 'A'..'Z' || c in "_~!@#$%^&*-+=<>?/|[];:" protected fun stripWords( @@ -58,7 +58,7 @@ open class VcWordScanner : VersionedWordsScanner() { } while (ch in 'a'..'z' || ch in 'A'..'Z' || ch == '-' || ch in '0'..'9') } - if (isVclangIdentifierStart(ch)) { + if (isArendIdentifierStart(ch)) { break } index++ @@ -69,7 +69,7 @@ open class VcWordScanner : VersionedWordsScanner() { index++ if (index == to) break val c = tokenText[index] - if (!isVclangIdentifierPart(c)) break + if (!isArendIdentifierPart(c)) break } val wordEnd = index occurrence.init(tokenText, wordStart, wordEnd, kind) diff --git a/src/main/kotlin/org/vclang/structure/VcPsiStructureViewFactory.kt b/src/main/kotlin/org/arend/structure/ArendPsiStructureViewFactory.kt similarity index 70% rename from src/main/kotlin/org/vclang/structure/VcPsiStructureViewFactory.kt rename to src/main/kotlin/org/arend/structure/ArendPsiStructureViewFactory.kt index 74328248b..69aa4e3d5 100644 --- a/src/main/kotlin/org/vclang/structure/VcPsiStructureViewFactory.kt +++ b/src/main/kotlin/org/arend/structure/ArendPsiStructureViewFactory.kt @@ -1,4 +1,4 @@ -package org.vclang.structure +package org.arend.structure import com.intellij.ide.structureView.StructureViewBuilder import com.intellij.ide.structureView.StructureViewModel @@ -6,14 +6,14 @@ import com.intellij.ide.structureView.TreeBasedStructureViewBuilder import com.intellij.lang.PsiStructureViewFactory import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiFile -import org.vclang.psi.VcFile +import org.arend.psi.ArendFile -class VcPsiStructureViewFactory : PsiStructureViewFactory { +class ArendPsiStructureViewFactory : PsiStructureViewFactory { override fun getStructureViewBuilder(psiFile: PsiFile): StructureViewBuilder? { - if (psiFile !is VcFile) return null + if (psiFile !is ArendFile) return null return object : TreeBasedStructureViewBuilder() { override fun createStructureViewModel(editor: Editor?): StructureViewModel = - VcStructureViewModel(editor, psiFile) + ArendStructureViewModel(editor, psiFile) } } } diff --git a/src/main/kotlin/org/vclang/structure/VcStructureViewModel.kt b/src/main/kotlin/org/arend/structure/ArendStructureViewModel.kt similarity index 57% rename from src/main/kotlin/org/vclang/structure/VcStructureViewModel.kt rename to src/main/kotlin/org/arend/structure/ArendStructureViewModel.kt index 22bf1a8cc..6652322e6 100644 --- a/src/main/kotlin/org/vclang/structure/VcStructureViewModel.kt +++ b/src/main/kotlin/org/arend/structure/ArendStructureViewModel.kt @@ -1,4 +1,4 @@ -package org.vclang.structure +package org.arend.structure import com.intellij.ide.structureView.StructureViewModel import com.intellij.ide.structureView.StructureViewModelBase @@ -8,16 +8,16 @@ import com.intellij.navigation.ItemPresentation import com.intellij.openapi.editor.Editor import com.intellij.pom.Navigatable import com.intellij.psi.NavigatablePsiElement -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.navigation.getPresentationForStructure -import org.vclang.psi.* -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.ext.impl.ClassDefinitionAdapter -import org.vclang.psi.ext.impl.DataDefinitionAdapter - -class VcStructureViewModel(editor: Editor?, file: VcFile) - : StructureViewModelBase(file, editor, VcStructureViewElement(file)), +import org.arend.term.group.Group +import org.arend.navigation.getPresentationForStructure +import org.arend.psi.* +import org.arend.psi.ext.PsiReferable +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.ext.impl.ClassDefinitionAdapter +import org.arend.psi.ext.impl.DataDefinitionAdapter + +class ArendStructureViewModel(editor: Editor?, file: ArendFile) + : StructureViewModelBase(file, editor, ArendStructureViewElement(file)), StructureViewModel.ElementInfoProvider { init { @@ -25,23 +25,23 @@ class VcStructureViewModel(editor: Editor?, file: VcFile) } override fun isAlwaysShowsPlus(element: StructureViewTreeElement): Boolean = - element.value is VcFile + element.value is ArendFile override fun isAlwaysLeaf(element: StructureViewTreeElement): Boolean = when (element.value) { - is VcFile, - is VcDefClass, - is VcDefData, - is VcDefInstance, - is VcDefFunction -> false - is VcClassField, - is VcClassFieldSyn, - is VcClassImplement, - is VcConstructor -> true + is ArendFile, + is ArendDefClass, + is ArendDefData, + is ArendDefInstance, + is ArendDefFunction -> false + is ArendClassField, + is ArendClassFieldSyn, + is ArendClassImplement, + is ArendConstructor -> true else -> error("Unexpected tree element") } } -private class VcStructureViewElement(val psi: VcCompositeElement) +private class ArendStructureViewElement(val psi: ArendCompositeElement) : StructureViewTreeElement, Navigatable by (psi as NavigatablePsiElement) { override fun getValue(): Any = psi @@ -49,7 +49,7 @@ private class VcStructureViewElement(val psi: VcCompositeElement) override fun getPresentation(): ItemPresentation = getPresentationForStructure(psi) override fun getChildren(): Array = - childElements.mapNotNull { e -> (e as? VcCompositeElement)?.let { VcStructureViewElement(it) } }.toTypedArray() + childElements.mapNotNull { e -> (e as? ArendCompositeElement)?.let { ArendStructureViewElement(it) } }.toTypedArray() private val childElements: List get() = when (psi) { diff --git a/src/main/kotlin/org/arend/typechecking/ArendLibraryResolver.kt b/src/main/kotlin/org/arend/typechecking/ArendLibraryResolver.kt new file mode 100644 index 000000000..51a4c0bd7 --- /dev/null +++ b/src/main/kotlin/org/arend/typechecking/ArendLibraryResolver.kt @@ -0,0 +1,15 @@ +package org.arend.typechecking + +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.project.Project +import org.arend.library.Library +import org.arend.library.resolver.LibraryResolver +import org.arend.module.ArendRawLibrary + + +class ArendLibraryResolver(private val project: Project): LibraryResolver { + override fun resolve(name: String): Library? { + val module = ModuleManager.getInstance(project)?.findModuleByName(name) ?: return null + return ArendRawLibrary(module, TypeCheckingService.getInstance(project).typecheckerState) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/arend/typechecking/PsiInstanceProviderSet.kt b/src/main/kotlin/org/arend/typechecking/PsiInstanceProviderSet.kt new file mode 100644 index 000000000..fcc7fbea6 --- /dev/null +++ b/src/main/kotlin/org/arend/typechecking/PsiInstanceProviderSet.kt @@ -0,0 +1,30 @@ +package org.arend.typechecking + +import com.intellij.openapi.application.runReadAction +import org.arend.naming.reference.TCReferable +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.scope.CachingScope +import org.arend.naming.scope.ScopeFactory +import org.arend.typechecking.instance.provider.InstanceProvider +import org.arend.typechecking.instance.provider.InstanceProviderSet +import org.arend.typechecking.typecheckable.provider.ConcreteProvider +import org.arend.psi.ArendFile +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.moduleScopeProvider + + +class PsiInstanceProviderSet(private val concreteProvider: ConcreteProvider, private val referableConverter: ReferableConverter) : InstanceProviderSet() { + override fun get(referable: TCReferable): InstanceProvider? { + val result = super.get(referable) + if (result != null) { + return result + } + + val psiElement = PsiLocatedReferable.fromReferable(referable) as? ArendCompositeElement ?: return null + return runReadAction { + val file = psiElement.containingFile as? ArendFile ?: return@runReadAction null + if (collectInstances(file, CachingScope.make(ScopeFactory.parentScopeForGroup(file, file.moduleScopeProvider, true)), concreteProvider, referableConverter)) super.get(referable) else null + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/typechecking/TestBasedTypechecking.kt b/src/main/kotlin/org/arend/typechecking/TestBasedTypechecking.kt similarity index 75% rename from src/main/kotlin/org/vclang/typechecking/TestBasedTypechecking.kt rename to src/main/kotlin/org/arend/typechecking/TestBasedTypechecking.kt index 3d075340f..9da319e43 100644 --- a/src/main/kotlin/org/vclang/typechecking/TestBasedTypechecking.kt +++ b/src/main/kotlin/org/arend/typechecking/TestBasedTypechecking.kt @@ -1,18 +1,17 @@ -package org.vclang.typechecking +package org.arend.typechecking import com.intellij.openapi.application.runReadAction -import com.jetbrains.jetpad.vclang.core.definition.Definition -import com.jetbrains.jetpad.vclang.naming.reference.TCReferable -import com.jetbrains.jetpad.vclang.typechecking.TypecheckerState -import com.jetbrains.jetpad.vclang.typechecking.order.dependency.DependencyListener -import com.jetbrains.jetpad.vclang.typechecking.order.listener.TypecheckingOrderingListener -import com.jetbrains.jetpad.vclang.typechecking.typecheckable.provider.ConcreteProvider -import org.vclang.psi.VcFile -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.resolving.DataLocatedReferable -import org.vclang.typechecking.error.TypecheckingErrorReporter -import org.vclang.typechecking.execution.FullModulePath -import org.vclang.typechecking.execution.TypecheckingEventsProcessor +import org.arend.core.definition.Definition +import org.arend.naming.reference.TCReferable +import org.arend.typechecking.order.dependency.DependencyListener +import org.arend.typechecking.order.listener.TypecheckingOrderingListener +import org.arend.typechecking.typecheckable.provider.ConcreteProvider +import org.arend.psi.ArendFile +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.resolving.DataLocatedReferable +import org.arend.typechecking.error.TypecheckingErrorReporter +import org.arend.typechecking.execution.FullModulePath +import org.arend.typechecking.execution.TypecheckingEventsProcessor class TestBasedTypechecking( @@ -57,7 +56,7 @@ class TestBasedTypechecking( } eventsProcessor.onTestFinished(ref) runReadAction { - val file = ref.containingFile as? VcFile ?: return@runReadAction + val file = ref.containingFile as? ArendFile ?: return@runReadAction typecheckedModules.add(FullModulePath(file.libraryName ?: return@runReadAction, file.modulePath)) } } diff --git a/src/main/kotlin/org/vclang/typechecking/TypeCheckingService.kt b/src/main/kotlin/org/arend/typechecking/TypeCheckingService.kt similarity index 73% rename from src/main/kotlin/org/vclang/typechecking/TypeCheckingService.kt rename to src/main/kotlin/org/arend/typechecking/TypeCheckingService.kt index 1ff0c7746..f212716fc 100644 --- a/src/main/kotlin/org/vclang/typechecking/TypeCheckingService.kt +++ b/src/main/kotlin/org/arend/typechecking/TypeCheckingService.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking +package org.arend.typechecking import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.module.ModuleUtil @@ -9,33 +9,31 @@ import com.intellij.psi.impl.AnyPsiChangeListener import com.intellij.psi.impl.PsiManagerImpl import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.psi.tree.IElementType -import com.jetbrains.jetpad.vclang.core.definition.Definition -import com.jetbrains.jetpad.vclang.library.LibraryManager -import com.jetbrains.jetpad.vclang.module.scopeprovider.EmptyModuleScopeProvider -import com.jetbrains.jetpad.vclang.module.scopeprovider.LocatingModuleScopeProvider -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.reference.converter.SimpleReferableConverter -import com.jetbrains.jetpad.vclang.term.prettyprint.PrettyPrinterConfig -import com.jetbrains.jetpad.vclang.typechecking.SimpleTypecheckerState -import com.jetbrains.jetpad.vclang.typechecking.TypecheckerState -import com.jetbrains.jetpad.vclang.typechecking.order.dependency.DependencyCollector -import com.jetbrains.jetpad.vclang.typechecking.order.dependency.DependencyListener -import com.jetbrains.jetpad.vclang.util.FileUtils -import org.vclang.module.VcPreludeLibrary -import org.vclang.module.VcRawLibrary -import org.vclang.module.util.defaultRoot -import org.vclang.psi.VcDefinition -import org.vclang.psi.VcElementTypes -import org.vclang.psi.VcFile -import org.vclang.psi.ancestors -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.ext.impl.DataDefinitionAdapter -import org.vclang.resolving.VcReferableConverter -import org.vclang.resolving.VcResolveCache -import org.vclang.typechecking.error.LogErrorReporter +import org.arend.core.definition.Definition +import org.arend.library.LibraryManager +import org.arend.module.scopeprovider.EmptyModuleScopeProvider +import org.arend.module.scopeprovider.LocatingModuleScopeProvider +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.converter.ReferableConverter +import org.arend.naming.reference.converter.SimpleReferableConverter +import org.arend.term.prettyprint.PrettyPrinterConfig +import org.arend.typechecking.order.dependency.DependencyCollector +import org.arend.typechecking.order.dependency.DependencyListener +import org.arend.util.FileUtils +import org.arend.module.ArendPreludeLibrary +import org.arend.module.ArendRawLibrary +import org.arend.module.util.defaultRoot +import org.arend.psi.ArendDefinition +import org.arend.psi.ArendElementTypes +import org.arend.psi.ArendFile +import org.arend.psi.ancestors +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendCompositeElement +import org.arend.psi.ext.impl.DataDefinitionAdapter +import org.arend.resolving.ArendReferableConverter +import org.arend.resolving.ArendResolveCache +import org.arend.typechecking.error.LogErrorReporter interface TypeCheckingService { val libraryManager: LibraryManager @@ -48,9 +46,9 @@ interface TypeCheckingService { val project: Project - val prelude: VcFile? + val prelude: ArendFile? - fun getTypechecked(definition: VcDefinition): Definition? + fun getTypechecked(definition: ArendDefinition): Definition? fun updateDefinition(referable: LocatedReferable) @@ -66,11 +64,11 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi override val typecheckerState = SimpleTypecheckerState() override val dependencyListener = DependencyCollector(typecheckerState) private val libraryErrorReporter = LogErrorReporter(PrettyPrinterConfig.DEFAULT) - override val libraryManager = LibraryManager(VcLibraryResolver(project), EmptyModuleScopeProvider.INSTANCE, null, libraryErrorReporter, libraryErrorReporter) + override val libraryManager = LibraryManager(ArendLibraryResolver(project), EmptyModuleScopeProvider.INSTANCE, null, libraryErrorReporter, libraryErrorReporter) private val simpleReferableConverter = SimpleReferableConverter() override val referableConverter: ReferableConverter - get() = VcReferableConverter(project, simpleReferableConverter) + get() = ArendReferableConverter(project, simpleReferableConverter) init { libraryManager.moduleScopeProvider = LocatingModuleScopeProvider(libraryManager) @@ -78,23 +76,23 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi PsiManager.getInstance(project).addPsiTreeChangeListener(TypeCheckerPsiTreeChangeListener()) project.messageBus.connect(project).subscribe(PsiManagerImpl.ANY_PSI_CHANGE_TOPIC, object : AnyPsiChangeListener.Adapter() { override fun beforePsiChanged(isPhysical: Boolean) { - VcResolveCache.clearCache() + ArendResolveCache.clearCache() } }) VirtualFileManager.getInstance().addVirtualFileListener(MyVirtualFileListener(), project) } - override val prelude: VcFile? + override val prelude: ArendFile? get() { for (library in libraryManager.registeredLibraries) { - if (library is VcPreludeLibrary) { + if (library is ArendPreludeLibrary) { return library.prelude } } return null } - override fun getTypechecked(definition: VcDefinition) = + override fun getTypechecked(definition: ArendDefinition) = simpleReferableConverter.toDataLocatedReferable(definition)?.let { typecheckerState.getTypechecked(it) } override fun updateDefinition(referable: LocatedReferable) { @@ -135,7 +133,7 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi libraryManager.getRegisteredLibrary(module.name)?.let { libraryManager.unloadLibrary(it) } } if (root != null && root == newParent) { - libraryManager.loadLibrary(VcRawLibrary(module, typecheckerState)) + libraryManager.loadLibrary(ArendRawLibrary(module, typecheckerState)) } } } @@ -174,7 +172,7 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi } override fun beforeChildRemoval(event: PsiTreeChangeEvent) { - if (event.child is VcFile) { // whole file has been removed + if (event.child is ArendFile) { // whole file has been removed for (child in event.child.children) invalidateChild(child) } else { processChildren(event) @@ -183,7 +181,7 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi } private fun processParent(event: PsiTreeChangeEvent, checkCommentStart: Boolean) { - if (event.file !is VcFile) { + if (event.file !is ArendFile) { return } val child = event.child @@ -201,7 +199,7 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi } if (checkCommentStart) { - var node = (child as? VcCompositeElement)?.node ?: child as? LeafPsiElement + var node = (child as? ArendCompositeElement)?.node ?: child as? LeafPsiElement while (node != null && node !is LeafPsiElement) { val first = node.firstChildNode if (first == null || node.lastChildNode != first) { @@ -218,7 +216,7 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi } val ancestors = event.parent.ancestors - val definition = ancestors.filterIsInstance().firstOrNull() ?: return + val definition = ancestors.filterIsInstance().firstOrNull() ?: return updateDefinition(definition) } @@ -234,11 +232,11 @@ class TypeCheckingServiceImpl(override val project: Project) : TypeCheckingServi } private fun processChildren(event: PsiTreeChangeEvent) { - if (event.file is VcFile) { + if (event.file is ArendFile) { invalidateChild(event.child) } } } } -private fun isComment(element: IElementType) = element == VcElementTypes.BLOCK_COMMENT || element == VcElementTypes.LINE_COMMENT +private fun isComment(element: IElementType) = element == ArendElementTypes.BLOCK_COMMENT || element == ArendElementTypes.LINE_COMMENT diff --git a/src/main/kotlin/org/vclang/typechecking/error/LogErrorReporter.kt b/src/main/kotlin/org/arend/typechecking/error/LogErrorReporter.kt similarity index 61% rename from src/main/kotlin/org/vclang/typechecking/error/LogErrorReporter.kt rename to src/main/kotlin/org/arend/typechecking/error/LogErrorReporter.kt index 400c703a8..c14d5e428 100644 --- a/src/main/kotlin/org/vclang/typechecking/error/LogErrorReporter.kt +++ b/src/main/kotlin/org/arend/typechecking/error/LogErrorReporter.kt @@ -1,11 +1,11 @@ -package org.vclang.typechecking.error +package org.arend.typechecking.error import com.intellij.openapi.diagnostic.Logger -import com.jetbrains.jetpad.vclang.error.Error.Level -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.error.GeneralError -import com.jetbrains.jetpad.vclang.error.doc.DocStringBuilder -import com.jetbrains.jetpad.vclang.term.prettyprint.PrettyPrinterConfig +import org.arend.error.Error.Level +import org.arend.error.ErrorReporter +import org.arend.error.GeneralError +import org.arend.error.doc.DocStringBuilder +import org.arend.term.prettyprint.PrettyPrinterConfig class LogErrorReporter(private val ppConfig: PrettyPrinterConfig): ErrorReporter { diff --git a/src/main/kotlin/org/vclang/typechecking/error/ParserError.kt b/src/main/kotlin/org/arend/typechecking/error/ParserError.kt similarity index 72% rename from src/main/kotlin/org/vclang/typechecking/error/ParserError.kt rename to src/main/kotlin/org/arend/typechecking/error/ParserError.kt index 57fd35305..f39a3ff2b 100644 --- a/src/main/kotlin/org/vclang/typechecking/error/ParserError.kt +++ b/src/main/kotlin/org/arend/typechecking/error/ParserError.kt @@ -1,9 +1,9 @@ -package org.vclang.typechecking.error +package org.arend.typechecking.error import com.intellij.psi.PsiErrorElement import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.GeneralError -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable +import org.arend.error.GeneralError +import org.arend.naming.reference.GlobalReferable class ParserError(private val psiElement: SmartPsiElementPointer, private val referable: GlobalReferable, errorDescription: String) : GeneralError(Level.ERROR, errorDescription) { diff --git a/src/main/kotlin/org/vclang/typechecking/error/PsiSourceInfo.kt b/src/main/kotlin/org/arend/typechecking/error/PsiSourceInfo.kt similarity index 66% rename from src/main/kotlin/org/vclang/typechecking/error/PsiSourceInfo.kt rename to src/main/kotlin/org/arend/typechecking/error/PsiSourceInfo.kt index fdd9a6000..984c4b6d4 100644 --- a/src/main/kotlin/org/vclang/typechecking/error/PsiSourceInfo.kt +++ b/src/main/kotlin/org/arend/typechecking/error/PsiSourceInfo.kt @@ -1,12 +1,12 @@ -package org.vclang.typechecking.error +package org.arend.typechecking.error import com.intellij.openapi.application.runReadAction import com.intellij.psi.PsiElement import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.SourceInfo -import com.jetbrains.jetpad.vclang.naming.reference.DataContainer -import org.vclang.psi.ext.moduleTextRepresentationImpl -import org.vclang.psi.ext.positionTextRepresentationImpl +import org.arend.error.SourceInfo +import org.arend.naming.reference.DataContainer +import org.arend.psi.ext.moduleTextRepresentationImpl +import org.arend.psi.ext.positionTextRepresentationImpl class PsiSourceInfo(private val psiPointer: SmartPsiElementPointer) : SourceInfo, DataContainer { diff --git a/src/main/kotlin/org/vclang/typechecking/error/TypecheckingErrorReporter.kt b/src/main/kotlin/org/arend/typechecking/error/TypecheckingErrorReporter.kt similarity index 88% rename from src/main/kotlin/org/vclang/typechecking/error/TypecheckingErrorReporter.kt rename to src/main/kotlin/org/arend/typechecking/error/TypecheckingErrorReporter.kt index 49c746e9b..c452dfd4b 100644 --- a/src/main/kotlin/org/vclang/typechecking/error/TypecheckingErrorReporter.kt +++ b/src/main/kotlin/org/arend/typechecking/error/TypecheckingErrorReporter.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.error +package org.arend.typechecking.error import com.intellij.execution.filters.HyperlinkInfo import com.intellij.execution.testframework.CompositePrintable @@ -11,16 +11,16 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.SmartPointerManager import com.intellij.psi.SmartPsiElementPointer -import com.jetbrains.jetpad.vclang.error.Error -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.error.GeneralError -import com.jetbrains.jetpad.vclang.error.doc.* -import com.jetbrains.jetpad.vclang.naming.reference.DataContainer -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import com.jetbrains.jetpad.vclang.term.prettyprint.PrettyPrinterConfig -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.typechecking.execution.ProxyAction -import org.vclang.typechecking.execution.TypecheckingEventsProcessor +import org.arend.error.Error +import org.arend.error.ErrorReporter +import org.arend.error.GeneralError +import org.arend.error.doc.* +import org.arend.naming.reference.DataContainer +import org.arend.naming.reference.ModuleReferable +import org.arend.term.prettyprint.PrettyPrinterConfig +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.typechecking.execution.ProxyAction +import org.arend.typechecking.execution.TypecheckingEventsProcessor private fun levelToContentType(level: Error.Level): ConsoleViewContentType = when (level) { Error.Level.ERROR -> ERROR_OUTPUT diff --git a/src/main/kotlin/org/vclang/typechecking/execution/DefinitionProxy.kt b/src/main/kotlin/org/arend/typechecking/execution/DefinitionProxy.kt similarity index 96% rename from src/main/kotlin/org/vclang/typechecking/execution/DefinitionProxy.kt rename to src/main/kotlin/org/arend/typechecking/execution/DefinitionProxy.kt index 5d82b8906..58a6afb4e 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/DefinitionProxy.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/DefinitionProxy.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.Location import com.intellij.execution.PsiLocation diff --git a/src/main/kotlin/org/arend/typechecking/execution/FullModulePath.kt b/src/main/kotlin/org/arend/typechecking/execution/FullModulePath.kt new file mode 100644 index 000000000..c6a4f4379 --- /dev/null +++ b/src/main/kotlin/org/arend/typechecking/execution/FullModulePath.kt @@ -0,0 +1,6 @@ +package org.arend.typechecking.execution + +import org.arend.module.ModulePath + + +data class FullModulePath(val libraryName: String, val modulePath: ModulePath) \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckCommand.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckCommand.kt similarity index 76% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckCommand.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckCommand.kt index 3308fbbe3..e714ad061 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckCommand.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckCommand.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution data class TypeCheckCommand( val library: String = "", diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckProcessHandler.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckProcessHandler.kt similarity index 83% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckProcessHandler.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckProcessHandler.kt index 52a4ec028..438f13ef9 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckProcessHandler.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckProcessHandler.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.process.ProcessHandler import com.intellij.openapi.application.ApplicationManager @@ -10,38 +10,38 @@ import com.intellij.openapi.progress.util.ProgressIndicatorBase import com.intellij.psi.PsiElement import com.intellij.psi.PsiErrorElement import com.intellij.psi.SmartPointerManager -import com.jetbrains.jetpad.vclang.core.definition.Definition -import com.jetbrains.jetpad.vclang.error.GeneralError -import com.jetbrains.jetpad.vclang.library.Library -import com.jetbrains.jetpad.vclang.library.SourceLibrary -import com.jetbrains.jetpad.vclang.library.error.LibraryError -import com.jetbrains.jetpad.vclang.library.error.ModuleInSeveralLibrariesError -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.module.error.ModuleNotFoundError -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.DefinitionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import com.jetbrains.jetpad.vclang.term.group.Group -import com.jetbrains.jetpad.vclang.term.prettyprint.PrettyPrinterConfig -import com.jetbrains.jetpad.vclang.typechecking.CancellationIndicator -import com.jetbrains.jetpad.vclang.typechecking.order.Ordering -import com.jetbrains.jetpad.vclang.typechecking.order.listener.CollectingOrderingListener -import com.jetbrains.jetpad.vclang.typechecking.order.listener.TypecheckingOrderingListener +import org.arend.core.definition.Definition +import org.arend.error.GeneralError +import org.arend.library.Library +import org.arend.library.SourceLibrary +import org.arend.library.error.LibraryError +import org.arend.library.error.ModuleInSeveralLibrariesError +import org.arend.module.ModulePath +import org.arend.module.error.ModuleNotFoundError +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.ModuleReferable +import org.arend.naming.resolving.visitor.DefinitionResolveNameVisitor +import org.arend.naming.scope.ScopeFactory +import org.arend.term.concrete.Concrete +import org.arend.term.group.Group +import org.arend.term.prettyprint.PrettyPrinterConfig +import org.arend.typechecking.CancellationIndicator +import org.arend.typechecking.order.Ordering +import org.arend.typechecking.order.listener.CollectingOrderingListener +import org.arend.typechecking.order.listener.TypecheckingOrderingListener import org.jetbrains.ide.PooledThreadExecutor -import org.vclang.module.VcRawLibrary -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcFile -import org.vclang.psi.VcStatement -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.findGroupByFullName -import org.vclang.resolving.PsiConcreteProvider -import org.vclang.typechecking.PsiInstanceProviderSet -import org.vclang.typechecking.TestBasedTypechecking -import org.vclang.typechecking.TypeCheckingService -import org.vclang.typechecking.error.ParserError -import org.vclang.typechecking.error.TypecheckingErrorReporter +import org.arend.module.ArendRawLibrary +import org.arend.psi.ArendDefClass +import org.arend.psi.ArendFile +import org.arend.psi.ArendStatement +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.findGroupByFullName +import org.arend.resolving.PsiConcreteProvider +import org.arend.typechecking.PsiInstanceProviderSet +import org.arend.typechecking.TestBasedTypechecking +import org.arend.typechecking.TypeCheckingService +import org.arend.typechecking.error.ParserError +import org.arend.typechecking.error.TypecheckingErrorReporter import java.io.OutputStream @@ -72,7 +72,7 @@ class TypeCheckProcessHandler( } val registeredLibraries = typeCheckerService.libraryManager.registeredLibraries - val libraries = if (command.library == "" && modulePath == null) registeredLibraries.filterIsInstance() else { + val libraries = if (command.library == "" && modulePath == null) registeredLibraries.filterIsInstance() else { val library = if (command.library != "") typeCheckerService.libraryManager.getRegisteredLibrary(command.library) else findLibrary(modulePath!!, registeredLibraries, typecheckingErrorReporter) if (library == null) { if (command.library != "") { @@ -82,7 +82,7 @@ class TypeCheckProcessHandler( destroyProcessImpl() return } - if (library !is VcRawLibrary) { + if (library !is ArendRawLibrary) { typecheckingErrorReporter.report(LibraryError.incorrectLibrary(library.name)) eventsProcessor.onSuitesFinished() destroyProcessImpl() @@ -130,7 +130,7 @@ class TypeCheckProcessHandler( } else { val ref = runReadAction { val group = modules.firstOrNull()?.findGroupByFullName(command.definitionFullName.split('.')) - if (group is VcDefClass && group.fatArrow != null) null else group?.referable + if (group is ArendDefClass && group.fatArrow != null) null else group?.referable } if (ref == null) { if (modules.isNotEmpty()) { @@ -208,7 +208,7 @@ class TypeCheckProcessHandler( } } - private fun reportParserErrors(group: PsiElement, module: VcFile, typecheckingErrorReporter: TypecheckingErrorReporter) { + private fun reportParserErrors(group: PsiElement, module: ArendFile, typecheckingErrorReporter: TypecheckingErrorReporter) { for (child in group.children) { when (child) { is PsiErrorElement -> { @@ -220,7 +220,7 @@ class TypeCheckProcessHandler( typecheckingErrorReporter.eventsProcessor.onSuiteFailure(modulePath) } } - is VcStatement -> child.definition?.let { reportParserErrors(it, module, typecheckingErrorReporter) } + is ArendStatement -> child.definition?.let { reportParserErrors(it, module, typecheckingErrorReporter) } } } } diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationEditor.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationEditor.kt similarity index 81% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationEditor.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationEditor.kt index 28009cf6f..71cf5cef4 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationEditor.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationEditor.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.openapi.options.SettingsEditor import com.intellij.openapi.project.Project @@ -6,7 +6,7 @@ import com.intellij.ui.components.Label import com.intellij.ui.layout.LayoutBuilder import com.intellij.ui.layout.Row import com.intellij.ui.layout.panel -import org.vclang.typechecking.execution.configurations.TypeCheckConfiguration +import org.arend.typechecking.execution.configurations.TypeCheckConfiguration import javax.swing.JComponent import javax.swing.JTextField @@ -17,7 +17,7 @@ class TypeCheckRunConfigurationEditor(private val project: Project) : SettingsEd private val definitionNameComponent = JTextField() override fun resetEditorFrom(configuration: TypeCheckConfiguration) { - with(configuration.vclangTypeCheckCommand) { + with(configuration.arendTypeCheckCommand) { libraryComponent.text = library modulePathComponent.text = modulePath definitionNameComponent.text = definitionFullName @@ -25,7 +25,7 @@ class TypeCheckRunConfigurationEditor(private val project: Project) : SettingsEd } override fun applyEditorTo(configuration: TypeCheckConfiguration) { - configuration.vclangTypeCheckCommand = TypeCheckCommand( + configuration.arendTypeCheckCommand = TypeCheckCommand( libraryComponent.text, modulePathComponent.text, definitionNameComponent.text @@ -33,10 +33,10 @@ class TypeCheckRunConfigurationEditor(private val project: Project) : SettingsEd } override fun createEditor(): JComponent = panel { - labeledRow("Vclang library:", libraryComponent) { + labeledRow("Arend library:", libraryComponent) { libraryComponent() } - labeledRow("Vclang module:", modulePathComponent) { + labeledRow("Arend module:", modulePathComponent) { modulePathComponent() } labeledRow("Definition:", definitionNameComponent) { diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationProducer.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationProducer.kt similarity index 71% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationProducer.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationProducer.kt index 56955a391..27ed33cd3 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunConfigurationProducer.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunConfigurationProducer.kt @@ -1,15 +1,15 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.actions.ConfigurationContext import com.intellij.execution.actions.RunConfigurationProducer import com.intellij.openapi.util.Ref import com.intellij.psi.PsiElement -import org.vclang.psi.VcDefinition -import org.vclang.psi.VcFile -import org.vclang.psi.ext.fullName -import org.vclang.psi.parentOfType -import org.vclang.typechecking.execution.configurations.TypeCheckConfiguration -import org.vclang.typechecking.execution.configurations.TypeCheckConfigurationType +import org.arend.psi.ArendDefinition +import org.arend.psi.ArendFile +import org.arend.psi.ext.fullName +import org.arend.psi.parentOfType +import org.arend.typechecking.execution.configurations.TypeCheckConfiguration +import org.arend.typechecking.execution.configurations.TypeCheckConfigurationType class TypeCheckRunConfigurationProducer: RunConfigurationProducer(TypeCheckConfigurationType()) { @@ -17,13 +17,13 @@ class TypeCheckRunConfigurationProducer: RunConfigurationProducer): Boolean { val myConfiguration = configurationFromContext(context, sourceElement) ?: return false configuration.name = myConfiguration.name - configuration.vclangTypeCheckCommand = myConfiguration.command + configuration.arendTypeCheckCommand = myConfiguration.command configuration.configurationModule.module = context.module return true } @@ -32,15 +32,15 @@ class TypeCheckRunConfigurationProducer: RunConfigurationProducer?): MyConfiguration? { val element = context.location?.psiElement - val definition = element?.parentOfType(false) ?: element?.parentOfType(false) + val definition = element?.parentOfType(false) ?: element?.parentOfType(false) when (definition) { - is VcDefinition -> { - val file = definition.containingFile as? VcFile ?: return null + is ArendDefinition -> { + val file = definition.containingFile as? ArendFile ?: return null sourceElement?.set(definition) val fullName = definition.fullName return MyConfiguration("Typecheck $fullName", TypeCheckCommand("", file.fullName, fullName)) } - is VcFile -> { + is ArendFile -> { sourceElement?.set(definition) val fullName = definition.fullName return MyConfiguration("Typecheck $fullName", TypeCheckCommand("", fullName)) diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunLineMarkerContributor.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunLineMarkerContributor.kt similarity index 70% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunLineMarkerContributor.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunLineMarkerContributor.kt index ede0b4bc2..84a7f92db 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunLineMarkerContributor.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunLineMarkerContributor.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.lineMarker.ExecutorAction import com.intellij.execution.lineMarker.RunLineMarkerContributor @@ -6,22 +6,19 @@ import com.intellij.icons.AllIcons import com.intellij.psi.PsiElement import com.intellij.psi.impl.source.tree.LeafPsiElement import com.intellij.util.Function -import com.jetbrains.jetpad.vclang.core.definition.Definition -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcDefIdentifier -import org.vclang.psi.VcDefinition -import org.vclang.psi.VcElementTypes -import org.vclang.psi.ext.fullName -import org.vclang.typechecking.TypeCheckingService +import org.arend.core.definition.Definition +import org.arend.psi.* +import org.arend.psi.ext.fullName +import org.arend.typechecking.TypeCheckingService class TypeCheckRunLineMarkerContributor : RunLineMarkerContributor() { override fun getInfo(element: PsiElement): Info? { - if (!(element is LeafPsiElement && element.node.elementType == VcElementTypes.ID)) { + if (!(element is LeafPsiElement && element.node.elementType == ArendElementTypes.ID)) { return null } - val parent = (element.parent as? VcDefIdentifier)?.parent as? VcDefinition ?: return null - if (parent is VcDefClass && parent.fatArrow != null) { + val parent = (element.parent as? ArendDefIdentifier)?.parent as? ArendDefinition ?: return null + if (parent is ArendDefClass && parent.fatArrow != null) { return null } diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunner.kt b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunner.kt similarity index 79% rename from src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunner.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunner.kt index aea866bec..c3f348742 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypeCheckRunner.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypeCheckRunner.kt @@ -1,9 +1,9 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.configurations.RunProfile import com.intellij.execution.executors.DefaultRunExecutor import com.intellij.execution.runners.DefaultProgramRunner -import org.vclang.typechecking.execution.configurations.TypeCheckConfiguration +import org.arend.typechecking.execution.configurations.TypeCheckConfiguration class TypeCheckRunner : DefaultProgramRunner() { diff --git a/src/main/kotlin/org/vclang/typechecking/execution/TypecheckingEventsProcessor.kt b/src/main/kotlin/org/arend/typechecking/execution/TypecheckingEventsProcessor.kt similarity index 95% rename from src/main/kotlin/org/vclang/typechecking/execution/TypecheckingEventsProcessor.kt rename to src/main/kotlin/org/arend/typechecking/execution/TypecheckingEventsProcessor.kt index 53f6413a8..f719ef9b3 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/TypecheckingEventsProcessor.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/TypecheckingEventsProcessor.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution +package org.arend.typechecking.execution import com.intellij.execution.testframework.sm.SMTestRunnerConnectionUtil import com.intellij.execution.testframework.sm.runner.GeneralTestEventsProcessor @@ -9,12 +9,12 @@ import com.intellij.execution.testframework.sm.runner.events.* import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.ModuleReferable -import org.vclang.psi.VcFile -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.fullName +import org.arend.module.ModulePath +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.ModuleReferable +import org.arend.psi.ArendFile +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.fullName interface ProxyAction { fun runAction(p : SMTestProxy) @@ -135,7 +135,7 @@ class TypecheckingEventsProcessor(project: Project, typeCheckingRootNode: SMTest fun onTestStarted(ref: PsiLocatedReferable) { addToInvokeLater { synchronized(this@TypecheckingEventsProcessor) { - val modulePath = (ref.containingFile as? VcFile)?.modulePath + val modulePath = (ref.containingFile as? ArendFile)?.modulePath if (modulePath != null) onSuiteStarted(modulePath) val fullName = ref.fullName diff --git a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfiguration.kt b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfiguration.kt similarity index 70% rename from src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfiguration.kt rename to src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfiguration.kt index 3509ff68f..78cf17a74 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfiguration.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfiguration.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution.configurations +package org.arend.typechecking.execution.configurations import com.intellij.execution.Executor import com.intellij.execution.configurations.* @@ -10,9 +10,9 @@ import com.intellij.util.xmlb.XmlSerializer import com.intellij.util.xmlb.annotations.Property import com.intellij.util.xmlb.annotations.Tag import org.jdom.Element -import org.vclang.typechecking.execution.TypeCheckCommand -import org.vclang.typechecking.execution.TypeCheckRunConfigurationEditor -import org.vclang.vcModules +import org.arend.typechecking.execution.TypeCheckCommand +import org.arend.typechecking.execution.TypeCheckRunConfigurationEditor +import org.arend.arendModules class TypeCheckConfiguration( project: Project, @@ -27,28 +27,28 @@ class TypeCheckConfiguration( @get: com.intellij.util.xmlb.annotations.Transient @set: com.intellij.util.xmlb.annotations.Transient - var vclangTypeCheckCommand: TypeCheckCommand - get() = TypeCheckCommand(_vclangArgs.library, _vclangArgs.modulePath, _vclangArgs.definitionFullName) + var arendTypeCheckCommand: TypeCheckCommand + get() = TypeCheckCommand(_arendArgs.library, _arendArgs.modulePath, _arendArgs.definitionFullName) set(value) = with(value) { - _vclangArgs.library = library - _vclangArgs.modulePath = modulePath - _vclangArgs.definitionFullName = definitionFullName + _arendArgs.library = library + _arendArgs.modulePath = modulePath + _arendArgs.definitionFullName = definitionFullName } @Property(surroundWithTag = false) - private var _vclangArgs = SerializableTypeCheckCommand() + private var _arendArgs = SerializableTypeCheckCommand() init { - configurationModule.module = project.vcModules.firstOrNull() + configurationModule.module = project.arendModules.firstOrNull() } - override fun getValidModules(): Collection = project.vcModules + override fun getValidModules(): Collection = project.arendModules override fun getConfigurationEditor(): SettingsEditor = TypeCheckRunConfigurationEditor(project) override fun getState(executor: Executor, environment: ExecutionEnvironment): RunProfileState = - TypeCheckRunState(environment, vclangTypeCheckCommand) + TypeCheckRunState(environment, arendTypeCheckCommand) override fun writeExternal(element: Element) { super.writeExternal(element) diff --git a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfigurationType.kt b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfigurationType.kt similarity index 81% rename from src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfigurationType.kt rename to src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfigurationType.kt index fea624294..7d0922294 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckConfigurationType.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckConfigurationType.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution.configurations +package org.arend.typechecking.execution.configurations import com.intellij.compiler.options.CompileStepBeforeRun import com.intellij.execution.BeforeRunTask @@ -7,19 +7,19 @@ import com.intellij.execution.configurations.ConfigurationTypeBase import com.intellij.execution.configurations.RunConfiguration import com.intellij.openapi.project.Project import com.intellij.openapi.util.Key -import org.vclang.VcIcons +import org.arend.ArendIcons class TypeCheckConfigurationType : ConfigurationTypeBase( "TypeCheckRunConfiguration", - "Vclang TypeCheck", - "Vclang type checking run configuration", - VcIcons.VCLANG + "Arend TypeCheck", + "Arend type checking run configuration", + ArendIcons.AREND ) { init { addFactory(object : ConfigurationFactory(this) { override fun createTemplateConfiguration(project: Project): RunConfiguration = - TypeCheckConfiguration(project, "Vclang", this) + TypeCheckConfiguration(project, "Arend", this) override fun configureBeforeRunTaskDefaults( providerID: Key>>, diff --git a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt similarity index 78% rename from src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt rename to src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt index 8821c1b16..dafeaf396 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunConfigurationModule.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution.configurations +package org.arend.typechecking.execution.configurations import com.intellij.execution.configurations.RunConfigurationModule import com.intellij.openapi.project.Project diff --git a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunState.kt b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunState.kt similarity index 91% rename from src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunState.kt rename to src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunState.kt index 942727a52..43be1a814 100644 --- a/src/main/kotlin/org/vclang/typechecking/execution/configurations/TypeCheckRunState.kt +++ b/src/main/kotlin/org/arend/typechecking/execution/configurations/TypeCheckRunState.kt @@ -1,4 +1,4 @@ -package org.vclang.typechecking.execution.configurations +package org.arend.typechecking.execution.configurations import com.intellij.execution.DefaultExecutionResult import com.intellij.execution.ExecutionResult @@ -17,10 +17,10 @@ import com.intellij.execution.testframework.sm.runner.ui.SMTRunnerUIActionsHandl import com.intellij.execution.testframework.sm.runner.ui.SMTestRunnerResultsForm import com.intellij.execution.ui.ConsoleView import com.intellij.openapi.util.Disposer -import org.vclang.typechecking.TypeCheckingService -import org.vclang.typechecking.execution.TypeCheckCommand -import org.vclang.typechecking.execution.TypeCheckProcessHandler -import org.vclang.typechecking.execution.TypecheckingEventsProcessor +import org.arend.typechecking.TypeCheckingService +import org.arend.typechecking.execution.TypeCheckCommand +import org.arend.typechecking.execution.TypeCheckProcessHandler +import org.arend.typechecking.execution.TypecheckingEventsProcessor class TypeCheckRunState( environment: ExecutionEnvironment, @@ -47,7 +47,7 @@ class TypeCheckRunState( override fun createConsole(executor: Executor): ConsoleView? { val runConfiguration = environment.runnerAndConfigurationSettings?.configuration ?: return null - val testFrameworkName = "VclangTypeCheckRunner" + val testFrameworkName = "ArendTypeCheckRunner" val consoleProperties = SMTRunnerConsoleProperties( runConfiguration, testFrameworkName, diff --git a/src/main/kotlin/org/vclang/typing/BinOpParser.kt b/src/main/kotlin/org/arend/typing/BinOpParser.kt similarity index 77% rename from src/main/kotlin/org/vclang/typing/BinOpParser.kt rename to src/main/kotlin/org/arend/typing/BinOpParser.kt index 01725fec6..f0a95d8c9 100644 --- a/src/main/kotlin/org/vclang/typing/BinOpParser.kt +++ b/src/main/kotlin/org/arend/typing/BinOpParser.kt @@ -1,12 +1,12 @@ -package org.vclang.typing +package org.arend.typing -import com.jetbrains.jetpad.vclang.error.DummyErrorReporter -import com.jetbrains.jetpad.vclang.naming.BinOpParser -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.Fixity -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.BaseAbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete +import org.arend.error.DummyErrorReporter +import org.arend.naming.BinOpParser +import org.arend.naming.reference.Referable +import org.arend.term.Fixity +import org.arend.term.abs.Abstract +import org.arend.term.abs.BaseAbstractExpressionVisitor +import org.arend.term.concrete.Concrete private fun addExpression(expr: Abstract.Expression?, binOpSeq: MutableList, fixity: Fixity, isExplicit: Boolean) { diff --git a/src/main/kotlin/org/vclang/typing/ClassesUtil.kt b/src/main/kotlin/org/arend/typing/ClassesUtil.kt similarity index 71% rename from src/main/kotlin/org/vclang/typing/ClassesUtil.kt rename to src/main/kotlin/org/arend/typing/ClassesUtil.kt index c4d316c48..5dbe1eb83 100644 --- a/src/main/kotlin/org/vclang/typing/ClassesUtil.kt +++ b/src/main/kotlin/org/arend/typing/ClassesUtil.kt @@ -1,14 +1,14 @@ -package org.vclang.typing +package org.arend.typing import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.FieldReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.scope.ClassFieldImplScope -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcLongName +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.FieldReferable +import org.arend.naming.reference.LocatedReferable +import org.arend.naming.reference.Referable +import org.arend.naming.scope.ClassFieldImplScope +import org.arend.term.abs.Abstract +import org.arend.psi.ArendLongName private fun getNotImplementedFields(classDef: ClassReferable, classRefHolder: Abstract.ClassReferenceHolder?, superClassesFields: HashMap>): HashMap> { @@ -16,7 +16,7 @@ private fun getNotImplementedFields(classDef: ClassReferable, classRefHolder: Ab if (classRefHolder != null) { for (fieldImpl in classRefHolder.classFieldImpls) { (fieldImpl as? PsiElement)?.let { - val resolved = PsiTreeUtil.getChildOfType(it, VcLongName::class.java)?.refIdentifierList?.lastOrNull()?.reference?.resolve() + val resolved = PsiTreeUtil.getChildOfType(it, ArendLongName::class.java)?.refIdentifierList?.lastOrNull()?.reference?.resolve() if (resolved is LocatedReferable) { val field = resolved.underlyingReference ?: resolved result.remove(field) diff --git a/src/main/kotlin/org/vclang/typing/ExpectedTypeVisitor.kt b/src/main/kotlin/org/arend/typing/ExpectedTypeVisitor.kt similarity index 89% rename from src/main/kotlin/org/vclang/typing/ExpectedTypeVisitor.kt rename to src/main/kotlin/org/arend/typing/ExpectedTypeVisitor.kt index 00ac0ed93..ca4fe076c 100644 --- a/src/main/kotlin/org/vclang/typing/ExpectedTypeVisitor.kt +++ b/src/main/kotlin/org/arend/typing/ExpectedTypeVisitor.kt @@ -1,27 +1,27 @@ -package org.vclang.typing +package org.arend.typing import com.intellij.lang.annotation.AnnotationHolder import com.intellij.lang.annotation.HighlightSeverity import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractDefinitionVisitor -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import com.jetbrains.jetpad.vclang.typechecking.error.local.ArgInferenceError -import org.vclang.psi.* -import org.vclang.psi.ext.VcCoClauseImplMixin -import org.vclang.psi.ext.impl.ClassFieldImplAdapter -import org.vclang.psi.ext.impl.DefinitionAdapter +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.TypedReferable +import org.arend.psi.* +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractDefinitionVisitor +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.term.concrete.Concrete +import org.arend.typechecking.error.local.ArgInferenceError +import org.arend.psi.ext.ArendCoClauseImplMixin +import org.arend.psi.ext.impl.ClassFieldImplAdapter +import org.arend.psi.ext.impl.DefinitionAdapter import java.math.BigInteger import java.util.* -class ExpectedTypeVisitor(private val element: VcExpr, private val holder: AnnotationHolder?) : AbstractExpressionVisitor, AbstractDefinitionVisitor { +class ExpectedTypeVisitor(private val element: ArendExpr, private val holder: AnnotationHolder?) : AbstractExpressionVisitor, AbstractDefinitionVisitor { object InferHoleExpression : Abstract.SourceNodeImpl(), Abstract.Expression { override fun getData() = this @@ -66,10 +66,10 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot } class Substituted(val expr: Abstract.Expression) { - override fun toString(): String = (expr as? VcExpr)?.text ?: expr.toString() + override fun toString(): String = (expr as? ArendExpr)?.text ?: expr.toString() } - class Definition(val def: VcDefinition) { + class Definition(val def: ArendDefinition) { override fun toString() = def.textRepresentation() } @@ -112,10 +112,10 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot } open class GetKindDefVisitor : GetKindVisitor() { - var def: VcDefinition? = null + var def: ArendDefinition? = null override fun getReferenceKind(ref: Referable): GetKindVisitor.Kind { - if (ref is VcDefinition) { + if (ref is ArendDefinition) { def = ref } return super.getReferenceKind(ref) @@ -139,12 +139,12 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot } companion object { - fun hasCoerce(def: VcDefinition?, fromOther: Boolean, coerceType: CoerceType): Boolean { - if (def == null || def !is VcDefClass && def !is VcDefData) { + fun hasCoerce(def: ArendDefinition?, fromOther: Boolean, coerceType: CoerceType): Boolean { + if (def == null || def !is ArendDefClass && def !is ArendDefData) { return false } - if (!fromOther && def is VcDefClass) { + if (!fromOther && def is ArendDefClass) { val visited = HashSet() val toVisit = ArrayDeque() toVisit.add(def) @@ -176,7 +176,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot val stats = (def as? DefinitionAdapter<*>)?.getWhere()?.statementList ?: return false for (stat in stats) { val statDef = stat.definition - if (statDef is VcDefFunction && statDef.coerceKw != null) { + if (statDef is ArendDefFunction && statDef.coerceKw != null) { if (coerceType == CoerceType.ANY) { return true } @@ -324,7 +324,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot if (kind != GetKindVisitor.Kind.PI) { if (holder != null && kind.isWHNF()) { - holder.createErrorAnnotation(TextRange((parameters.first() as VcNameTele).textRange.startOffset, (parameters.last() as VcNameTele).textRange.endOffset), "Too many parameters") + holder.createErrorAnnotation(TextRange((parameters.first() as ArendNameTele).textRange.startOffset, (parameters.last() as ArendNameTele).textRange.endOffset), "Too many parameters") } currentType = null break @@ -354,26 +354,26 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot is Abstract.FunctionClause -> { val pparent = parent.topmostEquivalentSourceNode.parentSourceNode when (pparent) { - is Abstract.FunctionDefinition -> (pparent.resultType as? VcExpr)?.let { Substituted(it) } - is VcConstructor -> pparent.ancestors.filterIsInstance().firstOrNull()?.let { Definition(it) } + is Abstract.FunctionDefinition -> (pparent.resultType as? ArendExpr)?.let { Substituted(it) } + is ArendConstructor -> pparent.ancestors.filterIsInstance().firstOrNull()?.let { Definition(it) } else -> null } } is Abstract.ClassFieldImpl -> { val implemented = when (parent) { is ClassFieldImplAdapter -> parent.getResolvedImplementedField() - is VcCoClauseImplMixin -> parent.getResolvedImplementedField() + is ArendCoClauseImplMixin -> parent.getResolvedImplementedField() else -> null } when (implemented) { - is VcDefClass -> { - val parameters = PsiTreeUtil.getChildrenOfTypeAsList(parent as? PsiElement, VcNameTele::class.java) + is ArendDefClass -> { + val parameters = PsiTreeUtil.getChildrenOfTypeAsList(parent as? PsiElement, ArendNameTele::class.java) if (!parameters.isEmpty()) { holder?.createErrorAnnotation(TextRange(parameters.first().textRange.startOffset, parameters.last().textRange.endOffset), "Class cannot have parameters") } Definition(implemented) } - is Abstract.ClassField -> reduceParameters(PsiTreeUtil.getChildrenOfTypeAsList(parent as? PsiElement, VcNameTele::class.java), implemented.resultType, holder) + is Abstract.ClassField -> reduceParameters(PsiTreeUtil.getChildrenOfTypeAsList(parent as? PsiElement, ArendNameTele::class.java), implemented.resultType, holder) else -> null } } @@ -406,7 +406,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot return null } - val expectedType = (data as? VcExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } ?: return null + val expectedType = (data as? ArendExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } ?: return null val expectedTypeExpr = expectedType as? Abstract.Expression ?: (expectedType as? Substituted)?.expr ?: return null val result = reduceParameters(parameters, expectedTypeExpr, null) ?: return null return if (expectedType is Substituted) Substituted(result) else result @@ -419,7 +419,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot override fun visitInferHole(data: Any?, errorData: Abstract.ErrorData?, params: Void?) = null override fun visitGoal(data: Any?, name: String?, expression: Abstract.Expression?, errorData: Abstract.ErrorData?, params: Void?) = - (data as? VcExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } + (data as? ArendExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } override fun visitTuple(data: Any?, fields: Collection, errorData: Abstract.ErrorData?, params: Void?): Any? { val originalIndex = fields.indexOf(element) @@ -428,7 +428,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot return null } - val sigmaExpr = (data as? VcExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } as? VcSigmaExpr ?: return null + val sigmaExpr = (data as? ArendExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } as? ArendSigmaExpr ?: return null if (sigmaExpr.typeTeleList.sumBy { it.referableList.size } != fields.size) { return null } @@ -486,7 +486,7 @@ class ExpectedTypeVisitor(private val element: VcExpr, private val holder: Annot if (element == baseClass) null else visitBinOpSequence(data, InferHoleExpression, sequence, errorData, params) override fun visitLet(data: Any?, clauses: Collection, expression: Abstract.Expression?, errorData: Abstract.ErrorData?, params: Void?) = - if (element == expression) (data as? VcExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } else null + if (element == expression) (data as? ArendExpr)?.let { ExpectedTypeVisitor(it, null).getExpectedType() } else null override fun visitNumericLiteral(data: Any?, number: BigInteger, errorData: Abstract.ErrorData?, params: Void?) = null diff --git a/src/main/kotlin/org/vclang/typing/GetKindVisitor.kt b/src/main/kotlin/org/arend/typing/GetKindVisitor.kt similarity index 86% rename from src/main/kotlin/org/vclang/typing/GetKindVisitor.kt rename to src/main/kotlin/org/arend/typing/GetKindVisitor.kt index d766d02a1..b56e60fbb 100644 --- a/src/main/kotlin/org/vclang/typing/GetKindVisitor.kt +++ b/src/main/kotlin/org/arend/typing/GetKindVisitor.kt @@ -1,15 +1,15 @@ -package org.vclang.typing +package org.arend.typing -import com.jetbrains.jetpad.vclang.naming.reference.ErrorReference -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.UnresolvedReference -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcCompositeElement +import org.arend.naming.reference.ErrorReference +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.UnresolvedReference +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.term.concrete.Concrete +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendCompositeElement import java.math.BigInteger @@ -47,7 +47,7 @@ open class GetKindVisitor : AbstractExpressionVisitor } private fun getReferenceKind(data: Any?, referent: Referable) : Kind { - val ref = (data as? VcCompositeElement)?.scope?.let { ExpressionResolveNameVisitor.resolve(referent, it) } ?: referent + val ref = (data as? ArendCompositeElement)?.scope?.let { ExpressionResolveNameVisitor.resolve(referent, it) } ?: referent return getReferenceKind(if (ref is GlobalReferable) PsiLocatedReferable.fromReferable(ref) ?: ref else ref) } diff --git a/src/main/kotlin/org/vclang/typing/ReferableExtractVisitor.kt b/src/main/kotlin/org/arend/typing/ReferableExtractVisitor.kt similarity index 82% rename from src/main/kotlin/org/vclang/typing/ReferableExtractVisitor.kt rename to src/main/kotlin/org/arend/typing/ReferableExtractVisitor.kt index c6f845b81..fefbaaed2 100644 --- a/src/main/kotlin/org/vclang/typing/ReferableExtractVisitor.kt +++ b/src/main/kotlin/org/arend/typing/ReferableExtractVisitor.kt @@ -1,14 +1,14 @@ -package org.vclang.typing +package org.arend.typing -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.BaseAbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import org.vclang.psi.VcDefFunction -import org.vclang.psi.VcExpr +import org.arend.naming.reference.ClassReferable +import org.arend.naming.reference.Referable +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.naming.scope.Scope +import org.arend.term.abs.Abstract +import org.arend.term.abs.BaseAbstractExpressionVisitor +import org.arend.term.concrete.Concrete +import org.arend.psi.ArendDefFunction +import org.arend.psi.ArendExpr class ReferableExtractVisitor : BaseAbstractExpressionVisitor(null) { @@ -19,14 +19,14 @@ class ReferableExtractVisitor : BaseAbstractExpressionVisitor private fun findClassReference(referent: Referable?, originalScope: Scope): ClassReferable? { mode = Mode.EXPRESSION var ref: Referable? = referent - var visited: MutableSet? = null + var visited: MutableSet? = null var scope = originalScope while (true) { ref = ExpressionResolveNameVisitor.resolve(ref, scope) if (ref is ClassReferable) { return ref } - if (ref !is VcDefFunction) { + if (ref !is ArendDefFunction) { return null } @@ -48,7 +48,7 @@ class ReferableExtractVisitor : BaseAbstractExpressionVisitor } } - fun findClassReferable(expr: VcExpr): ClassReferable? { + fun findClassReferable(expr: ArendExpr): ClassReferable? { mode = Mode.TYPE arguments = 0 return findClassReference(expr.accept(this, null), expr.scope) diff --git a/src/main/kotlin/org/vclang/typing/TypecheckingVisitor.kt b/src/main/kotlin/org/arend/typing/TypecheckingVisitor.kt similarity index 90% rename from src/main/kotlin/org/vclang/typing/TypecheckingVisitor.kt rename to src/main/kotlin/org/arend/typing/TypecheckingVisitor.kt index 844b4abab..c38069e60 100644 --- a/src/main/kotlin/org/vclang/typing/TypecheckingVisitor.kt +++ b/src/main/kotlin/org/arend/typing/TypecheckingVisitor.kt @@ -1,32 +1,32 @@ -package org.vclang.typing +package org.arend.typing import com.intellij.lang.annotation.AnnotationHolder import com.intellij.lang.annotation.HighlightSeverity import com.intellij.psi.PsiElement -import com.jetbrains.jetpad.vclang.naming.reference.ErrorReference -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import com.jetbrains.jetpad.vclang.prelude.Prelude -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import com.jetbrains.jetpad.vclang.term.concrete.Concrete -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcDefData -import org.vclang.psi.VcLongName -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.typing.ExpectedTypeVisitor.Companion.hasCoerce +import org.arend.naming.reference.ErrorReference +import org.arend.naming.reference.GlobalReferable +import org.arend.naming.reference.Referable +import org.arend.naming.reference.TypedReferable +import org.arend.naming.resolving.visitor.ExpressionResolveNameVisitor +import org.arend.prelude.Prelude +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor +import org.arend.term.concrete.Concrete +import org.arend.psi.ArendDefClass +import org.arend.psi.ArendDefData +import org.arend.psi.ArendLongName +import org.arend.psi.ext.PsiLocatedReferable +import org.arend.psi.ext.ArendCompositeElement +import org.arend.typing.ExpectedTypeVisitor.Companion.hasCoerce import java.math.BigInteger -class TypecheckingVisitor(private val element: VcCompositeElement, private val holder: AnnotationHolder) : AbstractExpressionVisitor { +class TypecheckingVisitor(private val element: ArendCompositeElement, private val holder: AnnotationHolder) : AbstractExpressionVisitor { companion object { fun resolveReference(data: Any?, referent: Referable) = - if (data is VcCompositeElement) { - if (data !is VcLongName || data.refIdentifierList.size <= 1) { - Concrete.ReferenceExpression(data, ((data as? VcLongName)?.refIdentifierList?.lastOrNull() ?: data).reference?.resolve() as? Referable ?: ErrorReference(data, null, referent.textRepresentation()), Concrete.PLevelExpression(data), Concrete.HLevelExpression(data)) + if (data is ArendCompositeElement) { + if (data !is ArendLongName || data.refIdentifierList.size <= 1) { + Concrete.ReferenceExpression(data, ((data as? ArendLongName)?.refIdentifierList?.lastOrNull() ?: data).reference?.resolve() as? Referable ?: ErrorReference(data, null, referent.textRepresentation()), Concrete.PLevelExpression(data), Concrete.HLevelExpression(data)) } else { val refExpr = Concrete.ReferenceExpression(data, referent, Concrete.PLevelExpression(data), Concrete.HLevelExpression(data)) val arg = ExpressionResolveNameVisitor.resolve(refExpr, data.scope) @@ -106,7 +106,7 @@ class TypecheckingVisitor(private val element: VcCompositeElement, private val h typeMismatch("a data", toString(actualType)) } is ExpectedTypeVisitor.Definition -> - if (!(expectedType.def is VcDefData && actualDef == expectedType.def || expectedType.def is VcDefClass && actualDef is VcDefClass && actualDef.isSubClassOf(expectedType.def))) { + if (!(expectedType.def is ArendDefData && actualDef == expectedType.def || expectedType.def is ArendDefClass && actualDef is ArendDefClass && actualDef.isSubClassOf(expectedType.def))) { typeMismatch(expectedType.def.textRepresentation(), toString(actualType)) } is ExpectedTypeVisitor.Sigma -> { diff --git a/src/main/kotlin/org/vclang/typing/TypingVisitor.kt b/src/main/kotlin/org/arend/typing/TypingVisitor.kt similarity index 94% rename from src/main/kotlin/org/vclang/typing/TypingVisitor.kt rename to src/main/kotlin/org/arend/typing/TypingVisitor.kt index 0fbcfd839..4a9100912 100644 --- a/src/main/kotlin/org/vclang/typing/TypingVisitor.kt +++ b/src/main/kotlin/org/arend/typing/TypingVisitor.kt @@ -1,8 +1,8 @@ -package org.vclang.typing +package org.arend.typing -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor +import org.arend.naming.reference.Referable +import org.arend.term.abs.Abstract +import org.arend.term.abs.AbstractExpressionVisitor import java.math.BigInteger diff --git a/src/main/kotlin/org/vclang/VcFileType.kt b/src/main/kotlin/org/vclang/VcFileType.kt deleted file mode 100644 index fb996f49d..000000000 --- a/src/main/kotlin/org/vclang/VcFileType.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.vclang - -import com.intellij.openapi.fileTypes.LanguageFileType -import com.jetbrains.jetpad.vclang.util.FileUtils - -import javax.swing.Icon - -object VcFileType : LanguageFileType(VcLanguage.INSTANCE) { - override fun getName(): String = "Vclang" - - override fun getDescription(): String = "Vclang files" - - override fun getDefaultExtension(): String = FileUtils.EXTENSION.drop(1) - - override fun getIcon(): Icon? = VcIcons.VCLANG_FILE -} diff --git a/src/main/kotlin/org/vclang/codeInsight/VcDeclarationRangeHandler.kt b/src/main/kotlin/org/vclang/codeInsight/VcDeclarationRangeHandler.kt deleted file mode 100644 index 5e555fd4f..000000000 --- a/src/main/kotlin/org/vclang/codeInsight/VcDeclarationRangeHandler.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.vclang.codeInsight - -import com.intellij.codeInsight.hint.DeclarationRangeHandler -import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiElement -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcDefData -import org.vclang.psi.VcDefFunction -import org.vclang.psi.VcDefInstance - -class VcDeclarationRangeHandler : DeclarationRangeHandler { - override fun getDeclarationRange(container: PsiElement): TextRange = - when (container) { - is VcDefFunction -> container.expr ?: container.nameTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier - is VcDefData -> container.universeExpr ?: container.typeTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier - is VcDefClass -> container.longNameList.lastOrNull() ?: container.fieldTeleList.lastOrNull() as PsiElement? ?: container.defIdentifier - is VcDefInstance -> container.nameTeleList.lastOrNull() ?: container.defIdentifier - else -> null - }?.let { TextRange(container.textRange.startOffset, it.textRange.endOffset) } ?: container.textRange -} diff --git a/src/main/kotlin/org/vclang/editor/VcColorSettingsPage.kt b/src/main/kotlin/org/vclang/editor/VcColorSettingsPage.kt deleted file mode 100644 index 4bf7de523..000000000 --- a/src/main/kotlin/org/vclang/editor/VcColorSettingsPage.kt +++ /dev/null @@ -1,46 +0,0 @@ -package org.vclang.editor - -import com.intellij.openapi.editor.colors.TextAttributesKey -import com.intellij.openapi.fileTypes.SyntaxHighlighter -import com.intellij.openapi.options.colors.AttributesDescriptor -import com.intellij.openapi.options.colors.ColorDescriptor -import com.intellij.openapi.options.colors.ColorSettingsPage -import org.vclang.VcIcons -import org.vclang.highlight.VcHighlightingColors -import org.vclang.highlight.VcSyntaxHighlighter -import javax.swing.Icon - -class VcColorSettingsPage : ColorSettingsPage { - - override fun getIcon(): Icon? = VcIcons.VCLANG - - override fun getHighlighter(): SyntaxHighlighter = VcSyntaxHighlighter() - - override fun getDemoText(): String = DEMO_TEXT - - override fun getAdditionalHighlightingTagToDescriptorMap(): Map? - = null - - override fun getAttributeDescriptors(): Array = DESCRIPTORS - - override fun getColorDescriptors(): Array = ColorDescriptor.EMPTY_ARRAY - - override fun getDisplayName(): String = "Vclang" - - companion object { - private val DESCRIPTORS = VcHighlightingColors.values() - .map { it.attributesDescriptor } - .toTypedArray() - - // TODO: update demo text - private val DEMO_TEXT = "\\import Data.Bool\n" + - "\n" + - "\\class Semigroup {\n" + - " \\field X : \\Type0\n" + - " \\field op : X -> X -> X\n" + - " \\field assoc : \\Pi (x y z : X) -> op (op x y) z = op x (op y z)\n" + - "}\n" + - "\n" + - "\\func xor-semigroup => \\new Semigroup { X => Bool | op => xor | assoc => {?} }" - } -} diff --git a/src/main/kotlin/org/vclang/hierarchy/clazz/VcSuperClassTreeStructure.kt b/src/main/kotlin/org/vclang/hierarchy/clazz/VcSuperClassTreeStructure.kt deleted file mode 100644 index 11ec86bb4..000000000 --- a/src/main/kotlin/org/vclang/hierarchy/clazz/VcSuperClassTreeStructure.kt +++ /dev/null @@ -1,20 +0,0 @@ -package org.vclang.hierarchy.clazz - -import com.intellij.ide.hierarchy.HierarchyNodeDescriptor -import com.intellij.ide.hierarchy.HierarchyTreeStructure -import com.intellij.openapi.project.Project -import com.intellij.psi.PsiElement -import com.intellij.util.ArrayUtil -import org.vclang.hierarchy.VcHierarchyNodeDescriptor -import org.vclang.psi.VcDefClass - -class VcSuperClassTreeStructure(project: Project, baseNode: PsiElement) : - HierarchyTreeStructure(project, VcHierarchyNodeDescriptor(project, null, baseNode, true)) { - override fun buildChildren(descriptor: HierarchyNodeDescriptor): Array { - val classElement = (descriptor.psiElement ?: return ArrayUtil.EMPTY_OBJECT_ARRAY) - as? VcDefClass ?: return ArrayUtil.EMPTY_OBJECT_ARRAY - val result = ArrayList() - classElement.superClassReferences.mapTo(result) { VcHierarchyNodeDescriptor(myProject, descriptor, it as VcDefClass, false) } - return result.toArray() - } -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighter.kt b/src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighter.kt deleted file mode 100644 index fb83ad0af..000000000 --- a/src/main/kotlin/org/vclang/highlight/VcSyntaxHighlighter.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.vclang.highlight - -import com.intellij.lexer.Lexer -import com.intellij.openapi.editor.colors.TextAttributesKey -import com.intellij.openapi.fileTypes.SyntaxHighlighterBase -import com.intellij.psi.TokenType -import com.intellij.psi.tree.IElementType -import org.vclang.lexer.VcLexerAdapter -import org.vclang.psi.VC_KEYWORDS -import org.vclang.psi.VcElementTypes -import com.intellij.openapi.editor.DefaultLanguageHighlighterColors as Default - -class VcSyntaxHighlighter : SyntaxHighlighterBase() { - - override fun getHighlightingLexer(): Lexer = VcLexerAdapter() - - override fun getTokenHighlights(tokenType: IElementType): Array = - pack(map(tokenType)?.textAttributesKey) - - companion object { - fun map(tokenType: IElementType?): VcHighlightingColors? = when (tokenType) { - VcElementTypes.ID -> VcHighlightingColors.IDENTIFIER - VcElementTypes.NUMBER -> VcHighlightingColors.NUMBER - in VC_KEYWORDS -> VcHighlightingColors.KEYWORD - VcElementTypes.SET, VcElementTypes.UNIVERSE, VcElementTypes.TRUNCATED_UNIVERSE -> VcHighlightingColors.UNIVERSE - VcElementTypes.UNDERSCORE, VcElementTypes.GOAL -> VcHighlightingColors.IMPLICIT - - VcElementTypes.INFIX, VcElementTypes.POSTFIX -> VcHighlightingColors.OPERATORS - VcElementTypes.DOT -> VcHighlightingColors.DOT - VcElementTypes.COMMA -> VcHighlightingColors.COMMA - VcElementTypes.COLON -> VcHighlightingColors.COLON - VcElementTypes.PIPE -> VcHighlightingColors.COMMA - VcElementTypes.ARROW, VcElementTypes.FAT_ARROW -> VcHighlightingColors.ARROW - - VcElementTypes.LBRACE, VcElementTypes.RBRACE -> VcHighlightingColors.BRACES - VcElementTypes.LPAREN, VcElementTypes.RPAREN -> VcHighlightingColors.PARENTHESIS - - VcElementTypes.BLOCK_COMMENT -> VcHighlightingColors.BLOCK_COMMENT - VcElementTypes.LINE_COMMENT -> VcHighlightingColors.LINE_COMMENT - - TokenType.BAD_CHARACTER -> VcHighlightingColors.BAD_CHARACTER - else -> null - } - } -} diff --git a/src/main/kotlin/org/vclang/lexer/VcLexerAdapter.kt b/src/main/kotlin/org/vclang/lexer/VcLexerAdapter.kt deleted file mode 100644 index 5abe5d76c..000000000 --- a/src/main/kotlin/org/vclang/lexer/VcLexerAdapter.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.vclang.lexer - -import com.intellij.lexer.FlexAdapter -import java.io.Reader - -class VcLexerAdapter : FlexAdapter(VcLexer(null as Reader?)) diff --git a/src/main/kotlin/org/vclang/module/VcFakeRawSource.kt b/src/main/kotlin/org/vclang/module/VcFakeRawSource.kt deleted file mode 100644 index cbc44567e..000000000 --- a/src/main/kotlin/org/vclang/module/VcFakeRawSource.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.vclang.module - -import com.jetbrains.jetpad.vclang.module.ModulePath -import com.jetbrains.jetpad.vclang.source.Source -import com.jetbrains.jetpad.vclang.source.SourceLoader - - -class VcFakeRawSource(private val modulePath: ModulePath): Source { - override fun getModulePath() = modulePath - - override fun load(sourceLoader: SourceLoader) = true - - override fun getTimeStamp(): Long = -1 - - override fun isAvailable() = true -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/module/VcModuleType.kt b/src/main/kotlin/org/vclang/module/VcModuleType.kt deleted file mode 100644 index f28a0d774..000000000 --- a/src/main/kotlin/org/vclang/module/VcModuleType.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.vclang.module - -import com.intellij.openapi.module.ModuleTypeManager -import org.vclang.VcIcons -import org.vclang.module.util.VcModuleBuilder -import javax.swing.Icon - -class VcModuleType : VcModuleTypeBase(ID) { - - override fun getNodeIcon(isOpened: Boolean): Icon? = VcIcons.VCLANG - - override fun createModuleBuilder(): VcModuleBuilder = VcModuleBuilder() - - override fun getDescription(): String = "Vclang library" - - override fun getName(): String = "Vclang" - - companion object { - private const val ID = "VCLANG_MODULE" - - val INSTANCE: VcModuleType by lazy { - ModuleTypeManager.getInstance().findByID(ID) as VcModuleType - } - } -} diff --git a/src/main/kotlin/org/vclang/navigation/VcClassNavigationContributor.kt b/src/main/kotlin/org/vclang/navigation/VcClassNavigationContributor.kt deleted file mode 100644 index a5ad2f6a4..000000000 --- a/src/main/kotlin/org/vclang/navigation/VcClassNavigationContributor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.vclang.navigation - -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.stubs.index.VcGotoClassIndex - -class VcClassNavigationContributor : VcNavigationContributorBase( - VcGotoClassIndex.KEY, - PsiReferable::class.java -) diff --git a/src/main/kotlin/org/vclang/navigation/VcSymbolNavigationContributor.kt b/src/main/kotlin/org/vclang/navigation/VcSymbolNavigationContributor.kt deleted file mode 100644 index 13b8b751e..000000000 --- a/src/main/kotlin/org/vclang/navigation/VcSymbolNavigationContributor.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.vclang.navigation - -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.stubs.index.VcNamedElementIndex - -class VcSymbolNavigationContributor : VcNavigationContributorBase( - VcNamedElementIndex.KEY, - PsiReferable::class.java -) diff --git a/src/main/kotlin/org/vclang/parser/VcParserDefinition.kt b/src/main/kotlin/org/vclang/parser/VcParserDefinition.kt deleted file mode 100644 index 253b32512..000000000 --- a/src/main/kotlin/org/vclang/parser/VcParserDefinition.kt +++ /dev/null @@ -1,43 +0,0 @@ -package org.vclang.parser - -import com.intellij.lang.ASTNode -import com.intellij.lang.ParserDefinition -import com.intellij.lang.PsiParser -import com.intellij.lexer.Lexer -import com.intellij.openapi.project.Project -import com.intellij.psi.FileViewProvider -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile -import com.intellij.psi.tree.IFileElementType -import com.intellij.psi.tree.TokenSet -import org.vclang.lexer.VcLexerAdapter -import org.vclang.psi.VC_COMMENTS -import org.vclang.psi.VC_WHITE_SPACES -import org.vclang.psi.VcElementTypes -import org.vclang.psi.VcFile -import org.vclang.psi.stubs.VcFileStub - -class VcParserDefinition : ParserDefinition { - - override fun createLexer(project: Project): Lexer = VcLexerAdapter() - - override fun getWhitespaceTokens(): TokenSet = VC_WHITE_SPACES - - override fun getCommentTokens(): TokenSet = VC_COMMENTS - - override fun getStringLiteralElements(): TokenSet = TokenSet.EMPTY - - override fun createParser(project: Project): PsiParser = VcParser() - - override fun getFileNodeType(): IFileElementType = VcFileStub.Type - - override fun createFile(viewProvider: FileViewProvider): PsiFile = VcFile(viewProvider) - - override fun spaceExistanceTypeBetweenTokens( - left: ASTNode, - right: ASTNode - ): ParserDefinition.SpaceRequirements = ParserDefinition.SpaceRequirements.MAY - - override fun createElement(node: ASTNode): PsiElement = - VcElementTypes.Factory.createElement(node) -} diff --git a/src/main/kotlin/org/vclang/psi/VcCompositeElementType.kt b/src/main/kotlin/org/vclang/psi/VcCompositeElementType.kt deleted file mode 100644 index 70b906976..000000000 --- a/src/main/kotlin/org/vclang/psi/VcCompositeElementType.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.vclang.psi - -import com.intellij.psi.tree.IElementType -import org.vclang.VcLanguage - -class VcCompositeElementType(debugName: String) : IElementType(debugName, VcLanguage.INSTANCE) diff --git a/src/main/kotlin/org/vclang/psi/ext/Identifiers.kt b/src/main/kotlin/org/vclang/psi/ext/Identifiers.kt deleted file mode 100644 index a14b7c885..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/Identifiers.kt +++ /dev/null @@ -1,108 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.intellij.psi.PsiElement -import com.intellij.psi.search.LocalSearchScope -import com.intellij.psi.search.SearchScope -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.NamedUnresolvedReference -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import org.vclang.psi.* -import org.vclang.resolving.VcDefReferenceImpl -import org.vclang.resolving.VcPatternDefReferenceImpl -import org.vclang.resolving.VcReference -import org.vclang.resolving.VcReferenceImpl -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor - -abstract class VcDefIdentifierImplMixin(node: ASTNode) : PsiReferableImpl(node), VcDefIdentifier { - override val referenceNameElement - get() = this - - override val referenceName: String - get() = text - - override fun getName(): String = referenceName - - override fun textRepresentation(): String = referenceName - - override fun getReference(): VcReference { - val parent = parent - return when (parent) { - is VcPattern, is VcAtomPatternOrPrefix -> VcPatternDefReferenceImpl(this, parent is VcPattern && !parent.atomPatternOrPrefixList.isEmpty()) - else -> VcDefReferenceImpl(this) - } - } - - override fun getTypeClassReference(): ClassReferable? = - typeOf?.let { ReferableExtractVisitor().findClassReferable(it) } - - override fun getParameterType(params: List): Any? = ExpectedTypeVisitor.getParameterType(typeOf, params, name) - - override fun getTypeOf(): VcExpr? { - val parent = parent - return when (parent) { - is VcIdentifierOrUnknown -> { - val pparent = parent.parent - when (pparent) { - is VcNameTele -> pparent.expr - is VcTypedExpr -> pparent.expr - else -> null - } - } - is VcFieldDefIdentifier -> (parent.parent as? VcFieldTele)?.expr - is VcLetClause -> parent.typeAnnotation?.expr - else -> null - } - } - - override val psiElementType: PsiElement? - get() { - val parent = parent - return when (parent) { - is VcLetClause -> parent.typeAnnotation?.expr - is VcIdentifierOrUnknown -> { - val pparent = parent.parent - when (pparent) { - is VcNameTele -> pparent.expr - is VcTypedExpr -> pparent.expr - else -> null - } - } - else -> null - } - } - - override fun getUseScope(): SearchScope { - if (parent != null && parent.parent is VcTypedExpr && parent.parent.parent is VcTypeTele) { - return LocalSearchScope(parent.parent.parent.parent) //Pi expression - } else if (parent != null && parent.parent is VcFieldTele) { - return LocalSearchScope(parent.parent.parent) - } else if (parent != null && parent.parent is VcNameTele) { - return LocalSearchScope(parent.parent.parent) - } else if (parent is VcAtomPatternOrPrefix && parent.parent != null) { - var p = parent.parent.parent - while (p != null && p !is VcClause) p = p.parent - if (p is VcClause) return LocalSearchScope(p) // Pattern variables - } else if (parent is VcPattern) { - if (parent.parent is VcClause) return LocalSearchScope(parent.parent) - } - return super.getUseScope() - } -} - -abstract class VcRefIdentifierImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcRefIdentifier { - override val referenceNameElement - get() = this - - override val referenceName: String - get() = text - - override fun getName(): String = referenceName - - override fun getData() = this - - override fun getReferent(): Referable = NamedUnresolvedReference(this, referenceName) - - override fun getReference(): VcReference = VcReferenceImpl(this) -} diff --git a/src/main/kotlin/org/vclang/psi/ext/PsiConcreteReferable.kt b/src/main/kotlin/org/vclang/psi/ext/PsiConcreteReferable.kt deleted file mode 100644 index d5d0d9de3..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/PsiConcreteReferable.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.vclang.psi.ext - -import com.jetbrains.jetpad.vclang.error.ErrorReporter -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.term.concrete.Concrete - - -interface PsiConcreteReferable: PsiLocatedReferable { - fun computeConcrete(referableConverter: ReferableConverter, errorReporter: ErrorReporter): Concrete.Definition? -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcAppExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcAppExprImplMixin.kt deleted file mode 100644 index 9b83ae264..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcAppExprImplMixin.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcAppExpr - - -abstract class VcAppExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcAppExpr { - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitInferHole(this, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcArgumentImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcArgumentImplMixin.kt deleted file mode 100644 index 95e71c858..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcArgumentImplMixin.kt +++ /dev/null @@ -1,88 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.NamedUnresolvedReference -import com.jetbrains.jetpad.vclang.term.Fixity -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.* -import org.vclang.resolving.VcReference -import org.vclang.resolving.VcReferenceImpl - - -abstract class VcImplicitArgumentImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcImplicitArgument { - override fun isExplicit(): Boolean = false - - override fun getFixity(): Fixity = Fixity.NONFIX - - override fun getExpression(): Abstract.Expression = expr -} - -abstract class VcInfixArgumentImplMixin(node: ASTNode) : VcExprImplMixin(node), VcInfixArgument, VcReferenceElement { - override fun isExplicit(): Boolean = true - - override fun getData() = this - - override fun getFixity(): Fixity = Fixity.INFIX - - override fun getExpression(): VcExpr = this - - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitReference(this, NamedUnresolvedReference(this, referenceName), null, null, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override val referenceNameElement - get() = this - - override val referenceName: String - get() = infix.text.removeSurrounding("`") - - override fun getReference(): VcReference = VcReferenceImpl(this) -} - -abstract class VcPostfixArgumentImplMixin(node: ASTNode) : VcExprImplMixin(node), VcPostfixArgument, VcReferenceElement { - override fun isExplicit(): Boolean = true - - override fun getData() = this - - override fun getFixity(): Fixity = Fixity.POSTFIX - - override fun getExpression(): VcExpr = this - - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitReference(this, NamedUnresolvedReference(this, referenceName), null, null, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override val referenceNameElement - get() = this - - override val referenceName: String - get() = postfix.text.removePrefix("`") - - override fun getReference(): VcReference = VcReferenceImpl(this) -} - -abstract class VcNewArgImplMixin(node: ASTNode) : VcNewExprImplMixin(node), VcNewArg, Abstract.ClassReferenceHolder { - override fun getFixity(): Fixity = Fixity.NONFIX - - override fun getExpression(): VcExpr = this -} - -abstract class VcAtomArgumentImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcAtomArgument { - override fun isExplicit(): Boolean = true - - override fun getFixity(): Fixity { - val atomFieldsAcc = atomFieldsAcc - if (!atomFieldsAcc.fieldAccList.isEmpty()) return Fixity.NONFIX - val literal = atomFieldsAcc.atom.literal ?: return Fixity.NONFIX - return if (literal.longName == null) Fixity.NONFIX else Fixity.UNKNOWN - } - - override fun getExpression(): VcExpr = atomFieldsAcc -} - -abstract class VcArgumentImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcArgument { - override fun isExplicit(): Boolean = true - - override fun getFixity(): Fixity = Fixity.UNKNOWN - - override fun getExpression(): VcExpr? = null -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcCaseArgImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcCaseArgImplMixin.kt deleted file mode 100644 index 54e00dc18..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcCaseArgImplMixin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import org.vclang.psi.VcCaseArg -import org.vclang.psi.VcExpr - - -abstract class VcCaseArgImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcCaseArg { - override fun getExpression(): VcExpr = exprList[0] - - override fun getReferable() = defIdentifier - - override fun getType() = exprList.getOrNull(1) -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcCaseExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcCaseExprImplMixin.kt deleted file mode 100644 index 7a41fc3ea..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcCaseExprImplMixin.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcCaseArg -import org.vclang.psi.VcCaseExpr - - -abstract class VcCaseExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcCaseExpr, Abstract.CaseArgumentsHolder { - override fun getCaseArguments(): List = caseArgList - - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitCase(this, caseArgList, expr, clauseList, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcCoClauseImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcCoClauseImplMixin.kt deleted file mode 100644 index 8d5a1a8fa..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcCoClauseImplMixin.kt +++ /dev/null @@ -1,31 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import org.vclang.psi.VcCoClause -import org.vclang.psi.VcExpr -import org.vclang.psi.VcNameTele - - -abstract class VcCoClauseImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcCoClause { - override fun getData() = this - - override fun getImplementedField() = longName?.referent - - fun getResolvedImplementedField() = longName?.refIdentifierList?.lastOrNull()?.reference?.resolve() as? Referable - - override fun getParameters(): List = nameTeleList - - override fun getImplementation(): VcExpr? = expr - - override fun getClassFieldImpls(): List = coClauseList - - override fun getClassReference(): ClassReferable? { - val resolved = getResolvedImplementedField() - return resolved as? ClassReferable ?: (resolved as? TypedReferable)?.typeClassReference - } - - override fun getArgumentsExplicitness() = emptyList() -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcCompositeElement.kt b/src/main/kotlin/org/vclang/psi/ext/VcCompositeElement.kt deleted file mode 100644 index 0a17d1136..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcCompositeElement.kt +++ /dev/null @@ -1,134 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.extapi.psi.ASTWrapperPsiElement -import com.intellij.extapi.psi.StubBasedPsiElementBase -import com.intellij.lang.ASTNode -import com.intellij.openapi.application.runReadAction -import com.intellij.psi.* -import com.intellij.psi.stubs.IStubElementType -import com.intellij.psi.stubs.StubElement -import com.jetbrains.jetpad.vclang.error.SourceInfo -import com.jetbrains.jetpad.vclang.naming.reference.DataContainer -import com.jetbrains.jetpad.vclang.naming.scope.ClassFieldImplScope -import com.jetbrains.jetpad.vclang.naming.scope.EmptyScope -import com.jetbrains.jetpad.vclang.naming.scope.Scope -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.module.ModuleScope -import org.vclang.psi.* -import org.vclang.resolving.VcReference -import org.vclang.typing.ModifiedClassFieldImplScope - -interface VcCompositeElement : PsiElement, SourceInfo { - val scope: Scope - override fun getReference(): VcReference? -} - -fun PsiElement.moduleTextRepresentationImpl(): String? = (containingFile as? VcFile)?.name - -fun PsiElement.positionTextRepresentationImpl(): String? { - val document = PsiDocumentManager.getInstance(project).getDocument(containingFile ?: return null) ?: return null - val offset = textOffset - val line = document.getLineNumber(offset) - val column = offset - document.getLineStartOffset(line) - return (line + 1).toString() + ":" + (column + 1).toString() -} - -interface VcSourceNode: VcCompositeElement, Abstract.SourceNode { - override fun getTopmostEquivalentSourceNode(): VcSourceNode - override fun getParentSourceNode(): VcSourceNode? -} - -private fun getVcScope(element: VcCompositeElement): Scope { - val sourceNode = element.ancestors.filterIsInstance().firstOrNull()?.topmostEquivalentSourceNode ?: return (element.containingFile as? VcFile)?.scope ?: EmptyScope.INSTANCE - val scope = ScopeFactory.forSourceNode(sourceNode.parentSourceNode?.scope ?: (sourceNode.containingFile as? VcFile)?.scope ?: EmptyScope.INSTANCE, sourceNode, sourceNode.module?.let { ModuleScope(it) }) - if (scope is ClassFieldImplScope && scope.withSuperClasses()) { - val classRef = scope.classReference - if (classRef is VcDefClass) { - return ModifiedClassFieldImplScope(classRef, sourceNode.parentSourceNode?.parentSourceNode as? Abstract.ClassReferenceHolder) - } - } - return scope -} - -fun getTopmostEquivalentSourceNode(sourceNode: VcSourceNode): VcSourceNode { - var current = sourceNode - while (true) { - val parent = current.parent - if (current is Abstract.Expression != parent is Abstract.Expression) { - return current - } - current = when { - parent is VcLiteral -> parent - parent is VcAtom -> parent - parent is VcTuple && parent.tupleExprList.size == 1 && parent.tupleExprList[0].exprList.size == 1 -> parent - parent is VcNewExpr && parent.newKw == null && parent.lbrace == null && parent.argumentList.isEmpty() -> parent - parent is VcAtomFieldsAcc && parent.fieldAccList.isEmpty() -> parent - parent is VcArgumentAppExpr && parent.argumentList.isEmpty() -> parent - parent is VcLongName && parent.refIdentifierList.size == 1 -> parent - parent is VcLevelExpr && parent.sucKw == null && parent.maxKw == null -> parent - parent is VcAtomLevelExpr && parent.lparen != null -> parent - parent is VcOnlyLevelExpr && parent.sucKw == null && parent.maxKw == null -> parent - parent is VcAtomOnlyLevelExpr && parent.lparen != null -> parent - else -> return current - } - } -} - -fun getParentSourceNode(sourceNode: VcSourceNode): VcSourceNode? { - val parent = sourceNode.topmostEquivalentSourceNode.parent - return parent as? VcFile ?: parent.ancestors.filterIsInstance().firstOrNull() -} - -private class SourceInfoErrorData(cause: PsiErrorElement) : Abstract.ErrorData(SmartPointerManager.createPointer(cause), cause.errorDescription), SourceInfo, DataContainer { - override fun getData(): Any = cause - - override fun moduleTextRepresentation(): String? = runReadAction { (cause as SmartPsiElementPointer<*>).element?.moduleTextRepresentationImpl() } - - override fun positionTextRepresentation(): String? = runReadAction { (cause as SmartPsiElementPointer<*>).element?.positionTextRepresentationImpl() } -} - -fun getErrorData(element: VcCompositeElement): Abstract.ErrorData? = - element.children.filterIsInstance().firstOrNull()?.let { SourceInfoErrorData(it) } - -abstract class VcCompositeElementImpl(node: ASTNode) : ASTWrapperPsiElement(node), VcCompositeElement { - override val scope - get() = getVcScope(this) - - override fun getReference(): VcReference? = null - - override fun moduleTextRepresentation(): String? = runReadAction { moduleTextRepresentationImpl() } - - override fun positionTextRepresentation(): String? = runReadAction { positionTextRepresentationImpl() } -} - -abstract class VcSourceNodeImpl(node: ASTNode) : VcCompositeElementImpl(node), VcSourceNode { - override fun getTopmostEquivalentSourceNode() = org.vclang.psi.ext.getTopmostEquivalentSourceNode(this) - - override fun getParentSourceNode() = org.vclang.psi.ext.getParentSourceNode(this) - - override fun getErrorData(): Abstract.ErrorData? = org.vclang.psi.ext.getErrorData(this) -} - -abstract class VcStubbedElementImpl> : StubBasedPsiElementBase, VcSourceNode { - constructor(node: ASTNode) : super(node) - - constructor(stub: StubT, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override val scope - get() = getVcScope(this) - - override fun getReference(): VcReference? = null - - override fun toString(): String = "${javaClass.simpleName}($elementType)" - - override fun moduleTextRepresentation(): String? = runReadAction { moduleTextRepresentationImpl() } - - override fun positionTextRepresentation(): String? = runReadAction { positionTextRepresentationImpl() } - - override fun getTopmostEquivalentSourceNode() = org.vclang.psi.ext.getTopmostEquivalentSourceNode(this) - - override fun getParentSourceNode() = org.vclang.psi.ext.getParentSourceNode(this) - - override fun getErrorData(): Abstract.ErrorData? = org.vclang.psi.ext.getErrorData(this) -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcConstructorClauseImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcConstructorClauseImplMixin.kt deleted file mode 100644 index cd814844b..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcConstructorClauseImplMixin.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import org.vclang.psi.VcConstructor -import org.vclang.psi.VcConstructorClause -import org.vclang.psi.VcPattern - - -abstract class VcConstructorClauseImplMixin(node: ASTNode) : VcSourceNodeImpl(node), VcConstructorClause { - override fun getData(): VcConstructorClauseImplMixin = this - - override fun getPatterns(): List = patternList - - override fun getConstructors(): List = constructorList -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcExprImplMixin.kt deleted file mode 100644 index 6654f356a..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcExprImplMixin.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcExpr - - -abstract class VcExprImplMixin(node: ASTNode): VcSourceNodeImpl(node), VcExpr { - override fun getData(): VcExprImplMixin = this - - override fun isExplicit(): Boolean = true - - override fun getReferableList(): List = listOf(null) - - override fun getType(): Abstract.Expression = this -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLamExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcLamExprImplMixin.kt deleted file mode 100644 index e7a5873d5..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcLamExprImplMixin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcLamExpr -import org.vclang.psi.VcNameTele - -abstract class VcLamExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcLamExpr, Abstract.ParametersHolder { - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitLam(this, nameTeleList, expr, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override fun getParameters(): List = nameTeleList -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLetClauseImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcLetClauseImplMixin.kt deleted file mode 100644 index 17d814c18..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcLetClauseImplMixin.kt +++ /dev/null @@ -1,42 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.intellij.psi.PsiElement -import com.intellij.psi.search.LocalSearchScope -import com.intellij.psi.search.SearchScope -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.psi.VcExpr -import org.vclang.psi.VcLetClause -import org.vclang.psi.VcLetExpr -import org.vclang.psi.VcNameTele -import org.vclang.typing.ExpectedTypeVisitor - - -abstract class VcLetClauseImplMixin(node: ASTNode) : PsiReferableImpl(node), VcLetClause, VcSourceNode { - override fun getReferable(): Referable = this - - override fun getParameters(): List = nameTeleList - - override fun getResultType(): VcExpr? = typeAnnotation?.expr - - override fun getTerm(): VcExpr? = expr - - override fun getUseScope(): SearchScope { - if (parent is VcLetExpr) return LocalSearchScope(parent) - return super.getUseScope() - } - - override fun getParameterType(params: List) = ExpectedTypeVisitor.getParameterType(parameters, resultType, params, textRepresentation()) - - override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, resultType) - - override fun getTopmostEquivalentSourceNode() = org.vclang.psi.ext.getTopmostEquivalentSourceNode(this) - - override fun getParentSourceNode() = org.vclang.psi.ext.getParentSourceNode(this) - - override fun getErrorData(): Abstract.ErrorData? = org.vclang.psi.ext.getErrorData(this) - - override val psiElementType: PsiElement? - get() = resultType -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcLetExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcLetExprImplMixin.kt deleted file mode 100644 index 1c98cc971..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcLetExprImplMixin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcLetClause -import org.vclang.psi.VcLetExpr - -abstract class VcLetExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcLetExpr, Abstract.LetClausesHolder { - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitLet(this, letClauseList, expr, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override fun getLetClauses(): List = letClauseList -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcNsIdImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcNsIdImplMixin.kt deleted file mode 100644 index 0bc6f4f8c..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcNsIdImplMixin.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.term.Precedence -import org.vclang.psi.VcNsId -import org.vclang.psi.ext.impl.ReferableAdapter - - -abstract class VcNsIdImplMixin(node: ASTNode) : VcCompositeElementImpl(node), VcNsId { - override fun getOldReference(): Referable = refIdentifier.referent - - override fun getName() = defIdentifier?.referenceName - - override fun getPrecedence(): Precedence? = prec.let { ReferableAdapter.calcPrecedence(it) } -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/VcPiExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcPiExprImplMixin.kt deleted file mode 100644 index 60c583c4c..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcPiExprImplMixin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcPiExpr -import org.vclang.psi.VcTypeTele - -abstract class VcPiExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcPiExpr, Abstract.ParametersHolder { - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitPi(this, typeTeleList, expr, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override fun getParameters(): List = typeTeleList -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcReferenceElement.kt b/src/main/kotlin/org/vclang/psi/ext/VcReferenceElement.kt deleted file mode 100644 index 435376c7f..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcReferenceElement.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.vclang.psi.ext - -interface VcReferenceElement : VcCompositeElement { - val referenceNameElement: VcCompositeElement? - val referenceName: String -} diff --git a/src/main/kotlin/org/vclang/psi/ext/VcSigmaExprImplMixin.kt b/src/main/kotlin/org/vclang/psi/ext/VcSigmaExprImplMixin.kt deleted file mode 100644 index fbbf6394c..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/VcSigmaExprImplMixin.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.vclang.psi.ext - -import com.intellij.lang.ASTNode -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractExpressionVisitor -import org.vclang.psi.VcSigmaExpr -import org.vclang.psi.VcTypeTele - -abstract class VcSigmaExprImplMixin(node: ASTNode) : VcExprImplMixin(node), VcSigmaExpr, Abstract.ParametersHolder { - override fun

accept(visitor: AbstractExpressionVisitor, params: P?): R = - visitor.visitSigma(this, typeTeleList, if (visitor.visitErrors()) org.vclang.psi.ext.getErrorData(this) else null, params) - - override fun getParameters(): List = typeTeleList -} diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldImpl.kt b/src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldImpl.kt deleted file mode 100644 index 490fae5cf..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/impl/ClassFieldImpl.kt +++ /dev/null @@ -1,47 +0,0 @@ -package org.vclang.psi.ext.impl - -import com.intellij.lang.ASTNode -import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.Referable -import com.jetbrains.jetpad.vclang.naming.reference.TypedReferable -import com.jetbrains.jetpad.vclang.naming.resolving.visitor.ExpressionResolveNameVisitor -import org.vclang.VcIcons -import org.vclang.psi.VcClassImplement -import org.vclang.psi.VcCoClause -import org.vclang.psi.VcNameTele -import org.vclang.psi.ext.PsiStubbedReferableImpl -import org.vclang.psi.stubs.VcClassImplementStub - -abstract class ClassFieldImplAdapter : PsiStubbedReferableImpl, VcClassImplement { - constructor(node: ASTNode) : super(node) - - constructor(stub: VcClassImplementStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override fun getData() = this - - override fun getName() = longName.refIdentifierList.lastOrNull()?.referenceName - - override fun getImplementedField() = longName.referent - - fun getResolvedImplementedField(): Referable? { - val longName = longName - return ExpressionResolveNameVisitor.resolve(longName.referent, longName.scope) - // return longName.reference?.resolve() - } - - override fun getParameters(): List = nameTeleList - - override fun getImplementation() = expr - - override fun getClassFieldImpls(): List = coClauseList - - override fun getArgumentsExplicitness() = emptyList() - - override fun getClassReference(): ClassReferable? { - val resolved = getResolvedImplementedField() - return resolved as? ClassReferable ?: (resolved as? TypedReferable)?.typeClassReference - } - - override fun getIcon(flags: Int) = VcIcons.IMPLEMENTATION -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/Constructor.kt b/src/main/kotlin/org/vclang/psi/ext/impl/Constructor.kt deleted file mode 100644 index 983a3d37e..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/impl/Constructor.kt +++ /dev/null @@ -1,53 +0,0 @@ -package org.vclang.psi.ext.impl - -import com.intellij.lang.ASTNode -import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.LocatedReferable -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcConstructorStub -import org.vclang.typing.ExpectedTypeVisitor -import javax.swing.Icon - -abstract class ConstructorAdapter : ReferableAdapter, VcConstructor { - constructor(node: ASTNode) : super(node) - - constructor(stub: VcConstructorStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override fun getKind() = GlobalReferable.Kind.CONSTRUCTOR - - override fun getData() = this - - override fun getPatterns(): List = emptyList() - - override fun getConstructors(): List = listOf(this) - - override fun getPrecedence(): Precedence = calcPrecedence(prec) - - override fun getReferable(): LocatedReferable = this - - override fun getParameters(): List = typeTeleList - - override fun getEliminatedExpressions(): List = elim?.refIdentifierList ?: emptyList() - - override fun getClauses(): List = clauseList - - override fun isVisible(): Boolean = true - - override fun getResultType() = expr - - override fun getParameterType(params: List): Any? { - val parameters = (ancestors.filterIsInstance().firstOrNull()?.typeTeleList?.map { ExpectedTypeVisitor.ParameterImpl(false, it.referableList, it.type) } ?: emptyList()) + parameters - return ExpectedTypeVisitor.getParameterType(parameters, ExpectedTypeVisitor.TooManyArgumentsError(textRepresentation(), parameters.sumBy { it.referableList.size }), params, textRepresentation()) - } - - override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) }) - - override fun getIcon(flags: Int): Icon = VcIcons.CONSTRUCTOR - - override val psiElementType: VcDefIdentifier? - get() = ancestors.filterIsInstance().firstOrNull()?.defIdentifier -} diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/FieldDefIdentifierAdapter.kt b/src/main/kotlin/org/vclang/psi/ext/impl/FieldDefIdentifierAdapter.kt deleted file mode 100644 index 2a7341e18..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/impl/FieldDefIdentifierAdapter.kt +++ /dev/null @@ -1,65 +0,0 @@ -package org.vclang.psi.ext.impl - -import com.intellij.lang.ASTNode -import com.intellij.psi.PsiElement -import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcClassFieldParamStub -import org.vclang.resolving.VcDefReferenceImpl -import org.vclang.resolving.VcReference -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor - -abstract class FieldDefIdentifierAdapter : ReferableAdapter, VcFieldDefIdentifier { - constructor(node: ASTNode) : super(node) - - constructor(stub: VcClassFieldParamStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override fun getKind() = GlobalReferable.Kind.FIELD - - override val referenceNameElement - get() = this - - override val referenceName: String - get() = name - - override fun getName(): String = stub?.name ?: text - - override fun textRepresentation(): String = name - - override fun getReference(): VcReference = VcDefReferenceImpl(this) - - override fun getPrecedence(): Precedence = Precedence.DEFAULT - - override fun getReferable() = this - - override fun isVisible() = false - - override fun isExplicitField() = (parent as? VcFieldTele)?.isExplicit ?: true - - override fun getTypeClassReference(): ClassReferable? = - resultType?.let { ReferableExtractVisitor().findClassReferable(it) } - - override fun getParameterType(params: List) = - when { - params[0] -> ExpectedTypeVisitor.getParameterType(resultType, params, name) - params.size == 1 -> ancestors.filterIsInstance().firstOrNull()?.let { ExpectedTypeVisitor.ReferenceImpl(it) } - else -> ExpectedTypeVisitor.getParameterType(resultType, params.drop(1), name) - } - - override fun getTypeOf() = resultType - - override fun getParameters(): List = emptyList() - - override fun getResultType(): VcExpr? = (parent as? VcFieldTele)?.expr - - override fun getIcon(flags: Int) = VcIcons.CLASS_FIELD - - override val psiElementType: PsiElement? - get() = (parent as? VcFieldTele)?.expr -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/FunctionDefinition.kt b/src/main/kotlin/org/vclang/psi/ext/impl/FunctionDefinition.kt deleted file mode 100644 index 0b12e777c..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/impl/FunctionDefinition.kt +++ /dev/null @@ -1,60 +0,0 @@ -package org.vclang.psi.ext.impl - -import com.intellij.lang.ASTNode -import com.intellij.psi.PsiElement -import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.term.Precedence -import com.jetbrains.jetpad.vclang.term.abs.Abstract -import com.jetbrains.jetpad.vclang.term.abs.AbstractDefinitionVisitor -import org.vclang.VcIcons -import org.vclang.psi.* -import org.vclang.psi.stubs.VcDefFunctionStub -import org.vclang.typing.ExpectedTypeVisitor -import org.vclang.typing.ReferableExtractVisitor -import javax.swing.Icon - -abstract class FunctionDefinitionAdapter : DefinitionAdapter, VcDefFunction { - constructor(node: ASTNode) : super(node) - - constructor(stub: VcDefFunctionStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override fun getParameters(): List = nameTeleList - - override fun getResultType(): VcExpr? = expr - - override fun getTerm(): VcExpr? = functionBody?.expr - - override fun getEliminatedExpressions(): List = functionBody?.elim?.refIdentifierList ?: emptyList() - - override fun getClauses(): List = functionBody?.functionClauses?.clauseList ?: emptyList() - - override fun getPrecedence(): Precedence = calcPrecedence(prec) - - override fun isCoerce() = coerceKw != null - - override fun accept(visitor: AbstractDefinitionVisitor): R = visitor.visitFunction(this) - - override fun getIcon(flags: Int): Icon = VcIcons.FUNCTION_DEFINITION - - override fun getTypeClassReference(): ClassReferable? { - val type = resultType ?: return null - return if (parameters.all { !it.isExplicit }) ReferableExtractVisitor().findClassReferable(type) else null - } - - override fun getParameterType(params: List) = ExpectedTypeVisitor.getParameterType(parameters, resultType, params, textRepresentation()) - - override fun getTypeOf() = ExpectedTypeVisitor.getTypeOf(parameters, resultType) - - override fun getClassReference(): ClassReferable? { - val type = resultType ?: return null - return ReferableExtractVisitor().findClassReferable(type) - } - - override fun getClassFieldImpls(): List = functionBody?.coClauses?.coClauseList ?: emptyList() - - override fun getArgumentsExplicitness() = (resultType as? VcNewExpr)?.argumentAppExpr?.argumentList?.map { it.isExplicit } ?: emptyList() - - override val psiElementType: PsiElement? - get() = resultType -} diff --git a/src/main/kotlin/org/vclang/psi/ext/impl/VcDefModuleMixin.kt b/src/main/kotlin/org/vclang/psi/ext/impl/VcDefModuleMixin.kt deleted file mode 100644 index 4603f2a1e..000000000 --- a/src/main/kotlin/org/vclang/psi/ext/impl/VcDefModuleMixin.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.vclang.psi.ext.impl - -import com.intellij.lang.ASTNode -import com.intellij.psi.stubs.IStubElementType -import com.jetbrains.jetpad.vclang.term.group.ChildGroup -import com.jetbrains.jetpad.vclang.term.group.Group -import org.vclang.psi.VcConstructor -import org.vclang.psi.VcDefModule -import org.vclang.psi.VcStatCmd -import org.vclang.psi.ancestors -import org.vclang.psi.stubs.VcDefModuleStub -import org.vclang.typing.ExpectedTypeVisitor - - -abstract class VcDefModuleMixin : ReferableAdapter, VcDefModule { - constructor(node: ASTNode) : super(node) - - constructor(stub: VcDefModuleStub, nodeType: IStubElementType<*, *>) : super(stub, nodeType) - - override fun getParentGroup(): ChildGroup? = parent.ancestors.filterIsInstance().firstOrNull() - - override fun getReferable() = this - - override fun getSubgroups(): List = where?.statementList?.mapNotNull { it.definition ?: it.defModule as ChildGroup? } ?: emptyList() - - override fun getNamespaceCommands(): List = where?.statementList?.mapNotNull { it.statCmd } ?: emptyList() - - override fun getConstructors(): List = emptyList() - - override fun getDynamicSubgroups(): List = emptyList() - - override fun getFields(): List = emptyList() - - override fun getParameterType(params: List) = ExpectedTypeVisitor.TooManyArgumentsError(textRepresentation(), 0) -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/psi/stubs/StubImplementations.kt b/src/main/kotlin/org/vclang/psi/stubs/StubImplementations.kt deleted file mode 100644 index 0d485e9a1..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/StubImplementations.kt +++ /dev/null @@ -1,306 +0,0 @@ -package org.vclang.psi.stubs - -import com.intellij.psi.PsiFile -import com.intellij.psi.StubBuilder -import com.intellij.psi.stubs.* -import com.intellij.psi.tree.IStubFileElementType -import org.vclang.VcLanguage -import org.vclang.psi.* -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.impl.* - -class VcFileStub(file: VcFile?) : PsiFileStubImpl(file) { - - override fun getType(): Type = Type - - object Type : IStubFileElementType(VcLanguage.INSTANCE) { - - override fun getStubVersion(): Int = 1 - - override fun getBuilder(): StubBuilder = object : DefaultStubBuilder() { - override fun createStubForFile(file: PsiFile): StubElement<*> = - VcFileStub(file as VcFile) - } - - override fun serialize(stub: VcFileStub, dataStream: StubOutputStream) { - } - - override fun deserialize( - dataStream: StubInputStream, - parentStub: StubElement<*>? - ): VcFileStub = VcFileStub(null) - - override fun getExternalId(): String = "Vclang.file" - } -} - -fun factory(name: String): VcStubElementType<*, *> = when (name) { - "DEF_CLASS" -> VcDefClassStub.Type - "CLASS_FIELD" -> VcClassFieldStub.Type - "FIELD_DEF_IDENTIFIER" -> VcClassFieldParamStub.Type - "CLASS_FIELD_SYN" -> VcClassFieldSynStub.Type - "CLASS_IMPLEMENT" -> VcClassImplementStub.Type - "DEF_INSTANCE" -> VcDefInstanceStub.Type - "CONSTRUCTOR" -> VcConstructorStub.Type - "DEF_DATA" -> VcDefDataStub.Type - "DEF_FUNCTION" -> VcDefFunctionStub.Type - "DEF_MODULE" -> VcDefModuleStub.Type - else -> error("Unknown element $name") -} - -abstract class VcStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - override val name: String? -) : StubBase(parent, elementType), VcNamedStub - -class VcDefClassStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("DEF_CLASS") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcDefClassStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcDefClassStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcDefClassStub): VcDefClass = VcDefClassImpl(stub, this) - - override fun createStub(psi: VcDefClass, parentStub: StubElement<*>?): VcDefClassStub = - VcDefClassStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcDefClassStub, sink: IndexSink) = sink.indexClass(stub) - } -} - -class VcClassFieldStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("CLASS_FIELD") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcClassFieldStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcClassFieldStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcClassFieldStub): VcClassField = VcClassFieldImpl(stub, this) - - override fun createStub(psi: VcClassField, parentStub: StubElement<*>?): VcClassFieldStub = - VcClassFieldStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcClassFieldStub, sink: IndexSink) = sink.indexClassField(stub) - } -} - -class VcClassFieldParamStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("FIELD_DEF_IDENTIFIER") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcClassFieldParamStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcClassFieldParamStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcClassFieldParamStub): VcFieldDefIdentifier = VcFieldDefIdentifierImpl(stub, this) - - override fun createStub(psi: VcFieldDefIdentifier, parentStub: StubElement<*>?): VcClassFieldParamStub = - VcClassFieldParamStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcClassFieldParamStub, sink: IndexSink) = sink.indexClassFieldParam(stub) - } -} - -class VcClassFieldSynStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("CLASS_FIELD_SYN") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcClassFieldSynStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcClassFieldSynStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcClassFieldSynStub): VcClassFieldSyn = VcClassFieldSynImpl(stub, this) - - override fun createStub(psi: VcClassFieldSyn, parentStub: StubElement<*>?): VcClassFieldSynStub = - VcClassFieldSynStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcClassFieldSynStub, sink: IndexSink) = sink.indexClassFieldSyn(stub) - } -} - -class VcClassImplementStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("CLASS_IMPLEMENT") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcClassImplementStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcClassImplementStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcClassImplementStub): VcClassImplement = - VcClassImplementImpl(stub, this) - - override fun createStub( - psi: VcClassImplement, - parentStub: StubElement<*>? - ): VcClassImplementStub = VcClassImplementStub(parentStub, this, psi.longName.refIdentifierList.lastOrNull()?.referenceName) - - override fun indexStub(stub: VcClassImplementStub, sink: IndexSink) = - sink.indexClassImplement(stub) - } -} - -class VcDefInstanceStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("DEF_INSTANCE") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcDefInstanceStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcDefInstanceStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcDefInstanceStub): VcDefInstance = - VcDefInstanceImpl(stub, this) - - override fun createStub( - psi: VcDefInstance, - parentStub: StubElement<*>? - ): VcDefInstanceStub = VcDefInstanceStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcDefInstanceStub, sink: IndexSink) = - sink.indexClassInstance(stub) - } -} - -class VcConstructorStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("CONSTRUCTOR") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcConstructorStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcConstructorStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcConstructorStub): VcConstructor = - VcConstructorImpl(stub, this) - - override fun createStub( - psi: VcConstructor, - parentStub: StubElement<*>? - ): VcConstructorStub = VcConstructorStub(parentStub, this, psi.textRepresentation()) - - override fun indexStub(stub: VcConstructorStub, sink: IndexSink) = - sink.indexConstructor(stub) - } -} - - -class VcDefDataStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("DEF_DATA") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcDefDataStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcDefDataStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcDefDataStub): VcDefData = VcDefDataImpl(stub, this) - - override fun createStub( - psi: VcDefData, - parentStub: StubElement<*>? - ): VcDefDataStub = VcDefDataStub(parentStub, this, psi.name) - - override fun indexStub(stub: VcDefDataStub, sink: IndexSink) = sink.indexData(stub) - } -} - -class VcDefFunctionStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("DEF_FUNCTION") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcDefFunctionStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcDefFunctionStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcDefFunctionStub): VcDefFunction = - VcDefFunctionImpl(stub, this) - - override fun createStub( - psi: VcDefFunction, - parentStub: StubElement<*>? - ): VcDefFunctionStub = VcDefFunctionStub(parentStub, this, psi.name) - - override fun indexStub(stub: VcDefFunctionStub, sink: IndexSink) = sink.indexFunction(stub) - } -} - -class VcDefModuleStub( - parent: StubElement<*>?, - elementType: IStubElementType<*, *>, - name: String? -) : VcStub(parent, elementType, name) { - - object Type : VcStubElementType("DEF_MODULE") { - - override fun deserialize(dataStream: StubInputStream, parentStub: StubElement<*>?) = - VcDefModuleStub(parentStub, this, dataStream.readName()?.string) - - override fun serialize(stub: VcDefModuleStub, dataStream: StubOutputStream) = - with(dataStream) { writeName(stub.name) } - - override fun createPsi(stub: VcDefModuleStub): VcDefModule = - VcDefModuleImpl(stub, this) - - override fun createStub( - psi: VcDefModule, - parentStub: StubElement<*>? - ): VcDefModuleStub = VcDefModuleStub(parentStub, this, psi.name) - - override fun indexStub(stub: VcDefModuleStub, sink: IndexSink) = sink.indexModule(stub) - } -} diff --git a/src/main/kotlin/org/vclang/psi/stubs/StubIndexing.kt b/src/main/kotlin/org/vclang/psi/stubs/StubIndexing.kt deleted file mode 100644 index d53864239..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/StubIndexing.kt +++ /dev/null @@ -1,69 +0,0 @@ -package org.vclang.psi.stubs - -import com.intellij.psi.stubs.IndexSink -import org.vclang.psi.stubs.index.VcDefinitionIndex -import org.vclang.psi.stubs.index.VcGotoClassIndex -import org.vclang.psi.stubs.index.VcNamedElementIndex - -fun IndexSink.indexClass(stub: VcDefClassStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) - indexGotoClass(stub) -} - -fun IndexSink.indexClassField(stub: VcClassFieldStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexClassFieldParam(stub: VcClassFieldParamStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexClassFieldSyn(stub: VcClassFieldSynStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexClassImplement(stub: VcClassImplementStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexClassInstance(stub: VcDefInstanceStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexConstructor(stub: VcConstructorStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexData(stub: VcDefDataStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexFunction(stub: VcDefFunctionStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -fun IndexSink.indexModule(stub: VcDefModuleStub) { - indexNamedStub(stub) - indexDefinitionStub(stub) -} - -private fun IndexSink.indexNamedStub(stub: VcNamedStub) { - stub.name?.let { occurrence(VcNamedElementIndex.KEY, it) } -} - -private fun IndexSink.indexDefinitionStub(stub: VcNamedStub) { - stub.name?.let { occurrence(VcDefinitionIndex.KEY, it) } -} - -private fun IndexSink.indexGotoClass(stub: VcNamedStub) { - stub.name?.let { occurrence(VcGotoClassIndex.KEY, it) } -} diff --git a/src/main/kotlin/org/vclang/psi/stubs/StubInterfaces.kt b/src/main/kotlin/org/vclang/psi/stubs/StubInterfaces.kt deleted file mode 100644 index 75ccd686a..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/StubInterfaces.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.vclang.psi.stubs - -interface VcNamedStub { - val name: String? -} diff --git a/src/main/kotlin/org/vclang/psi/stubs/index/VcDefinitionIndex.kt b/src/main/kotlin/org/vclang/psi/stubs/index/VcDefinitionIndex.kt deleted file mode 100644 index d1882c15b..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/index/VcDefinitionIndex.kt +++ /dev/null @@ -1,18 +0,0 @@ -package org.vclang.psi.stubs.index - -import com.intellij.psi.stubs.StringStubIndexExtension -import com.intellij.psi.stubs.StubIndexKey -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.stubs.VcFileStub - -class VcDefinitionIndex : StringStubIndexExtension() { - - override fun getVersion(): Int = VcFileStub.Type.stubVersion - - override fun getKey(): StubIndexKey = KEY - - companion object { - val KEY: StubIndexKey = - StubIndexKey.createIndexKey(VcDefinitionIndex::class.java.canonicalName) - } -} diff --git a/src/main/kotlin/org/vclang/psi/stubs/index/VcGotoClassIndex.kt b/src/main/kotlin/org/vclang/psi/stubs/index/VcGotoClassIndex.kt deleted file mode 100644 index 423238e3e..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/index/VcGotoClassIndex.kt +++ /dev/null @@ -1,18 +0,0 @@ -package org.vclang.psi.stubs.index - -import com.intellij.psi.stubs.StringStubIndexExtension -import com.intellij.psi.stubs.StubIndexKey -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.stubs.VcFileStub - -class VcGotoClassIndex : StringStubIndexExtension() { - - override fun getVersion(): Int = VcFileStub.Type.stubVersion - - override fun getKey(): StubIndexKey = KEY - - companion object { - val KEY: StubIndexKey = - StubIndexKey.createIndexKey(VcGotoClassIndex::class.java.canonicalName) - } -} diff --git a/src/main/kotlin/org/vclang/psi/stubs/index/VcNamedElementIndex.kt b/src/main/kotlin/org/vclang/psi/stubs/index/VcNamedElementIndex.kt deleted file mode 100644 index 89bb8b699..000000000 --- a/src/main/kotlin/org/vclang/psi/stubs/index/VcNamedElementIndex.kt +++ /dev/null @@ -1,18 +0,0 @@ -package org.vclang.psi.stubs.index - -import com.intellij.psi.stubs.StringStubIndexExtension -import com.intellij.psi.stubs.StubIndexKey -import org.vclang.psi.ext.PsiReferable -import org.vclang.psi.stubs.VcFileStub - -class VcNamedElementIndex : StringStubIndexExtension() { - - override fun getVersion(): Int = VcFileStub.Type.stubVersion - - override fun getKey(): StubIndexKey = KEY - - companion object { - val KEY: StubIndexKey = - StubIndexKey.createIndexKey(VcNamedElementIndex::class.java.canonicalName) - } -} diff --git a/src/main/kotlin/org/vclang/refactoring/VcRefactoringSupportProvider.kt b/src/main/kotlin/org/vclang/refactoring/VcRefactoringSupportProvider.kt deleted file mode 100644 index bb251a914..000000000 --- a/src/main/kotlin/org/vclang/refactoring/VcRefactoringSupportProvider.kt +++ /dev/null @@ -1,21 +0,0 @@ -package org.vclang.refactoring - -import com.intellij.lang.refactoring.RefactoringSupportProvider -import com.intellij.psi.PsiElement -import com.intellij.psi.impl.source.tree.LeafPsiElement -import org.vclang.psi.* -import org.vclang.psi.VcElementTypes.INFIX -import org.vclang.psi.VcElementTypes.POSTFIX - -class VcRefactoringSupportProvider : RefactoringSupportProvider() { - override fun isInplaceRenameAvailable(element: PsiElement, context: PsiElement?): Boolean { - return element is VcDefIdentifier || element is VcFieldDefIdentifier || element is VcLetClause - } - - override fun isMemberInplaceRenameAvailable(element: PsiElement, context: PsiElement?): Boolean { - if (context is LeafPsiElement && (context.elementType == INFIX || context.elementType == POSTFIX)) return false - - return element is VcDefClass || element is VcDefFunction || element is VcDefData || - element is VcClassField || element is VcClassFieldSyn || element is VcConstructor || element is VcDefModule - } -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/resolving/PsiPartialConcreteProvider.kt b/src/main/kotlin/org/vclang/resolving/PsiPartialConcreteProvider.kt deleted file mode 100644 index 59c02a28e..000000000 --- a/src/main/kotlin/org/vclang/resolving/PsiPartialConcreteProvider.kt +++ /dev/null @@ -1,30 +0,0 @@ -package org.vclang.resolving - -import com.jetbrains.jetpad.vclang.naming.reference.ClassReferable -import com.jetbrains.jetpad.vclang.naming.reference.GlobalReferable -import com.jetbrains.jetpad.vclang.naming.reference.Reference -import com.jetbrains.jetpad.vclang.typechecking.typecheckable.provider.PartialConcreteProvider -import org.vclang.psi.VcDefClass -import org.vclang.psi.VcDefData -import org.vclang.psi.VcDefFunction -import org.vclang.psi.VcDefInstance -import org.vclang.psi.ext.PsiLocatedReferable - - -object PsiPartialConcreteProvider : PartialConcreteProvider { - override fun getInstanceTypeReference(instance: GlobalReferable): Reference? = - (PsiLocatedReferable.fromReferable(instance) as? VcDefInstance)?.let { getInstanceReference(it) } - - override fun isRecord(classRef: ClassReferable) = (PsiLocatedReferable.fromReferable(classRef) as? VcDefClass)?.recordKw != null - - private fun getInstanceReference(instance: VcDefInstance): Reference? = - instance.argumentAppExpr?.let { argumentAppExpr -> - argumentAppExpr.longNameExpr?.longName ?: argumentAppExpr.atomFieldsAcc?.let { it.atom.literal?.longName } - } - - override fun isInstance(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is VcDefInstance - - override fun isCoerce(ref: GlobalReferable) = (PsiLocatedReferable.fromReferable(ref) as? VcDefFunction)?.coerceKw != null - - override fun isData(ref: GlobalReferable) = PsiLocatedReferable.fromReferable(ref) is VcDefData -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/typechecking/PsiInstanceProviderSet.kt b/src/main/kotlin/org/vclang/typechecking/PsiInstanceProviderSet.kt deleted file mode 100644 index 0731f91db..000000000 --- a/src/main/kotlin/org/vclang/typechecking/PsiInstanceProviderSet.kt +++ /dev/null @@ -1,30 +0,0 @@ -package org.vclang.typechecking - -import com.intellij.openapi.application.runReadAction -import com.jetbrains.jetpad.vclang.naming.reference.TCReferable -import com.jetbrains.jetpad.vclang.naming.reference.converter.ReferableConverter -import com.jetbrains.jetpad.vclang.naming.scope.CachingScope -import com.jetbrains.jetpad.vclang.naming.scope.ScopeFactory -import com.jetbrains.jetpad.vclang.typechecking.instance.provider.InstanceProvider -import com.jetbrains.jetpad.vclang.typechecking.instance.provider.InstanceProviderSet -import com.jetbrains.jetpad.vclang.typechecking.typecheckable.provider.ConcreteProvider -import org.vclang.psi.VcFile -import org.vclang.psi.ext.PsiLocatedReferable -import org.vclang.psi.ext.VcCompositeElement -import org.vclang.psi.moduleScopeProvider - - -class PsiInstanceProviderSet(private val concreteProvider: ConcreteProvider, private val referableConverter: ReferableConverter) : InstanceProviderSet() { - override fun get(referable: TCReferable): InstanceProvider? { - val result = super.get(referable) - if (result != null) { - return result - } - - val psiElement = PsiLocatedReferable.fromReferable(referable) as? VcCompositeElement ?: return null - return runReadAction { - val file = psiElement.containingFile as? VcFile ?: return@runReadAction null - if (collectInstances(file, CachingScope.make(ScopeFactory.parentScopeForGroup(file, file.moduleScopeProvider, true)), concreteProvider, referableConverter)) super.get(referable) else null - } - } -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/typechecking/VcLibraryResolver.kt b/src/main/kotlin/org/vclang/typechecking/VcLibraryResolver.kt deleted file mode 100644 index 7c708bce3..000000000 --- a/src/main/kotlin/org/vclang/typechecking/VcLibraryResolver.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.vclang.typechecking - -import com.intellij.openapi.module.ModuleManager -import com.intellij.openapi.project.Project -import com.jetbrains.jetpad.vclang.library.Library -import com.jetbrains.jetpad.vclang.library.resolver.LibraryResolver -import org.vclang.module.VcRawLibrary - - -class VcLibraryResolver(private val project: Project): LibraryResolver { - override fun resolve(name: String): Library? { - val module = ModuleManager.getInstance(project)?.findModuleByName(name) ?: return null - return VcRawLibrary(module, TypeCheckingService.getInstance(project).typecheckerState) - } -} \ No newline at end of file diff --git a/src/main/kotlin/org/vclang/typechecking/execution/FullModulePath.kt b/src/main/kotlin/org/vclang/typechecking/execution/FullModulePath.kt deleted file mode 100644 index 73c9e8897..000000000 --- a/src/main/kotlin/org/vclang/typechecking/execution/FullModulePath.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.vclang.typechecking.execution - -import com.jetbrains.jetpad.vclang.module.ModulePath - - -data class FullModulePath(val libraryName: String, val modulePath: ModulePath) \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 642262686..3ff509e52 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,11 +1,11 @@ - org.vclang.lang - Vclang + org.arend.lang + Arend 0.0.1 - + - - + + + implementation="org.arend.module.util.ArendProjectStructureDetector"/> - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + implementation="org.arend.search.ArendDefClassGroupingRuleProvider"/> + implementation="org.arend.search.ArendDefDataGroupingRuleProvider"/> + implementation="org.arend.search.ArendDefFunctionGroupingRuleProvider"/> + implementation="org.arend.search.ArendClassFieldGroupingRuleProvider"/> + implementation="org.arend.search.ArendClassFieldSynGroupingRuleProvider"/> + implementation="org.arend.search.ArendDefInstanceGroupingRuleProvider"/> + implementation="org.arend.search.ArendConstructorGroupingRuleProvider"/> - + + implementation="org.arend.navigation.ArendSymbolNavigationContributor"/> - - - - + + + + - + - + - + - + - + - + - + - + - + - - + + - + + implementation="org.arend.typechecking.execution.configurations.TypeCheckConfigurationType"/> + implementation="org.arend.typechecking.execution.TypeCheckRunConfigurationProducer"/> - - - + + + - + - + - + - + - - + diff --git a/src/main/resources/fileTemplates/internal/Vclang File.vc.ft b/src/main/resources/fileTemplates/internal/Arend File.ard.ft similarity index 100% rename from src/main/resources/fileTemplates/internal/Vclang File.vc.ft rename to src/main/resources/fileTemplates/internal/Arend File.ard.ft diff --git a/src/main/resources/fileTemplates/internal/Arend File.ard.html b/src/main/resources/fileTemplates/internal/Arend File.ard.html new file mode 100644 index 000000000..aa33320e7 --- /dev/null +++ b/src/main/resources/fileTemplates/internal/Arend File.ard.html @@ -0,0 +1,5 @@ + + + Empty Arend file. + + diff --git a/src/main/resources/fileTemplates/internal/Vclang File.vc.html b/src/main/resources/fileTemplates/internal/Vclang File.vc.html deleted file mode 100644 index bde760022..000000000 --- a/src/main/resources/fileTemplates/internal/Vclang File.vc.html +++ /dev/null @@ -1,5 +0,0 @@ - - - Empty Vclang file. - - \ No newline at end of file diff --git a/src/main/resources/lib/Prelude.vcc b/src/main/resources/lib/Prelude.arc similarity index 100% rename from src/main/resources/lib/Prelude.vcc rename to src/main/resources/lib/Prelude.arc diff --git a/src/main/resources/lib/Prelude.vc b/src/main/resources/lib/Prelude.ard similarity index 100% rename from src/main/resources/lib/Prelude.vc rename to src/main/resources/lib/Prelude.ard diff --git a/src/test/kotlin/org/vclang/VcTestBase.kt b/src/test/kotlin/org/arend/ArendTestBase.kt similarity index 86% rename from src/test/kotlin/org/vclang/VcTestBase.kt rename to src/test/kotlin/org/arend/ArendTestBase.kt index 55d7b9448..1003667d9 100644 --- a/src/test/kotlin/org/vclang/VcTestBase.kt +++ b/src/test/kotlin/org/arend/ArendTestBase.kt @@ -1,4 +1,4 @@ -package org.vclang +package org.arend import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.editor.LogicalPosition @@ -14,13 +14,13 @@ import com.intellij.psi.PsiElement import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase -import com.jetbrains.jetpad.vclang.util.FileUtils +import org.arend.util.FileUtils import org.intellij.lang.annotations.Language -import org.vclang.module.VcRawLibrary -import org.vclang.psi.parentOfType -import org.vclang.typechecking.TypeCheckingService +import org.arend.module.ArendRawLibrary +import org.arend.psi.parentOfType +import org.arend.typechecking.TypeCheckingService -abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCase { +abstract class ArendTestBase : LightPlatformCodeInsightFixtureTestCase(), ArendTestCase { override fun getProjectDescriptor(): LightProjectDescriptor = DefaultDescriptor @@ -28,7 +28,7 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas open val dataPath: String = "" - override fun getTestDataPath(): String = "${VcTestCase.testResourcesPath}/$dataPath" + override fun getTestDataPath(): String = "${ArendTestCase.testResourcesPath}/$dataPath" override fun setUp() { super.setUp() @@ -41,14 +41,14 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas } val service = TypeCheckingService.getInstance(myModule.project) - val library = VcRawLibrary(myModule, service.typecheckerState) + val library = ArendRawLibrary(myModule, service.typecheckerState) service.libraryManager.unloadLibrary(library) service.libraryManager.loadLibrary(library) } override fun runTest() { val projectDescriptor = projectDescriptor - val reason = (projectDescriptor as? VclangProjectDescriptorBase)?.skipTestReason + val reason = (projectDescriptor as? ArendProjectDescriptorBase)?.skipTestReason if (reason != null) { System.err.println("SKIP $name: $reason") return @@ -76,8 +76,8 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas } protected fun checkByDirectory( - @Language("Vclang") before: String, - @Language("Vclang") after: String, + @Language("Arend") before: String, + @Language("Arend") after: String, action: () -> Unit ) { fileTreeFromText(before).create() @@ -87,8 +87,8 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas } protected fun checkByText( - @Language("Vclang") before: String, - @Language("Vclang") after: String, + @Language("Arend") before: String, + @Language("Arend") after: String, action: () -> Unit ) { InlineFile(before) @@ -99,7 +99,7 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas private fun getVirtualFileByName(path: String): VirtualFile? = LocalFileSystem.getInstance().findFileByPath(path) - protected open class VclangProjectDescriptorBase : LightProjectDescriptor() { + protected open class ArendProjectDescriptorBase : LightProjectDescriptor() { open val skipTestReason: String? = null final override fun configureModule( @@ -114,9 +114,9 @@ abstract class VcTestBase : LightPlatformCodeInsightFixtureTestCase(), VcTestCas } } - protected object DefaultDescriptor : VclangProjectDescriptorBase() + protected object DefaultDescriptor : ArendProjectDescriptorBase() - inner class InlineFile(@Language("Vclang") private val code: String, name: String = "Main.vc") { + inner class InlineFile(@Language("Arend") private val code: String, name: String = "Main.ard") { private val hasCaretMarker = "{-caret-}" in code init { diff --git a/src/test/kotlin/org/arend/ArendTestCase.kt b/src/test/kotlin/org/arend/ArendTestCase.kt new file mode 100644 index 000000000..fc705beee --- /dev/null +++ b/src/test/kotlin/org/arend/ArendTestCase.kt @@ -0,0 +1,10 @@ +package org.arend + +interface ArendTestCase { + + fun getTestDataPath(): String + + companion object { + const val testResourcesPath = "src/test/resources" + } +} diff --git a/src/test/kotlin/org/vclang/FileTree.kt b/src/test/kotlin/org/arend/FileTree.kt similarity index 93% rename from src/test/kotlin/org/vclang/FileTree.kt rename to src/test/kotlin/org/arend/FileTree.kt index 572090c80..b44deee0b 100644 --- a/src/test/kotlin/org/vclang/FileTree.kt +++ b/src/test/kotlin/org/arend/FileTree.kt @@ -1,31 +1,30 @@ -package org.vclang +package org.arend import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.* -import com.jetbrains.jetpad.vclang.util.FileUtils +import org.arend.util.FileUtils import org.intellij.lang.annotations.Language -import org.vclang.psi.parentOfType +import org.arend.psi.parentOfType fun fileTree(builder: FileTreeBuilder.() -> Unit): FileTree = FileTree(FileTreeBuilderImpl().apply { builder() }.intoDirectory()) -fun fileTreeFromText(@Language("Vclang") text: String): FileTree { +fun fileTreeFromText(@Language("Arend") text: String): FileTree { val fileSeparator = """^\s* --! (\S+)\s*$""".toRegex(RegexOption.MULTILINE) val fileNames = fileSeparator.findAll(text).map { it.groupValues[1] }.toList() val fileTexts = fileSeparator.split(text).filter(String::isNotBlank).map { it.trimIndent() } - check(fileNames.size == fileTexts.size) { "Have you placed `--! filename.vc` markers?" } + check(fileNames.size == fileTexts.size) { "Have you placed `--! filename.ard` markers?" } fun fill(dir: Entry.Directory, path: List, contents: String) { val name = path.first() if (path.size == 1) { dir.children[name] = Entry.File(contents) } else { - val childDir = dir.children.getOrPut(name, { Entry.Directory(mutableMapOf()) }) - as Entry.Directory + val childDir = dir.children.getOrPut(name) { Entry.Directory(mutableMapOf()) } as Entry.Directory fill(childDir, path.drop(1), contents) } } @@ -43,7 +42,7 @@ interface FileTreeBuilder { fun file(name: String, code: String) - fun vclang(name: String, @Language("Vclang") code: String) = file(name, code) + fun arend(name: String, @Language("Arend") code: String) = file(name, code) } class FileTree(private val rootDirectory: Entry.Directory) { diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcCompletionTestBase.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendCompletionTestBase.kt similarity index 86% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcCompletionTestBase.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendCompletionTestBase.kt index 1c078251d..c424bf4d5 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcCompletionTestBase.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendCompletionTestBase.kt @@ -1,18 +1,18 @@ -package org.vclang.codeInsight.completion +package org.arend.codeInsight.completion import com.intellij.codeInsight.lookup.LookupElement import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import junit.framework.TestCase import org.intellij.lang.annotations.Language -import org.vclang.VcTestBase -import org.vclang.fileTreeFromText -import org.vclang.hasCaretMarker -import org.vclang.replaceCaretMarker +import org.arend.ArendTestBase +import org.arend.fileTreeFromText +import org.arend.hasCaretMarker +import org.arend.replaceCaretMarker -abstract class VcCompletionTestBase : VcTestBase() { +abstract class ArendCompletionTestBase : ArendTestBase() { - protected fun checkSingleCompletion(@Language("Vclang") code: String, target: String) { + protected fun checkSingleCompletion(@Language("Arend") code: String, target: String) { InlineFile(code).withCaret() executeSoloCompletion() @@ -27,10 +27,10 @@ abstract class VcCompletionTestBase : VcTestBase() { enum class CompletionCondition {CONTAINS, SAME_ELEMENTS, SAME_KEYWORDS, DOES_NOT_CONTAIN} - protected fun checkCompletionVariants(@Language("Vclang") code: String, variants: List, condition: CompletionCondition = CompletionCondition.SAME_ELEMENTS) { + protected fun checkCompletionVariants(@Language("Arend") code: String, variants: List, condition: CompletionCondition = CompletionCondition.SAME_ELEMENTS) { InlineFile(code).withCaret() - val result : List = myFixture.getCompletionVariants("Main.vc") ?: error("Null completion variants") + val result : List = myFixture.getCompletionVariants("Main.ard") ?: error("Null completion variants") fun symDiff(required: List, actual: List): String? { if (HashSet(required) == HashSet(actual)) return null @@ -51,11 +51,10 @@ abstract class VcCompletionTestBase : VcTestBase() { if (errorMessage != null) throw Exception(errorMessage) } - protected fun checkKeywordCompletionVariants(variants: List, condition: CompletionCondition, @Language("Vclang") vararg code: String){ + protected fun checkKeywordCompletionVariants(variants: List, condition: CompletionCondition, @Language("Arend") vararg code: String){ var failed = false var failString = "" var successString = "" - var index = 0 for (codePiece in code) { //System.out.println("*** Testing: $codePiece ***") val codePieceWithBackSlash = codePiece.replace("{-caret-}", "\\{-caret-}", false) @@ -94,7 +93,6 @@ abstract class VcCompletionTestBase : VcTestBase() { } } - index++ failed = failed || failedTest if (!failedTest) successString += "$codePieceWithBackSlash\n" } @@ -107,8 +105,8 @@ abstract class VcCompletionTestBase : VcTestBase() { } protected fun doSingleCompletion( - @Language("Vclang") before: String, - @Language("Vclang") after: String + @Language("Arend") before: String, + @Language("Arend") after: String ) { check(hasCaretMarker(before) && hasCaretMarker(after)) { "Please add `{-caret-}` marker" @@ -117,15 +115,15 @@ abstract class VcCompletionTestBase : VcTestBase() { } protected fun doSingleCompletionMultiflie( - @Language("Vclang") before: String, - @Language("Vclang") after: String + @Language("Arend") before: String, + @Language("Arend") after: String ) { fileTreeFromText(before).createAndOpenFileWithCaretMarker() executeSoloCompletion() myFixture.checkResult(replaceCaretMarker(after.trimIndent())) } - protected fun checkContainsCompletion(text: String, @Language("Vclang") code: String) { + protected fun checkContainsCompletion(text: String, @Language("Arend") code: String) { InlineFile(code).withCaret() val variants = myFixture.completeBasic() checkNotNull(variants) { @@ -135,12 +133,12 @@ abstract class VcCompletionTestBase : VcTestBase() { error("Expected completions that contain $text, but got ${variants.toList()}") } - protected fun checkNoCompletion(@Language("Vclang") code: String) { + protected fun checkNoCompletion(@Language("Arend") code: String) { InlineFile(code).withCaret() noCompletionCheck() } - protected fun checkNoCompletionWithMultifile(@Language("Vclang") code: String) { + protected fun checkNoCompletionWithMultifile(@Language("Arend") code: String) { fileTreeFromText(code).createAndOpenFileWithCaretMarker() noCompletionCheck() } diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcFieldCompletionTest.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendFieldCompletionTest.kt similarity index 97% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcFieldCompletionTest.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendFieldCompletionTest.kt index e5aea4aca..6d3023132 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcFieldCompletionTest.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendFieldCompletionTest.kt @@ -1,7 +1,7 @@ -package org.vclang.codeInsight.completion +package org.arend.codeInsight.completion -class VcFieldCompletionTest : VcCompletionTestBase() { +class ArendFieldCompletionTest : ArendCompletionTestBase() { fun `test local variable`() = checkCompletionVariants( "\\class C { | f : Nat | g : Nat }\n" + diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcFilteredScope.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendFilteredScope.kt similarity index 97% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcFilteredScope.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendFilteredScope.kt index fd0249654..ba99fd5d0 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcFilteredScope.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendFilteredScope.kt @@ -1,9 +1,9 @@ -package org.vclang.codeInsight.completion +package org.arend.codeInsight.completion private val preludeConstructors = listOf("inP", "inS", "left", "path", "right", "suc", "truncP", "truncS", "zero", "neg", "pos") -class VcFilteredScope : VcCompletionTestBase() { +class ArendFilteredScope : ArendCompletionTestBase() { fun `test super classes`() = checkCompletionVariants( "\\class A { | z : Nat }\n" + diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcKeywordCompletionTest.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendKeywordCompletionTest.kt similarity index 90% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcKeywordCompletionTest.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendKeywordCompletionTest.kt index bc365f861..56ccdfd5c 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcKeywordCompletionTest.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendKeywordCompletionTest.kt @@ -1,32 +1,32 @@ -package org.vclang.codeInsight.completion - -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.ALL_STATEMENT_KWS -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.AS_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.COERCE_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.COWITH_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.DATA_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.DATA_OR_EXPRESSION_KW -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.DATA_UNIVERSE_KW -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.ELIM_WITH_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.EXTENDS_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.FAKE_NTYPE_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.FIXITY_KWS -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.GLOBAL_STATEMENT_KWS -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.HIDING_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.HU_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.IMPORT_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.IN_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.LEVELS_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.LOCAL_STATEMENT_KWS -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.LPH_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.LPH_LEVEL_KWS -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.NEW_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.PROP_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.RETURN_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.WHERE_KW_LIST -import org.vclang.codeInsight.completion.VclangCompletionContributor.Companion.WITH_KW_LIST - -class VcKeywordCompletionTest : VcCompletionTestBase() { +package org.arend.codeInsight.completion + +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.ALL_STATEMENT_KWS +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.AS_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.COERCE_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.COWITH_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.DATA_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.DATA_OR_EXPRESSION_KW +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.DATA_UNIVERSE_KW +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.ELIM_WITH_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.EXTENDS_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.FAKE_NTYPE_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.FIXITY_KWS +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.GLOBAL_STATEMENT_KWS +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.HIDING_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.HU_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.IMPORT_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.IN_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.LEVELS_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.LOCAL_STATEMENT_KWS +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.LPH_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.LPH_LEVEL_KWS +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.NEW_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.PROP_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.RETURN_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.WHERE_KW_LIST +import org.arend.codeInsight.completion.ArendCompletionContributor.Companion.WITH_KW_LIST + +class ArendKeywordCompletionTest : ArendCompletionTestBase() { fun `test fixity completion`() = checkKeywordCompletionVariants(FIXITY_KWS, CompletionCondition.SAME_ELEMENTS, "\\func {-caret-}test => 0", diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcModuleCompletionTest.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendModuleCompletionTest.kt similarity index 71% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcModuleCompletionTest.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendModuleCompletionTest.kt index 626c8f7b1..c5169ed26 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcModuleCompletionTest.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendModuleCompletionTest.kt @@ -1,12 +1,12 @@ -package org.vclang.codeInsight.completion +package org.arend.codeInsight.completion -class VcModuleCompletionTest : VcCompletionTestBase() { +class ArendModuleCompletionTest : ArendCompletionTestBase() { fun `test module name completion`() = doSingleCompletionMultiflie( """ - --! Main.vc + --! Main.ard \import My{-caret-} - --! MyModule.vc + --! MyModule.ard -- empty """, """ @@ -16,10 +16,10 @@ class VcModuleCompletionTest : VcCompletionTestBase() { fun `test directory name completion`() = doSingleCompletionMultiflie( """ - --! Main.vc + --! Main.ard \import Dir{-caret-} - --! Directory/MyModule.vc + --! Directory/MyModule.ard -- empty """, """ @@ -29,10 +29,10 @@ class VcModuleCompletionTest : VcCompletionTestBase() { fun `test module name completion subdirectory`() = doSingleCompletionMultiflie( """ - --! Main.vc + --! Main.ard \import Directory.My{-caret-} - --! Directory/MyModule.vc + --! Directory/MyModule.ard -- empty """, """ diff --git a/src/test/kotlin/org/vclang/codeInsight/completion/VcPreludeCompletionTest.kt b/src/test/kotlin/org/arend/codeInsight/completion/ArendPreludeCompletionTest.kt similarity index 61% rename from src/test/kotlin/org/vclang/codeInsight/completion/VcPreludeCompletionTest.kt rename to src/test/kotlin/org/arend/codeInsight/completion/ArendPreludeCompletionTest.kt index f1111f555..8392e7e33 100644 --- a/src/test/kotlin/org/vclang/codeInsight/completion/VcPreludeCompletionTest.kt +++ b/src/test/kotlin/org/arend/codeInsight/completion/ArendPreludeCompletionTest.kt @@ -1,6 +1,6 @@ -package org.vclang.codeInsight.completion +package org.arend.codeInsight.completion -class VcPreludeCompletionTest : VcCompletionTestBase() { +class ArendPreludeCompletionTest : ArendCompletionTestBase() { fun `test prelude`() = checkSingleCompletion("""\func _ : z{-caret-}""", "zero") diff --git a/src/test/kotlin/org/vclang/commenter/VcCommenterTest.kt b/src/test/kotlin/org/arend/commenter/ArendCommenterTest.kt similarity index 79% rename from src/test/kotlin/org/vclang/commenter/VcCommenterTest.kt rename to src/test/kotlin/org/arend/commenter/ArendCommenterTest.kt index 962cf241f..38f8b12cf 100644 --- a/src/test/kotlin/org/vclang/commenter/VcCommenterTest.kt +++ b/src/test/kotlin/org/arend/commenter/ArendCommenterTest.kt @@ -1,15 +1,15 @@ -package org.vclang.commenter +package org.arend.commenter import com.intellij.openapi.actionSystem.IdeActions -import org.vclang.VcTestBase +import org.arend.ArendTestBase -class VcCommenterTest : VcTestBase() { - override val dataPath = "org/vclang/commenter/fixtures" +class ArendCommenterTest : ArendTestBase() { + override val dataPath = "org/arend/commenter/fixtures" private fun doTest(actionId: String) { myFixture.configureByFile(fileName) myFixture.performEditorAction(actionId) - myFixture.checkResultByFile(fileName.replace(".vc", "_after.vc"), true) + myFixture.checkResultByFile(fileName.replace(".ard", "_after.ard"), true) } fun testSingleLine() = doTest(IdeActions.ACTION_COMMENT_LINE) diff --git a/src/test/kotlin/org/vclang/quickfix/ImplementFieldsQuickFixTest.kt b/src/test/kotlin/org/arend/quickfix/ImplementFieldsQuickFixTest.kt similarity index 94% rename from src/test/kotlin/org/vclang/quickfix/ImplementFieldsQuickFixTest.kt rename to src/test/kotlin/org/arend/quickfix/ImplementFieldsQuickFixTest.kt index 3444d91a4..50f669441 100644 --- a/src/test/kotlin/org/vclang/quickfix/ImplementFieldsQuickFixTest.kt +++ b/src/test/kotlin/org/arend/quickfix/ImplementFieldsQuickFixTest.kt @@ -1,9 +1,9 @@ -package org.vclang.quickfix +package org.arend.quickfix class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test adding copatterns in instance`() = simpleQuickFixTest("Implement", """ - --! A.vc + --! A.ard \class Foo { | A : Nat | B : Nat @@ -22,7 +22,7 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test adding copatterns in instance 2`() = simpleQuickFixTest("Implement", """ - --! A.vc + --! A.ard \class Foo { | A : Nat } @@ -39,7 +39,7 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test adding implementation for a field`() = simpleQuickFixTest("Replace", """ - --! A.vc + --! A.ard \class Foo (A B : Nat) \class Bar { f : Foo } \instance FooBar : Bar { @@ -59,7 +59,7 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test adding implementation of a new expression`() = simpleQuickFixTest("Implement", """ - --! A.vc + --! A.ard \class Foo (A : Nat) \class Bar { | f : Foo | B : Nat } \func lol => \new Bar{-caret-} @@ -76,7 +76,7 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test adding implementation of cowith expression`() = simpleQuickFixTest("Implement", """ - --! A.vc + --! A.ard \class Foo (A : Nat) \class Bar { | f : Foo | B : Nat } \func lol : Bar \cowith{-caret-} @@ -93,7 +93,7 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { fun `test removing redundant clause`() = simpleQuickFixTest("Remove", """ - --! A.vc + --! A.ard \class Foo (A : Nat) \class Bar \extends Foo \instance FooBar : Bar { @@ -106,4 +106,4 @@ class ImplementFieldsQuickFixTest : QuickFixTestBase() { \instance FooBar : Bar {{-caret-} } """) -} \ No newline at end of file +} diff --git a/src/test/kotlin/org/vclang/quickfix/QuickFixTestBase.kt b/src/test/kotlin/org/arend/quickfix/QuickFixTestBase.kt similarity index 50% rename from src/test/kotlin/org/vclang/quickfix/QuickFixTestBase.kt rename to src/test/kotlin/org/arend/quickfix/QuickFixTestBase.kt index 6be599acb..f0b409efd 100644 --- a/src/test/kotlin/org/vclang/quickfix/QuickFixTestBase.kt +++ b/src/test/kotlin/org/arend/quickfix/QuickFixTestBase.kt @@ -1,16 +1,16 @@ -package org.vclang.quickfix +package org.arend.quickfix import org.intellij.lang.annotations.Language -import org.vclang.VcTestBase -import org.vclang.fileTreeFromText -import org.vclang.psi.VcFile +import org.arend.ArendTestBase +import org.arend.fileTreeFromText +import org.arend.psi.ArendFile -abstract class QuickFixTestBase : VcTestBase() { +abstract class QuickFixTestBase : ArendTestBase() { private val importQfName = "Fix import" protected fun simpleQuickFixTest (fixName: String, - @Language("Vclang") contents: String, - @Language("Vclang") resultingContent: String) { + @Language("Arend") contents: String, + @Language("Arend") resultingContent: String) { val fileTree = fileTreeFromText(contents) fileTree.createAndOpenFileWithCaretMarker() myFixture.doHighlighting() @@ -27,24 +27,24 @@ abstract class QuickFixTestBase : VcTestBase() { } - protected fun simpleImportFixTest(@Language("Vclang") contents: String, @Language("Vclang") resultingContent: String) = simpleQuickFixTest(importQfName, contents, resultingContent) + protected fun simpleImportFixTest(@Language("Arend") contents: String, @Language("Arend") resultingContent: String) = simpleQuickFixTest(importQfName, contents, resultingContent) - protected fun checkNoQuickFixes(fixName: String, @Language("Vclang") contents: String) { + protected fun checkNoQuickFixes(fixName: String, @Language("Arend") contents: String) { InlineFile(contents).withCaret() - assert(myFixture.getAvailableIntention(fixName, "Main.vc") == null) + assert(myFixture.getAvailableIntention(fixName, "Main.ard") == null) } - protected fun checkNoImport(@Language("Vclang") contents: String) = checkNoQuickFixes(importQfName, contents) + protected fun checkNoImport(@Language("Arend") contents: String) = checkNoQuickFixes(importQfName, contents) - protected fun simpleActionTest (@Language("Vclang") contents: String, @Language("Vclang") resultingContent: String, f: (VcFile) -> Unit) { + protected fun simpleActionTest (@Language("Arend") contents: String, @Language("Arend") resultingContent: String, f: (ArendFile) -> Unit) { InlineFile(contents).withCaret() - val file = myFixture.configureByFile("Main.vc") - if (file is VcFile) + val file = myFixture.configureByFile("Main.ard") + if (file is ArendFile) f.invoke(file) myFixture.checkResult(resultingContent.trimIndent(), true) } -} \ No newline at end of file +} diff --git a/src/test/kotlin/org/vclang/quickfix/ResolveRefQuickFixTest.kt b/src/test/kotlin/org/arend/quickfix/ResolveRefQuickFixTest.kt similarity index 91% rename from src/test/kotlin/org/vclang/quickfix/ResolveRefQuickFixTest.kt rename to src/test/kotlin/org/arend/quickfix/ResolveRefQuickFixTest.kt index ba714d362..774456f67 100644 --- a/src/test/kotlin/org/vclang/quickfix/ResolveRefQuickFixTest.kt +++ b/src/test/kotlin/org/arend/quickfix/ResolveRefQuickFixTest.kt @@ -1,4 +1,4 @@ -package org.vclang.quickfix +package org.arend.quickfix import com.intellij.codeInsight.daemon.QuickFixBundle import com.intellij.openapi.command.WriteCommandAction @@ -6,7 +6,7 @@ import com.intellij.openapi.command.WriteCommandAction class ResolveRefQuickFixTest : QuickFixTestBase() { private val fileA = """ - --! A.vc + --! A.ard \func a => 0 \where \func b => 0 \where \func c => 0 \where @@ -16,7 +16,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { private val fileC = """ - --! C.vc + --! C.ard \func f => 0 \where \func f => 1 \where \func f => 2 @@ -24,21 +24,21 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { private val fileD = """ - --! D.vc + --! D.ard \func g => 0 \func \infixl 6 ++ (a b : Nat) => a """ private val fileE = """ - --! E.vc + --! E.ard \func a => 0 \func e => 0 """ fun `test completing short name to full name if imports are correct`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \func d => {-caret-}b """, @@ -49,7 +49,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test importing of libraries if imports are not correct`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \func d => {-caret-}a """, """ @@ -60,7 +60,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test importing of libraries if imports are not correct 2`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \func d => {-caret-}b """, """ @@ -71,7 +71,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test adding function name to empty using list`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A () \func d => {-caret-}b """, @@ -82,7 +82,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test adding function name to nonempty using list 1`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A (e) \func d => {-caret-}c """, @@ -93,7 +93,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test adding function name to nonempty using list 2`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A (a) \func d => {-caret-}e """, @@ -104,7 +104,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test removing function name from the singleton list of hidden definitions`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \hiding ( a ) \func d => {-caret-}b """, @@ -115,7 +115,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test removing function name from the list of hidden definitions`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \hiding ( a , e) \func d => {-caret-}b """, @@ -126,7 +126,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test removing function name from the list of hidden definitions 2`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \hiding ( a , e) \func d => {-caret-}e """, @@ -137,7 +137,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that adding library import preserves alphabetic order 1` () = simpleImportFixTest(fileA+fileC+fileD+ """ - --! B.vc + --! B.ard \import A \open a \import D @@ -153,7 +153,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that adding library import preserves alphabetic order 2` () = simpleImportFixTest(fileA+fileC+fileD+ """ - --! B.vc + --! B.ard \import C \import D \func d => {-caret-}c @@ -167,7 +167,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that adding library import preserves alphabetic order 3` () = simpleImportFixTest(fileA+fileC+fileD+ """ - --! B.vc + --! B.ard \import A \import C \func d => {-caret-}g @@ -182,7 +182,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that open commands are taken into account`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \open a \func d => {-caret-}c @@ -195,7 +195,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that clashing names are taken into account 1`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \open a \func a => 0 @@ -210,11 +210,11 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that using keyword has effect when clashing names are analyzed`() = simpleImportFixTest(fileE + """ - --! A.vc + --! A.ard \func b => 0 \func a => 0 - --! B.vc + --! B.ard \import A \using (b \as b') \func d => {-caret-}e """, @@ -227,11 +227,11 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that using keyword has effect when clashing names are analyzed 2`() = simpleImportFixTest(fileE + """ - --! A.vc + --! A.ard \func b => 0 \func a => 0 - --! B.vc + --! B.ard \import A (b \as b') \func d => {-caret-}e """, @@ -252,7 +252,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { private fun `test that clashing names are taken into account`(s : String) = - simpleImportFixTest(fileC + testB1(" --! B.vc\n ", "{-caret-}f"), testB1("", s)) + simpleImportFixTest(fileC + testB1(" --! B.ard\n ", "{-caret-}f"), testB1("", s)) fun `test that clashing names are taken into account 2-1`() = `test that clashing names are taken into account`("f''") fun `test that clashing names are taken into account 2-2`() = `test that clashing names are taken into account`("f''.f") @@ -260,7 +260,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that clashing names are taken into account 3`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import E \func d => {-caret-}b """, @@ -273,7 +273,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that simple renamings are taking into account`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \open a (b \as b') \func d => 0 \where { @@ -300,13 +300,13 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { """ private fun testB3(s : String) = - simpleImportFixTest(fileA + testB2(" --! B.vc\n ", "{-caret-}c"), testB2("", s)) + simpleImportFixTest(fileA + testB2(" --! B.ard\n ", "{-caret-}c"), testB2("", s)) fun `test that only the smallest (wrt to lexicographic order) renaming option is shown to the user`() = testB3("b'.c") fun `test that shorter names are always preferred`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A (a \as a') \import A (a \as a'') \open a' (b \as b') @@ -327,7 +327,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that renamings are not taken into account when names clash`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A (a \as a') \func a' => 0 \func f => {-caret-}c @@ -340,7 +340,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that everything works in the situation when there is only one file`() = simpleImportFixTest( """ - --! A.vc + --! A.ard \func a => 0 \where \func b => 1 \where \func c => 2 @@ -361,7 +361,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { private val fileF = """ - --! F.vc + --! F.ard \class Test1 (El : \Set) { | \infixl 7 * : El -> El -> El } @@ -373,7 +373,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that class fields are supported`() = simpleImportFixTest(fileF + """ - --! B.vc + --! B.ard \func test => 1 *{-caret-} 1 """, """ @@ -384,7 +384,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that class synonyms are supported`() = simpleImportFixTest(fileF + """ - --! B.vc + --! B.ard \func test => 1 +{-caret-} 1 """, """ @@ -395,7 +395,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that infix quickfixes work for infix operators`() = simpleImportFixTest(fileD + """ - --! B.vc + --! B.ard \func test => 1 `++`{-caret-} 1 """, """ @@ -406,7 +406,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that possible name clashes are prevented by using empty imports`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import E \func f => e \func g => b{-caret-} @@ -420,7 +420,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that possible name clashes are prevented by using partial imports`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import E (e) \func f => e \func g => b{-caret-} @@ -434,7 +434,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that renames are preferred to imports`() = simpleImportFixTest(fileF + """ - --! B.vc + --! B.ard \import F (Test1 \as Test) \func test => 1 *{-caret-} 2 """, @@ -445,7 +445,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that only member is imported if there are no name clashes`() = simpleImportFixTest(fileF + """ - --! B.vc + --! B.ard \import F () \func test => 1 *{-caret-} 2 """, @@ -456,9 +456,9 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that only member is imported in the situation when there is a name clash for the parent`() = simpleImportFixTest(fileF + """ - --! C.vc + --! C.ard \func Test1 => 0 - --! B.vc + --! B.ard \import C \import F () \func test => 1 *{-caret-} 2 @@ -471,7 +471,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that deliberate empty imports left by the user lead to the "cautious mode" not being activated`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import E () \func g => b{-caret-} """, @@ -483,7 +483,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test function name is not removed from the list of hidden definitions if there are clashing names`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import A \hiding (a, e) \import E (a) \func d => {-caret-}b @@ -496,7 +496,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that only one item is removed from the list of hidden definitions`() = simpleImportFixTest(fileF + """ - --! B.vc + --! B.ard \import F \hiding (Test1, *) \func test => 1 *{-caret-} 2 """, @@ -507,7 +507,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that nothing is removed from hidden definitions if renaming to "very long name" is used anyway`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A \hiding (a, e) \func a => 1 \func d => {-caret-}b @@ -520,7 +520,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that nothing is added to the "using" list if renaming to "very long name" is used anyway`() = simpleImportFixTest(fileA + """ - --! B.vc + --! B.ard \import A (e) \func a => 1 \func d => {-caret-}b @@ -533,7 +533,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that empty using list is used in import command if "very long name" is used anyway`() = simpleImportFixTest(fileA + fileE + """ - --! B.vc + --! B.ard \import E (e) \func a => 1 \func d => {-caret-}b @@ -547,11 +547,11 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that top-level open commands also can activate "cautious mode" 1`() = simpleImportFixTest(fileA + """ - --! C.vc + --! C.ard \func j => 1 \where \func e => 1 - --! B.vc + --! B.ard \import C \open j \func d => {-caret-}b @@ -565,11 +565,11 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that top-level open commands also can activate "cautious mode" 2`() = simpleImportFixTest(fileA + """ - --! C.vc + --! C.ard \func j => 1 \where \func a => 1 - --! B.vc + --! B.ard \import C \open j \func d => {-caret-}b @@ -583,7 +583,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test importing nontop-level items from prelude`() = simpleImportFixTest( """ - --! A.vc + --! A.ard \func lol => fromNat{-caret-} """, """ @@ -592,7 +592,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test importing nontop-level items from prelude with obstructed scopes`() = simpleImportFixTest( """ - --! A.vc + --! A.ard \func Int => 0 \func lol => fromNat{-caret-} """, @@ -605,7 +605,7 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test importing nontop-level items from partially imported prelude`() = simpleImportFixTest( """ - --! A.vc + --! A.ard \import Prelude(I) \func Int => 0 \func lol => fromNat{-caret-} @@ -617,15 +617,15 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { """ ) - /* fun `test strange behavior of vclang import commands`() = simpleImportFixTest( + /* fun `test strange behavior of arend import commands`() = simpleImportFixTest( """ - --! A.vc + --! A.ard \func lol => 0 - --! B.vc + --! B.ard \func f => 1 - --! C.vc + --! C.ard \import A(f) \import B @@ -650,4 +650,4 @@ class ResolveRefQuickFixTest : QuickFixTestBase() { fun `test that resolve ref quick fixes are disabled for matched variable of elim expressions`() = checkNoImport("\\func bar => 0 \\func foo(a : Nat): Nat \\elim bar{-caret-} | _ => zero") -} \ No newline at end of file +} diff --git a/src/test/kotlin/org/vclang/refactoring/RenameTest.kt b/src/test/kotlin/org/arend/refactoring/RenameTest.kt similarity index 85% rename from src/test/kotlin/org/vclang/refactoring/RenameTest.kt rename to src/test/kotlin/org/arend/refactoring/RenameTest.kt index 53e3edacd..35c23c16d 100644 --- a/src/test/kotlin/org/vclang/refactoring/RenameTest.kt +++ b/src/test/kotlin/org/arend/refactoring/RenameTest.kt @@ -1,9 +1,9 @@ -package org.vclang.refactoring +package org.arend.refactoring import org.intellij.lang.annotations.Language -import org.vclang.VcTestBase +import org.arend.ArendTestBase -class RenameTest : VcTestBase() { +class RenameTest : ArendTestBase() { fun `test rename prefix to prefix`() = doTest( "bar", @@ -151,68 +151,68 @@ class RenameTest : VcTestBase() { fun `test rename file`() = checkByDirectory( """ - --! Main.vc + --! Main.ard \import Foo - --! Foo.vc + --! Foo.ard -- empty """, """ - --! Main.vc + --! Main.ard \import Bar - --! Bar.vc + --! Bar.ard -- empty """ ) { - val file = myFixture.configureFromTempProjectFile("Foo.vc") - myFixture.renameElement(file, "Bar.vc") + val file = myFixture.configureFromTempProjectFile("Foo.ard") + myFixture.renameElement(file, "Bar.ard") } fun `test rename file without extension`() = checkByDirectory( """ - --! Main.vc + --! Main.ard \import Foo - --! Foo.vc + --! Foo.ard -- empty """, """ - --! Main.vc + --! Main.ard \import Bar - --! Bar.vc + --! Bar.ard -- empty """ ) { - val file = myFixture.configureFromTempProjectFile("Foo.vc") + val file = myFixture.configureFromTempProjectFile("Foo.ard") myFixture.renameElement(file, "Bar") } fun `test rename directory`() = checkByDirectory( """ - --! Main.vc + --! Main.ard \import DirA.Foo - --! DirA/Foo.vc + --! DirA/Foo.ard -- empty """, """ - --! Main.vc + --! Main.ard \import DirB.Foo - --! DirB/Foo.vc + --! DirB/Foo.ard -- empty """ ) { - val file = myFixture.configureFromTempProjectFile("DirA/Foo.vc") + val file = myFixture.configureFromTempProjectFile("DirA/Foo.ard") myFixture.renameElement(file.containingDirectory, "DirB") } private fun doTest( newName: String, - @Language("Vclang") before: String, - @Language("Vclang") after: String + @Language("Arend") before: String, + @Language("Arend") after: String ) { InlineFile(before).withCaret() myFixture.renameElementAtCaret(newName) diff --git a/src/test/kotlin/org/vclang/VcTestCase.kt b/src/test/kotlin/org/vclang/VcTestCase.kt deleted file mode 100644 index d4b47e726..000000000 --- a/src/test/kotlin/org/vclang/VcTestCase.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.vclang - -interface VcTestCase { - - fun getTestDataPath(): String - - companion object { - val testResourcesPath = "src/test/resources" - } -} diff --git a/src/test/resources/org/vclang/commenter/fixtures/indented_single_line_comment.vc b/src/test/resources/org/arend/commenter/fixtures/indented_single_line_comment.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/indented_single_line_comment.vc rename to src/test/resources/org/arend/commenter/fixtures/indented_single_line_comment.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/indented_single_line_comment_after.vc b/src/test/resources/org/arend/commenter/fixtures/indented_single_line_comment_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/indented_single_line_comment_after.vc rename to src/test/resources/org/arend/commenter/fixtures/indented_single_line_comment_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_after.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_after.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_block.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_block.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_block.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_block.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_block_after.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_block_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_block_after.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_block_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_block_uncomment.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_block_uncomment.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_block_uncomment.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_block_uncomment.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_block_uncomment_after.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_block_uncomment_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_block_uncomment_after.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_block_uncomment_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_uncomment.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_uncomment.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_uncomment.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_uncomment.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/multi_line_uncomment_after.vc b/src/test/resources/org/arend/commenter/fixtures/multi_line_uncomment_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/multi_line_uncomment_after.vc rename to src/test/resources/org/arend/commenter/fixtures/multi_line_uncomment_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line.vc b/src/test/resources/org/arend/commenter/fixtures/single_line.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_after.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_after.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_block.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_block.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_block.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_block.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_block_after.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_block_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_block_after.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_block_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_block_uncomment.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_block_uncomment.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_block_uncomment.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_block_uncomment.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_block_uncomment_after.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_block_uncomment_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_block_uncomment_after.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_block_uncomment_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_uncomment.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_uncomment.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_after.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_after.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_after.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_with_space.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_with_space.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_with_space.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_with_space.ard diff --git a/src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_with_space_after.vc b/src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_with_space_after.ard similarity index 100% rename from src/test/resources/org/vclang/commenter/fixtures/single_line_uncomment_with_space_after.vc rename to src/test/resources/org/arend/commenter/fixtures/single_line_uncomment_with_space_after.ard