mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-08-18 01:31:44 +02:00
Compare commits
3 Commits
customized
...
1
Author | SHA1 | Date | |
---|---|---|---|
bcf9f53a40 | |||
b824d0d6b3 | |||
4ec0cb9ee0 |
102
.detekt/baseline.xml
Normal file
102
.detekt/baseline.xml
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<SmellBaseline>
|
||||||
|
<ManuallySuppressedIssues>
|
||||||
|
<ID>ComplexMethod:CmdHandler.kt$CmdHandler$private fun addAlias(cmd: ExCommand, editor: Editor?): Boolean</ID>
|
||||||
|
<ID>ComplexMethod:CommandState.kt$CommandState$ fun toVimNotation(): String</ID>
|
||||||
|
</ManuallySuppressedIssues>
|
||||||
|
<CurrentIssues>
|
||||||
|
<ID>ComplexCondition:CommandParser.kt$CommandParser$Character.isLetter(ch) || command.isEmpty() && "~<>@=#*&!".indexOf(ch) >= 0 || command.isNotEmpty() && ch == command[command.length - 1] && "<>".indexOf(ch) >= 0</ID>
|
||||||
|
<ID>ComplexMethod:CommandParser.kt$CommandParser$ @kotlin.jvm.Throws(ExException::class) fun parse(cmd: String): ExCommand</ID>
|
||||||
|
<ID>ComplexMethod:HistoryHandler.kt$HistoryHandler$override fun execute(editor: Editor, context: DataContext, cmd: ExCommand): Boolean</ID>
|
||||||
|
<ID>ComplexMethod:NerdTree.kt$NerdTree$private fun registerCommands()</ID>
|
||||||
|
<ID>ComplexMethod:OptionsManager.kt$OptionsManager$ fun parseOptionLine(editor: Editor?, args: String, failOnBad: Boolean): Boolean</ID>
|
||||||
|
<ID>ComplexMethod:PutGroup.kt$PutGroup$private fun prepareDocumentAndGetStartOffsets( editor: Editor, caret: Caret, typeInRegister: SelectionType, data: PutData, additionalData: Map<String, Any> ): List<Int></ID>
|
||||||
|
<ID>ComplexMethod:SearchHelperKt.kt$// bounds are considered inside corresponding quotes fun checkInString(chars: CharSequence, currentPos: Int, str: Boolean): Boolean</ID>
|
||||||
|
<ID>ComplexMethod:SearchHighlightsHelper.kt$ private fun updateSearchHighlights( pattern: String?, shouldIgnoreSmartCase: Boolean, showHighlights: Boolean, initialOffset: Int, searchRange: LineRange?, forwards: Boolean, forceUpdate: Boolean ): Int</ID>
|
||||||
|
<ID>ComplexMethod:TabCloseHandler.kt$TabCloseHandler$ private fun getTabIndexToClose(arg: String, current: Int, last: Int): Int?</ID>
|
||||||
|
<ID>ComplexMethod:VimExchangeExtension.kt$VimExchangeExtension.Operator$private fun compareExchanges(x: Exchange, y: Exchange): ExchangeCompareResult</ID>
|
||||||
|
<ID>ComplexMethod:VimMultipleCursorsExtension.kt$VimMultipleCursorsExtension.NextOccurrenceHandler$override fun executeInWriteAction(editor: Editor, context: DataContext)</ID>
|
||||||
|
<ID>ComplexMethod:VimShortcutKeyAction.kt$VimShortcutKeyAction$private fun isEnabled(e: AnActionEvent): Boolean</ID>
|
||||||
|
<ID>LongMethod:CmdHandler.kt$CmdHandler$private fun addAlias(cmd: ExCommand, editor: Editor?): Boolean</ID>
|
||||||
|
<ID>LongMethod:CommandParser.kt$CommandParser$ @kotlin.jvm.Throws(ExException::class) fun parse(cmd: String): ExCommand</ID>
|
||||||
|
<ID>LongMethod:HistoryHandler.kt$HistoryHandler$override fun execute(editor: Editor, context: DataContext, cmd: ExCommand): Boolean</ID>
|
||||||
|
<ID>LongMethod:NerdTree.kt$NerdTree$private fun registerCommands()</ID>
|
||||||
|
<ID>LongMethod:OptionsManager.kt$OptionsManager$ fun parseOptionLine(editor: Editor?, args: String, failOnBad: Boolean): Boolean</ID>
|
||||||
|
<ID>LongMethod:PutGroup.kt$PutGroup$private fun prepareDocumentAndGetStartOffsets( editor: Editor, caret: Caret, typeInRegister: SelectionType, data: PutData, additionalData: Map<String, Any> ): List<Int></ID>
|
||||||
|
<ID>LongMethod:VimMultipleCursorsExtension.kt$VimMultipleCursorsExtension.NextOccurrenceHandler$override fun executeInWriteAction(editor: Editor, context: DataContext)</ID>
|
||||||
|
<ID>LoopWithTooManyJumpStatements:NerdTree.kt$NerdTree$while (true) { row++ val nextPath = tree.getPathForRow(row) ?: break val pathCount = nextPath.pathCount if (pathCount == currentPathCount) expectedRow = row if (pathCount < currentPathCount) break }</ID>
|
||||||
|
<ID>LoopWithTooManyJumpStatements:SearchHighlightsHelper.kt$for (project in projectManager.openProjects) { val current = FileEditorManager.getInstance(project).selectedTextEditor ?: continue // [VERSION UPDATE] 202+ Use editors val editors = EditorFactory.getInstance().getEditors(current.document, project) ?: continue for (editor in editors) { // Try to keep existing highlights if possible. Update if hlsearch has changed or if the pattern has changed. // Force update for the situations where the text is the same, but the ignore case values have changed. // E.g. Use `*` to search for a word (which ignores smartcase), then use `/<Up>` to search for the same pattern, // which will match smartcase. Or changing the smartcase/ignorecase settings if (shouldRemoveSearchHighlights(editor, pattern, showHighlights) || forceUpdate) { removeSearchHighlights(editor) } if (pattern == null) continue if (shouldAddAllSearchHighlights(editor, pattern, showHighlights)) { // hlsearch (+ incsearch/noincsearch) val startLine = searchRange?.startLine ?: 0 val endLine = searchRange?.endLine ?: -1 val results = SearchHelper.findAll(editor, pattern, startLine, endLine, shouldIgnoreCase(pattern, shouldIgnoreSmartCase)) if (results.isNotEmpty()) { currentMatchOffset = findClosestMatch(editor, results, initialOffset, forwards) highlightSearchResults(editor, pattern, results, currentMatchOffset) } editor.vimLastSearch = pattern } else if (shouldAddCurrentMatchSearchHighlight(pattern, showHighlights, initialOffset)) { // nohlsearch + incsearch val searchOptions = EnumSet.of(SearchOptions.WHOLE_FILE) if (wrapscan.isSet) searchOptions.add(SearchOptions.WRAP) if (shouldIgnoreSmartCase) searchOptions.add(SearchOptions.IGNORE_SMARTCASE) if (!forwards) searchOptions.add(SearchOptions.BACKWARDS) val result = SearchHelper.findPattern(editor, pattern, initialOffset, 1, searchOptions) if (result != null) { currentMatchOffset = result.startOffset val results = listOf(result) highlightSearchResults(editor, pattern, results, currentMatchOffset) } } else if (shouldMaintainCurrentMatchOffset(pattern, initialOffset)) { // incsearch. If nothing has changed (e.g. we've edited offset values in `/foo/e+2`) make sure we return the // current match offset so the caret remains at the current incsarch match val offset = editor.vimIncsearchCurrentMatchOffset if (offset != null) { currentMatchOffset = offset } } } }</ID>
|
||||||
|
<ID>MagicNumber:ActionListHandler.kt$ActionListHandler$50</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$0.9f</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$1.75f</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$10</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$3</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$5</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$6</ID>
|
||||||
|
<ID>MagicNumber:AddBlockInlaysAction.kt$AddBlockInlaysAction$7</ID>
|
||||||
|
<ID>MagicNumber:AddInlineInlaysAction.kt$AddInlineInlaysAction$10</ID>
|
||||||
|
<ID>MagicNumber:AddInlineInlaysAction.kt$AddInlineInlaysAction$20</ID>
|
||||||
|
<ID>MagicNumber:AddInlineInlaysAction.kt$AddInlineInlaysAction$5</ID>
|
||||||
|
<ID>MagicNumber:AddInlineInlaysAction.kt$AddInlineInlaysAction$7</ID>
|
||||||
|
<ID>MagicNumber:BufferListHandler.kt$3</ID>
|
||||||
|
<ID>MagicNumber:CmdHandler.kt$CmdHandler$11</ID>
|
||||||
|
<ID>MagicNumber:CmdHandler.kt$CmdHandler$12</ID>
|
||||||
|
<ID>MagicNumber:CommandBuilder.kt$CommandBuilder$10</ID>
|
||||||
|
<ID>MagicNumber:CommandBuilder.kt$CommandBuilder$999999999</ID>
|
||||||
|
<ID>MagicNumber:CommandParser.kt$CommandParser$10</ID>
|
||||||
|
<ID>MagicNumber:CommandParser.kt$CommandParser$3</ID>
|
||||||
|
<ID>MagicNumber:ConfigurationMigrators.kt$Version 6 to 7 config migration$6</ID>
|
||||||
|
<ID>MagicNumber:ConfigurationMigrators.kt$Version 6 to 7 config migration$7</ID>
|
||||||
|
<ID>MagicNumber:ExKeyBindings.kt$ExKeyBindings$0x05</ID>
|
||||||
|
<ID>MagicNumber:ExKeyBindings.kt$ExKeyBindings$0x08</ID>
|
||||||
|
<ID>MagicNumber:HistoryHandler.kt$HistoryHandler$7</ID>
|
||||||
|
<ID>MagicNumber:JumpsHandler.kt$JumpsHandler$200</ID>
|
||||||
|
<ID>MagicNumber:JumpsHandler.kt$JumpsHandler$3</ID>
|
||||||
|
<ID>MagicNumber:JumpsHandler.kt$JumpsHandler$5</ID>
|
||||||
|
<ID>MagicNumber:MarksHandler.kt$MarksHandler$200</ID>
|
||||||
|
<ID>MagicNumber:MarksHandler.kt$MarksHandler$3</ID>
|
||||||
|
<ID>MagicNumber:MarksHandler.kt$MarksHandler$5</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$100</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$1000</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$19</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$20</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$3</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$50</ID>
|
||||||
|
<ID>MagicNumber:OptionsManager.kt$OptionsManager$80</ID>
|
||||||
|
<ID>MagicNumber:ProcessExEntryAction.kt$ProcessExEntryAction$0x0a</ID>
|
||||||
|
<ID>MagicNumber:RegistersHandler.kt$RegistersHandler$200</ID>
|
||||||
|
<ID>MagicNumber:SearchHelperKt.kt$3</ID>
|
||||||
|
<ID>MagicNumber:SelectLastFileHandler.kt$SelectLastFileHandler$999</ID>
|
||||||
|
<ID>MagicNumber:SelectionType.kt$SelectionType.BLOCK_WISE$3</ID>
|
||||||
|
<ID>MagicNumber:ShiftLeftHandler.kt$ShiftLeftHandler$31</ID>
|
||||||
|
<ID>MagicNumber:ShiftRightHandler.kt$ShiftRightHandler$31</ID>
|
||||||
|
<ID>MagicNumber:VimHighlightedYank.kt$VimHighlightedYank.HighlightHandler$3</ID>
|
||||||
|
<ID>MagicNumber:VimHighlightedYank.kt$VimHighlightedYank.HighlightHandler$4</ID>
|
||||||
|
<ID>MatchingDeclarationName:CommandDefinition.kt$CommandName</ID>
|
||||||
|
<ID>MaxLineLength:EditorDataContext.kt$EditorDataContext$class</ID>
|
||||||
|
<ID>MaxLineLength:ExBeanClass.kt$ExBeanClass$logger<ExBeanClass>().error("IdeaVim doesn't accept contributions to `vimActions` extension points. Please create a plugin using `VimExtension`. Plugin to blame: ${this.pluginDescriptor.pluginId}")</ID>
|
||||||
|
<ID>MaxLineLength:NotificationService.kt$NotificationService$notification.addAction(AppendToIdeaVimRcAction(notification, "set clipboard+=ideaput", "ideaput") { OptionsManager.clipboard.append(ClipboardOptionsData.ideaput) })</ID>
|
||||||
|
<ID>MaxLineLength:NotificationService.kt$NotificationService.AppendToIdeaVimRcAction$private inner</ID>
|
||||||
|
<ID>MaxLineLength:NotificationService.kt$NotificationService.AppendToIdeaVimRcAction$val successNotification = Notification(IDEAVIM_NOTIFICATION_ID, IDEAVIM_NOTIFICATION_TITLE, "<code>$optionName</code> is enabled", NotificationType.INFORMATION)</ID>
|
||||||
|
<ID>MaxLineLength:OptionsManager.kt$OptionsManager$val clipboard = addOption(ListOption(ClipboardOptionsData.name, ClipboardOptionsData.abbr, arrayOf(ClipboardOptionsData.ideaput, "autoselect,exclude:cons\\|linux"), null))</ID>
|
||||||
|
<ID>MaxLineLength:ReplaceWithRegister.kt$ReplaceWithRegister.Operator$val visualSelection = PutData.VisualSelection(mapOf(editor.caretModel.primaryCaret to VimSelection.create(range.startOffset, range.endOffset - 1, selectionType, editor)), selectionType)</ID>
|
||||||
|
<ID>MaxLineLength:StatisticReporter.kt$StatisticReporter$val url = "https://plugins.jetbrains.com/plugins/list?pluginId=${VimPlugin.getPluginId().idString}&build=$buildNumber&pluginVersion=$version&os=$os&uuid=$uid"</ID>
|
||||||
|
<ID>MemberNameEqualsClassName:Ranges.kt$Ranges$private val ranges: MutableList<Range> = mutableListOf()</ID>
|
||||||
|
<ID>NestedBlockDepth:OptionsManager.kt$OptionsManager$ fun parseOptionLine(editor: Editor?, args: String, failOnBad: Boolean): Boolean</ID>
|
||||||
|
<ID>ReturnCount:CmdHandler.kt$CmdHandler$private fun addAlias(cmd: ExCommand, editor: Editor?): Boolean</ID>
|
||||||
|
<ID>ReturnCount:ExRanges.kt$Range.Companion$ @JvmStatic fun createRange(str: String, offset: Int, move: Boolean): Array<Range>?</ID>
|
||||||
|
<ID>ReturnCount:VimMultipleCursorsExtension.kt$VimMultipleCursorsExtension.AllOccurrencesHandler$override fun executeInWriteAction(editor: Editor, context: DataContext)</ID>
|
||||||
|
<ID>ReturnCount:VimMultipleCursorsExtension.kt$VimMultipleCursorsExtension.NextOccurrenceHandler$override fun executeInWriteAction(editor: Editor, context: DataContext)</ID>
|
||||||
|
<ID>ReturnCount:VimShortcutKeyAction.kt$VimShortcutKeyAction$private fun isEnabled(e: AnActionEvent): Boolean</ID>
|
||||||
|
<ID>ReturnCount:VisualMotionGroup.kt$VisualMotionGroup$private fun seemsLikeBlockMode(editor: Editor): Boolean</ID>
|
||||||
|
<ID>ThrowsCount:CommandHandler.kt$CommandHandler$private fun checkArgs(cmd: ExCommand)</ID>
|
||||||
|
<ID>TooGenericExceptionThrown:CommandParser.kt$CommandParser$throw RuntimeException("Cannot create an ex command: $handlerHolder")</ID>
|
||||||
|
<ID>TooManyFunctions:CommandBuilder.kt$CommandBuilder</ID>
|
||||||
|
<ID>TooManyFunctions:CommandState.kt$CommandState</ID>
|
||||||
|
<ID>TooManyFunctions:PutGroup.kt$PutGroup</ID>
|
||||||
|
<ID>TooManyFunctions:Ranges.kt$Ranges</ID>
|
||||||
|
<ID>TooManyFunctions:SearchHighlightsHelper.kt$com.maddyhome.idea.vim.helper.SearchHighlightsHelper.kt</ID>
|
||||||
|
<ID>TooManyFunctions:VisualGroup.kt$com.maddyhome.idea.vim.group.visual.VisualGroup.kt</ID>
|
||||||
|
<ID>TooManyFunctions:VisualMotionGroup.kt$VisualMotionGroup</ID>
|
||||||
|
</CurrentIssues>
|
||||||
|
</SmellBaseline>
|
31
.detekt/config.yaml
Normal file
31
.detekt/config.yaml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
formatting:
|
||||||
|
Indentation:
|
||||||
|
indentSize: 2
|
||||||
|
continuationIndentSize: 8
|
||||||
|
ParameterListWrapping:
|
||||||
|
indentSize: 8
|
||||||
|
complexity:
|
||||||
|
LongParameterList:
|
||||||
|
functionThreshold: 12
|
||||||
|
NestedBlockDepth:
|
||||||
|
threshold: 6
|
||||||
|
ComplexCondition:
|
||||||
|
threshold: 6
|
||||||
|
ComplexMethod:
|
||||||
|
threshold: 20
|
||||||
|
exceptions:
|
||||||
|
TooGenericExceptionCaught:
|
||||||
|
active: false
|
||||||
|
naming:
|
||||||
|
ClassNaming:
|
||||||
|
excludes: "**/ConfigurationMigrators.kt, **/VersionDetectors.kt"
|
||||||
|
performance:
|
||||||
|
SpreadOperator:
|
||||||
|
active: false
|
||||||
|
style:
|
||||||
|
ForbiddenComment:
|
||||||
|
active: false
|
||||||
|
MaxLineLength:
|
||||||
|
maxLineLength: 160
|
||||||
|
ReturnCount:
|
||||||
|
max: 5
|
@@ -7,4 +7,3 @@ indent_style = space
|
|||||||
[*.kt]
|
[*.kt]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
ktlint_standard_no-wildcard-imports = disabled
|
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1 +0,0 @@
|
|||||||
* text=auto eol=lf
|
|
32
.github/workflows/checkNewPlugins.yml
vendored
32
.github/workflows/checkNewPlugins.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
|
|
||||||
|
|
||||||
name: Check new plugin dependencies
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Fetch origin repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Check new plugins
|
|
||||||
run: ./gradlew scripts:checkNewPluginDependencies
|
|
47
.github/workflows/closeYoutrackOnCommit.yml
vendored
47
.github/workflows/closeYoutrackOnCommit.yml
vendored
@@ -1,47 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Close YouTrack on commit
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 300
|
|
||||||
- name: Get tags
|
|
||||||
run: git fetch --tags origin
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
# The last successful job was marked with a tag
|
|
||||||
- name: Get commit with last workflow
|
|
||||||
run: |
|
|
||||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-close-youtrack)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Update YouTrack
|
|
||||||
run: ./gradlew --no-configuration-cache updateYoutrackOnCommit
|
|
||||||
env:
|
|
||||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
|
||||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
|
||||||
|
|
||||||
- name: Update tags
|
|
||||||
run: |
|
|
||||||
git tag --delete workflow-close-youtrack || true
|
|
||||||
git push origin :refs/tags/workflow-close-youtrack || true
|
|
||||||
git tag workflow-close-youtrack
|
|
||||||
git push origin workflow-close-youtrack
|
|
67
.github/workflows/codeql-analysis.yml
vendored
67
.github/workflows/codeql-analysis.yml
vendored
@@ -1,67 +0,0 @@
|
|||||||
# For most projects, this workflow file will not need changing; you simply need
|
|
||||||
# to commit it to your repository.
|
|
||||||
#
|
|
||||||
# You may wish to alter this file to override the set of languages analyzed,
|
|
||||||
# or to provide custom queries or build logic.
|
|
||||||
#
|
|
||||||
# ******** NOTE ********
|
|
||||||
# We have attempted to detect the languages in your repository. Please check
|
|
||||||
# the `language` matrix defined below to confirm you have the correct set of
|
|
||||||
# supported CodeQL languages.
|
|
||||||
#
|
|
||||||
name: "CodeQL"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [ master ]
|
|
||||||
schedule:
|
|
||||||
- cron: '44 12 * * 4'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
name: Analyze
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
language: [ 'java' ]
|
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
|
||||||
# Learn more:
|
|
||||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v2
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v2
|
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
|
||||||
# 📚 https://git.io/JvXDl
|
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
|
||||||
# and modify them (or add more) to build your code if your project
|
|
||||||
# uses a compiled language
|
|
||||||
|
|
||||||
#- run: |
|
|
||||||
# make bootstrap
|
|
||||||
# make release
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v2
|
|
33
.github/workflows/integrationsTest.yml
vendored
33
.github/workflows/integrationsTest.yml
vendored
@@ -1,33 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Testing CI integrations
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 5 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 300
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: ./gradlew --no-configuration-cache integrationsTest
|
|
||||||
env:
|
|
||||||
YOUTRACK_TOKEN: ${{ secrets.YOUTRACK_TOKEN }}
|
|
||||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
|
36
.github/workflows/kover.yml
vendored
36
.github/workflows/kover.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Kover
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 300
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Run tests
|
|
||||||
run: ./gradlew koverXmlReport
|
|
||||||
|
|
||||||
|
|
||||||
# Upload Kover report to CodeCov
|
|
||||||
- uses: codecov/codecov-action@v3
|
|
||||||
with:
|
|
||||||
files: ${{ github.workspace }}/build/reports/kover/xml/report.xml
|
|
17
.github/workflows/mergeDependabotPR.yml
vendored
17
.github/workflows/mergeDependabotPR.yml
vendored
@@ -1,17 +0,0 @@
|
|||||||
name: Dependabot auto-merge
|
|
||||||
on: pull_request
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
dependabot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: ${{ github.actor == 'dependabot[bot]' && github.repository == 'JetBrains/ideavim' }}
|
|
||||||
steps:
|
|
||||||
- name: Auto-merge Dependabot PR
|
|
||||||
run: gh pr merge --auto --rebase "$PR_URL"
|
|
||||||
env:
|
|
||||||
PR_URL: ${{github.event.pull_request.html_url}}
|
|
||||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
45
.github/workflows/mergePr.yml
vendored
45
.github/workflows/mergePr.yml
vendored
@@ -1,45 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Update Changelog On PR
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
pull_request_target:
|
|
||||||
types: [ closed ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
if: false
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 50
|
|
||||||
# See end of file updateChangeslog.yml for explanation of this secret
|
|
||||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Update authors
|
|
||||||
id: update_authors
|
|
||||||
run: ./gradlew --no-configuration-cache updateMergedPr -PprId=${{ github.event.number }}
|
|
||||||
env:
|
|
||||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
branch: master
|
|
||||||
commit_message: Update changelog after merging PR
|
|
||||||
commit_user_name: IdeaVim Bot
|
|
||||||
commit_user_email: maintainers@ideavim.dev
|
|
||||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
|
||||||
file_pattern: CHANGES.md
|
|
81
.github/workflows/runUiOctopusTests.yml
vendored
81
.github/workflows/runUiOctopusTests.yml
vendored
@@ -1,81 +0,0 @@
|
|||||||
name: Run Non Octopus UI Tests
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 12 * * *'
|
|
||||||
jobs:
|
|
||||||
build-for-ui-test-mac-os:
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: zulu
|
|
||||||
java-version: 17
|
|
||||||
- name: Setup FFmpeg
|
|
||||||
run: brew install ffmpeg
|
|
||||||
# - name: Setup Gradle
|
|
||||||
# uses: gradle/gradle-build-action@v2.4.2
|
|
||||||
- name: Build Plugin
|
|
||||||
run: gradle :buildPlugin
|
|
||||||
- name: Run Idea
|
|
||||||
run: |
|
|
||||||
mkdir -p build/reports
|
|
||||||
gradle --no-configuration-cache runIdeForUiTests -Doctopus.handler=false > build/reports/idea.log &
|
|
||||||
- name: Wait for Idea started
|
|
||||||
uses: jtalk/url-health-check-action@v3
|
|
||||||
with:
|
|
||||||
url: http://127.0.0.1:8082
|
|
||||||
max-attempts: 20
|
|
||||||
retry-delay: 10s
|
|
||||||
- name: Tests
|
|
||||||
run: gradle :tests:ui-ij-tests:testUi
|
|
||||||
- name: Move video
|
|
||||||
if: always()
|
|
||||||
run: mv tests/ui-ij-tests/video build/reports
|
|
||||||
- name: Move sandbox logs
|
|
||||||
if: always()
|
|
||||||
run: mv build/idea-sandbox/IC-2024.1.2/log_runIdeForUiTests idea-sandbox-log
|
|
||||||
- name: Save report
|
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ui-test-fails-report-mac
|
|
||||||
path: |
|
|
||||||
build/reports
|
|
||||||
tests/ui-ij-tests/build/reports
|
|
||||||
idea-sandbox-log
|
|
||||||
# build-for-ui-test-linux:
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# steps:
|
|
||||||
# - uses: actions/checkout@v2
|
|
||||||
# - name: Setup Java
|
|
||||||
# uses: actions/setup-java@v2.1.0
|
|
||||||
# with:
|
|
||||||
# distribution: zulu
|
|
||||||
# java-version: 11
|
|
||||||
# - name: Build Plugin
|
|
||||||
# run: gradle :buildPlugin
|
|
||||||
# - name: Run Idea
|
|
||||||
# run: |
|
|
||||||
# export DISPLAY=:99.0
|
|
||||||
# Xvfb -ac :99 -screen 0 1920x1080x16 &
|
|
||||||
# mkdir -p build/reports
|
|
||||||
# gradle :runIdeForUiTests #> build/reports/idea.log
|
|
||||||
# - name: Wait for Idea started
|
|
||||||
# uses: jtalk/url-health-check-action@1.5
|
|
||||||
# with:
|
|
||||||
# url: http://127.0.0.1:8082
|
|
||||||
# max-attempts: 15
|
|
||||||
# retry-delay: 30s
|
|
||||||
# - name: Tests
|
|
||||||
# run: gradle :testUi
|
|
||||||
# - name: Save fails report
|
|
||||||
# if: ${{ failure() }}
|
|
||||||
# uses: actions/upload-artifact@v2
|
|
||||||
# with:
|
|
||||||
# name: ui-test-fails-report-linux
|
|
||||||
# path: |
|
|
||||||
# ui-test-example/build/reports
|
|
52
.github/workflows/runUiPyTests.yml
vendored
52
.github/workflows/runUiPyTests.yml
vendored
@@ -1,52 +0,0 @@
|
|||||||
name: Run UI PyCharm Tests
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 12 * * *'
|
|
||||||
jobs:
|
|
||||||
build-for-ui-test-mac-os:
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: zulu
|
|
||||||
java-version: 17
|
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: '3.10'
|
|
||||||
- name: Setup FFmpeg
|
|
||||||
run: brew install ffmpeg
|
|
||||||
# - name: Setup Gradle
|
|
||||||
# uses: gradle/gradle-build-action@v2.4.2
|
|
||||||
- name: Build Plugin
|
|
||||||
run: gradle :buildPlugin
|
|
||||||
- name: Run Idea
|
|
||||||
run: |
|
|
||||||
mkdir -p build/reports
|
|
||||||
gradle --no-configuration-cache :runIdeForUiTests -PideaType=PC > build/reports/idea.log &
|
|
||||||
- name: Wait for Idea started
|
|
||||||
uses: jtalk/url-health-check-action@v3
|
|
||||||
with:
|
|
||||||
url: http://127.0.0.1:8082
|
|
||||||
max-attempts: 20
|
|
||||||
retry-delay: 10s
|
|
||||||
- name: Tests
|
|
||||||
run: gradle :tests:ui-py-tests:testUi
|
|
||||||
- name: Move video
|
|
||||||
if: always()
|
|
||||||
run: mv tests/ui-py-tests/video build/reports
|
|
||||||
- name: Move sandbox logs
|
|
||||||
if: always()
|
|
||||||
run: mv build/idea-sandbox/PC-2024.1.2/log_runIdeForUiTests idea-sandbox-log
|
|
||||||
- name: Save report
|
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ui-test-fails-report-mac
|
|
||||||
path: |
|
|
||||||
build/reports
|
|
||||||
tests/ui-py-tests/build/reports
|
|
||||||
idea-sandbox-log
|
|
81
.github/workflows/runUiTests.yml
vendored
81
.github/workflows/runUiTests.yml
vendored
@@ -1,81 +0,0 @@
|
|||||||
name: Run UI Tests
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 12 * * *'
|
|
||||||
jobs:
|
|
||||||
build-for-ui-test-mac-os:
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
runs-on: macos-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: zulu
|
|
||||||
java-version: 17
|
|
||||||
- name: Setup FFmpeg
|
|
||||||
run: brew install ffmpeg
|
|
||||||
# - name: Setup Gradle
|
|
||||||
# uses: gradle/gradle-build-action@v2.4.2
|
|
||||||
- name: Build Plugin
|
|
||||||
run: gradle :buildPlugin
|
|
||||||
- name: Run Idea
|
|
||||||
run: |
|
|
||||||
mkdir -p build/reports
|
|
||||||
gradle --no-configuration-cache runIdeForUiTests > build/reports/idea.log &
|
|
||||||
- name: Wait for Idea started
|
|
||||||
uses: jtalk/url-health-check-action@v3
|
|
||||||
with:
|
|
||||||
url: http://127.0.0.1:8082
|
|
||||||
max-attempts: 20
|
|
||||||
retry-delay: 10s
|
|
||||||
- name: Tests
|
|
||||||
run: gradle :tests:ui-ij-tests:testUi
|
|
||||||
- name: Move video
|
|
||||||
if: always()
|
|
||||||
run: mv tests/ui-ij-tests/video build/reports
|
|
||||||
- name: Move sandbox logs
|
|
||||||
if: always()
|
|
||||||
run: mv build/idea-sandbox/IC-2024.1.2/log_runIdeForUiTests idea-sandbox-log
|
|
||||||
- name: Save report
|
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: ui-test-fails-report-mac
|
|
||||||
path: |
|
|
||||||
build/reports
|
|
||||||
tests/ui-ij-tests/build/reports
|
|
||||||
idea-sandbox-log
|
|
||||||
# build-for-ui-test-linux:
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# steps:
|
|
||||||
# - uses: actions/checkout@v2
|
|
||||||
# - name: Setup Java
|
|
||||||
# uses: actions/setup-java@v2.1.0
|
|
||||||
# with:
|
|
||||||
# distribution: zulu
|
|
||||||
# java-version: 11
|
|
||||||
# - name: Build Plugin
|
|
||||||
# run: gradle :buildPlugin
|
|
||||||
# - name: Run Idea
|
|
||||||
# run: |
|
|
||||||
# export DISPLAY=:99.0
|
|
||||||
# Xvfb -ac :99 -screen 0 1920x1080x16 &
|
|
||||||
# mkdir -p build/reports
|
|
||||||
# gradle :runIdeForUiTests #> build/reports/idea.log
|
|
||||||
# - name: Wait for Idea started
|
|
||||||
# uses: jtalk/url-health-check-action@1.5
|
|
||||||
# with:
|
|
||||||
# url: http://127.0.0.1:8082
|
|
||||||
# max-attempts: 15
|
|
||||||
# retry-delay: 30s
|
|
||||||
# - name: Tests
|
|
||||||
# run: gradle :testUi
|
|
||||||
# - name: Save fails report
|
|
||||||
# if: ${{ failure() }}
|
|
||||||
# uses: actions/upload-artifact@v2
|
|
||||||
# with:
|
|
||||||
# name: ui-test-fails-report-linux
|
|
||||||
# path: |
|
|
||||||
# ui-test-example/build/reports
|
|
45
.github/workflows/syncDoc.yml
vendored
45
.github/workflows/syncDoc.yml
vendored
@@ -1,45 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
# This workflow syncs changes from the docs folder of IdeaVim to the IdeaVim.wiki repository
|
|
||||||
|
|
||||||
name: Sync docs
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Fetch origin repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
path: origin
|
|
||||||
# See end of file updateChangeslog.yml for explanation of this secret
|
|
||||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
|
||||||
|
|
||||||
- name: Fetch docs repo
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
repository: JetBrains/ideavim.wiki
|
|
||||||
path: docs
|
|
||||||
|
|
||||||
- name: Sync docs
|
|
||||||
id: update_authors
|
|
||||||
run: cp -a origin/doc/. docs
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
branch: master
|
|
||||||
repository: docs
|
|
||||||
commit_message: Update docs
|
|
||||||
commit_user_name: IdeaVim Bot
|
|
||||||
commit_user_email: maintainers@ideavim.dev
|
|
||||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
|
62
.github/workflows/updateAuthors.yml
vendored
62
.github/workflows/updateAuthors.yml
vendored
@@ -1,62 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Update Authors
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 9 * * *'
|
|
||||||
# Workflow run on push is disabled to avoid conflicts when merging PR
|
|
||||||
# push:
|
|
||||||
# branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 300
|
|
||||||
# See end of file updateChangeslog.yml for explanation of this secret
|
|
||||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
|
||||||
- name: Get tags
|
|
||||||
run: git fetch --tags origin
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
# The last successful job was marked with a tag
|
|
||||||
- name: Get commit with last workflow
|
|
||||||
run: |
|
|
||||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-authors)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Update authors
|
|
||||||
id: update_authors
|
|
||||||
run: ./gradlew --no-configuration-cache updateAuthors --stacktrace
|
|
||||||
env:
|
|
||||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
|
||||||
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
commit_message: Add ${{ steps.update_authors.outputs.authors }} to contributors list
|
|
||||||
commit_user_name: IdeaVim Bot
|
|
||||||
commit_user_email: maintainers@ideavim.dev
|
|
||||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
|
||||||
file_pattern: AUTHORS.md
|
|
||||||
|
|
||||||
- name: Update tags
|
|
||||||
run: |
|
|
||||||
git tag --delete workflow-authors || true
|
|
||||||
git push origin :refs/tags/workflow-authors || true
|
|
||||||
git tag workflow-authors
|
|
||||||
git push origin workflow-authors
|
|
63
.github/workflows/updateChangelog.yml
vendored
63
.github/workflows/updateChangelog.yml
vendored
@@ -1,63 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Update Changelog
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 10 * * *'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: false
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 300
|
|
||||||
# See end of file updateChangeslog.yml for explanation of this secret
|
|
||||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
|
||||||
- name: Get tags
|
|
||||||
run: git fetch --tags origin
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
# The last successful job was marked with a tag
|
|
||||||
- name: Get commit with last workflow
|
|
||||||
run: |
|
|
||||||
echo "LAST_COMMIT=$(git rev-list -n 1 tags/workflow-changelog)" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Update changelog
|
|
||||||
run: ./gradlew --no-configuration-cache updateChangelog
|
|
||||||
env:
|
|
||||||
SUCCESS_COMMIT: ${{ env.LAST_COMMIT }}
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
commit_message: Update changelog. Action id - ${{ github.run_id }}
|
|
||||||
commit_user_name: IdeaVim Bot
|
|
||||||
commit_user_email: maintainers@ideavim.dev
|
|
||||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
|
||||||
file_pattern: CHANGES.md
|
|
||||||
|
|
||||||
- name: Update tags
|
|
||||||
run: |
|
|
||||||
git tag --delete workflow-changelog || true
|
|
||||||
git push origin :refs/tags/workflow-changelog || true
|
|
||||||
git tag workflow-changelog
|
|
||||||
git push origin workflow-changelog
|
|
||||||
|
|
||||||
# Regarding secrets.PUSH_TO_PROTECTED_BRANCH_SECRET - we use branch protection rules to automate merges of the
|
|
||||||
# dependabot updates. See mergeDependatobPR.yml file.
|
|
||||||
# However, it turned out that GitHub accepts pushes from the actions as a PR and requires checks, that are always
|
|
||||||
# false for pushing from actions.
|
|
||||||
# This secret is created to implement the workaround described in https://stackoverflow.com/a/76135647/3124227
|
|
42
.github/workflows/updateFormatting.yml
vendored
42
.github/workflows/updateFormatting.yml
vendored
@@ -1,42 +0,0 @@
|
|||||||
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
|
|
||||||
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle
|
|
||||||
|
|
||||||
name: Update Formatting
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * 0'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.repository == 'JetBrains/ideavim'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
fetch-depth: 50
|
|
||||||
# See end of file updateChangeslog.yml for explanation of this secret
|
|
||||||
ssh-key: ${{ secrets.PUSH_TO_PROTECTED_BRANCH_SECRET }}
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
java-version: '17'
|
|
||||||
distribution: 'adopt'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- uses: findologic/intellij-format-action@1.0.1
|
|
||||||
with:
|
|
||||||
include-glob: '*.kt,*.java'
|
|
||||||
path: .
|
|
||||||
|
|
||||||
- name: Commit changes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4
|
|
||||||
with:
|
|
||||||
commit_message: Update formatting
|
|
||||||
commit_user_name: IdeaVim Bot
|
|
||||||
commit_user_email: maintainers@ideavim.dev
|
|
||||||
commit_author: IdeaVim Bot <maintainers@ideavim.dev>
|
|
23
.gitignore
vendored
23
.gitignore
vendored
@@ -1,6 +1,5 @@
|
|||||||
*.swp
|
*.swp
|
||||||
/.gradle/
|
/.gradle/
|
||||||
/.intellijPlatform/
|
|
||||||
|
|
||||||
/.idea/
|
/.idea/
|
||||||
!/.idea/scopes
|
!/.idea/scopes
|
||||||
@@ -9,29 +8,13 @@
|
|||||||
!/.idea/inspectionProfiles
|
!/.idea/inspectionProfiles
|
||||||
!/.idea/fileTemplates
|
!/.idea/fileTemplates
|
||||||
!/.idea/runConfigurations
|
!/.idea/runConfigurations
|
||||||
!/.idea/codeStyles
|
|
||||||
!/.idea/vcs.xml
|
|
||||||
!/.idea/misc.xml
|
|
||||||
!/.idea/.name
|
|
||||||
|
|
||||||
**/build/
|
/build/
|
||||||
**/out/
|
/out/
|
||||||
**/tmp/
|
/tmp/
|
||||||
|
|
||||||
*.DS_Store
|
*.DS_Store
|
||||||
|
|
||||||
.teamcity/.idea
|
.teamcity/.idea
|
||||||
.teamcity/target
|
.teamcity/target
|
||||||
.teamcity/*.iml
|
.teamcity/*.iml
|
||||||
|
|
||||||
# Generated by gradle task "generateGrammarSource"
|
|
||||||
vim-engine/src/main/java/com/maddyhome/idea/vim/parser/generated
|
|
||||||
vim-engine/src/main/java/com/maddyhome/idea/vim/regexp/parser/generated
|
|
||||||
# Generated JSONs for lazy classloading
|
|
||||||
/vim-engine/src/main/resources/ksp-generated
|
|
||||||
/src/main/resources/ksp-generated
|
|
||||||
|
|
||||||
# Created by github automation
|
|
||||||
settings.xml
|
|
||||||
|
|
||||||
.kotlin
|
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "doc"]
|
||||||
|
path = doc
|
||||||
|
url = https://github.com/JetBrains/ideavim.wiki.git
|
1
.idea/.name
generated
1
.idea/.name
generated
@@ -1 +0,0 @@
|
|||||||
IdeaVim
|
|
201
.idea/codeStyles/Project.xml
generated
201
.idea/codeStyles/Project.xml
generated
@@ -1,201 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<code_scheme name="Project" version="173">
|
|
||||||
<option name="AUTODETECT_INDENTS" value="false" />
|
|
||||||
<option name="OTHER_INDENT_OPTIONS">
|
|
||||||
<value>
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
</value>
|
|
||||||
</option>
|
|
||||||
<option name="LINE_SEPARATOR" value=" " />
|
|
||||||
<JavaCodeStyleSettings>
|
|
||||||
<option name="FIELD_NAME_PREFIX" value="my" />
|
|
||||||
<option name="STATIC_FIELD_NAME_PREFIX" value="our" />
|
|
||||||
</JavaCodeStyleSettings>
|
|
||||||
<JetCodeStyleSettings>
|
|
||||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
|
|
||||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
|
|
||||||
<option name="ALLOW_TRAILING_COMMA" value="true" />
|
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
|
||||||
</JetCodeStyleSettings>
|
|
||||||
<ScalaCodeStyleSettings>
|
|
||||||
<option name="MULTILINE_STRING_CLOSING_QUOTES_ON_NEW_LINE" value="true" />
|
|
||||||
</ScalaCodeStyleSettings>
|
|
||||||
<ADDITIONAL_INDENT_OPTIONS fileType="rb">
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
</ADDITIONAL_INDENT_OPTIONS>
|
|
||||||
<codeStyleSettings language="CFML">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="ECMA Script Level 4">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
|
||||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
|
||||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="1" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="1" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="GSP">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Groovy">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
|
||||||
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
|
||||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
|
||||||
<option name="THROWS_LIST_WRAP" value="5" />
|
|
||||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="1" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FIELD_ANNOTATION_WRAP" value="0" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="HTML">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="TAB_SIZE" value="8" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JAVA">
|
|
||||||
<option name="LINE_COMMENT_AT_FIRST_COLUMN" value="false" />
|
|
||||||
<option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="false" />
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_ASSIGNMENT" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_THROWS_LIST" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="true" />
|
|
||||||
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
|
||||||
<option name="EXTENDS_LIST_WRAP" value="1" />
|
|
||||||
<option name="THROWS_LIST_WRAP" value="5" />
|
|
||||||
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
|
||||||
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="1" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FIELD_ANNOTATION_WRAP" value="0" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="TAB_SIZE" value="8" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JSON">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JSP">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="TAB_SIZE" value="8" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="JavaScript">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="ELSE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="WHILE_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="CATCH_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
|
||||||
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
|
||||||
<option name="CALL_PARAMETERS_WRAP" value="1" />
|
|
||||||
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
|
||||||
<option name="BINARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_WRAP" value="5" />
|
|
||||||
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
|
||||||
<option name="FOR_STATEMENT_WRAP" value="5" />
|
|
||||||
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
|
|
||||||
<option name="ASSIGNMENT_WRAP" value="1" />
|
|
||||||
<option name="IF_BRACE_FORCE" value="1" />
|
|
||||||
<option name="DOWHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="WHILE_BRACE_FORCE" value="1" />
|
|
||||||
<option name="FOR_BRACE_FORCE" value="1" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="Python">
|
|
||||||
<option name="KEEP_LINE_BREAKS" value="false" />
|
|
||||||
<option name="PARENT_SETTINGS_INSTALLED" value="true" />
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="XML">
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
|
||||||
<option name="TAB_SIZE" value="8" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
<codeStyleSettings language="kotlin">
|
|
||||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
|
||||||
<indentOptions>
|
|
||||||
<option name="INDENT_SIZE" value="2" />
|
|
||||||
<option name="TAB_SIZE" value="2" />
|
|
||||||
</indentOptions>
|
|
||||||
</codeStyleSettings>
|
|
||||||
</code_scheme>
|
|
||||||
</component>
|
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
5
.idea/codeStyles/codeStyleConfig.xml
generated
@@ -1,5 +0,0 @@
|
|||||||
<component name="ProjectCodeStyleConfiguration">
|
|
||||||
<state>
|
|
||||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
|
||||||
</state>
|
|
||||||
</component>
|
|
2
.idea/copyright/IdeaVim.xml
generated
2
.idea/copyright/IdeaVim.xml
generated
@@ -1,6 +1,6 @@
|
|||||||
<component name="CopyrightManager">
|
<component name="CopyrightManager">
|
||||||
<copyright>
|
<copyright>
|
||||||
<option name="notice" value="Copyright 2003-&#36;today.year The IdeaVim authors Use of this source code is governed by an MIT-style license that can be found in the LICENSE.txt file or at https://opensource.org/licenses/MIT." />
|
<option name="notice" value="IdeaVim - Vim emulator for IDEs based on the IntelliJ platform Copyright (C) 2003-&#36;today.year The IdeaVim authors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>." />
|
||||||
<option name="myName" value="IdeaVim" />
|
<option name="myName" value="IdeaVim" />
|
||||||
</copyright>
|
</copyright>
|
||||||
</component>
|
</component>
|
33
.idea/inspectionProfiles/Project_Default.xml
generated
33
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -31,39 +31,6 @@
|
|||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="MoveVariableDeclarationIntoWhen" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
<inspection_tool class="MoveVariableDeclarationIntoWhen" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||||
<inspection_tool class="PluginXmlI18n" enabled="true" level="WARNING" enabled_by_default="true" />
|
<inspection_tool class="PluginXmlI18n" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="SSBasedInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
|
||||||
<replaceConfiguration name="IdeaVim run for each caret" description="Please use IdeaVim version of `runForEachCaret` function" suppressId="ideavimRunForEachCaret" problemDescriptor="Replace with IdeaVim version" text="$editor$.caretModel.runForEachCaret { $expr$ }" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="$editor$.vimForEachCaret { $expr$ }">
|
|
||||||
<constraint name="__context__" within="" contains="" />
|
|
||||||
<constraint name="editor" within="" contains="" />
|
|
||||||
<constraint name="expr" minCount="0" maxCount="2147483647" within="" contains="" />
|
|
||||||
</replaceConfiguration>
|
|
||||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" description="Use assertState and other functions instead of myFixture.checkResult. This function also preformes assertion in neovim" suppressId="IdeaVimAssertState" problemDescriptor="Use IdeaVim testing methods" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="assertState($data$)">
|
|
||||||
<constraint name="__context__" within="" contains="" />
|
|
||||||
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
|
|
||||||
<constraint name="check" regexp="checkResult" within="" contains="" />
|
|
||||||
<constraint name="data" within="" contains="" />
|
|
||||||
</replaceConfiguration>
|
|
||||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($fileName$, $text$)" recursive="false" caseInsensitive="false" type="Kotlin" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="false" replacement="configureByText($text$)">
|
|
||||||
<constraint name="__context__" within="" contains="" />
|
|
||||||
<constraint name="fixture" regexp="myFixture" nameOfExprType="CodeInsightTestFixture" within="" contains="" />
|
|
||||||
<constraint name="check" regexp="configureByText" within="" contains="" />
|
|
||||||
<constraint name="text" within="" contains="" />
|
|
||||||
<constraint name="fileName" within="" contains="" />
|
|
||||||
</replaceConfiguration>
|
|
||||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$check$($data$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="assertState($data$)">
|
|
||||||
<constraint name="__context__" within="" contains="" />
|
|
||||||
<constraint name="fixture" regexp="myFixture" within="" contains="" />
|
|
||||||
<constraint name="check" regexp="checkResult" within="" contains="" />
|
|
||||||
<constraint name="data" within="" contains="" />
|
|
||||||
</replaceConfiguration>
|
|
||||||
<replaceConfiguration name="Use IdeaVim method instead of the fixture" uuid="0f74da52-7360-33ae-9b40-d771aa128de6" text="$fixture$.$configure$($first$, $second$)" recursive="false" caseInsensitive="false" type="JAVA" pattern_context="default" reformatAccordingToStyle="true" shortenFQN="true" replacement="configureByText($second$)">
|
|
||||||
<constraint name="__context__" within="" contains="" />
|
|
||||||
<constraint name="fixture" regexp="myFixture" within="" contains="" />
|
|
||||||
<constraint name="configure" regexp="configureByText" within="" contains="" />
|
|
||||||
<constraint name="first" within="" contains="" />
|
|
||||||
<constraint name="second" within="" contains="" />
|
|
||||||
</replaceConfiguration>
|
|
||||||
</inspection_tool>
|
|
||||||
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
14
.idea/inspectionProfiles/Qodana.xml
generated
14
.idea/inspectionProfiles/Qodana.xml
generated
@@ -33,11 +33,9 @@
|
|||||||
<option name="ignoreToString" value="false" />
|
<option name="ignoreToString" value="false" />
|
||||||
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
<option name="nonNlsCommentPattern" value="NON-NLS" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="MagicConstant" enabled="false" level="WARNING" enabled_by_default="false" />
|
|
||||||
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
|
<inspection_tool class="MissortedModifiers" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
<option name="m_requireAnnotationsFirst" value="true" />
|
<option name="m_requireAnnotationsFirst" value="true" />
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="SameParameterValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
|
||||||
<inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
<inspection_tool class="SameReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||||
<option name="processCode" value="true" />
|
<option name="processCode" value="true" />
|
||||||
@@ -46,17 +44,5 @@
|
|||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
|
<inspection_tool class="SuperTearDownInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||||
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
<inspection_tool class="unused" enabled="false" level="WARNING" enabled_by_default="false" checkParameterExcludingHierarchy="false">
|
|
||||||
<option name="LOCAL_VARIABLE" value="true" />
|
|
||||||
<option name="FIELD" value="true" />
|
|
||||||
<option name="METHOD" value="true" />
|
|
||||||
<option name="CLASS" value="true" />
|
|
||||||
<option name="PARAMETER" value="true" />
|
|
||||||
<option name="REPORT_PARAMETER_FOR_PUBLIC_METHODS" value="true" />
|
|
||||||
<option name="ADD_MAINS_TO_ENTRIES" value="true" />
|
|
||||||
<option name="ADD_APPLET_TO_ENTRIES" value="true" />
|
|
||||||
<option name="ADD_SERVLET_TO_ENTRIES" value="true" />
|
|
||||||
<option name="ADD_NONJAVA_TO_ENTRIES" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
22
.idea/misc.xml
generated
22
.idea/misc.xml
generated
@@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="EntryPointsManager">
|
|
||||||
<list size="3">
|
|
||||||
<item index="0" class="java.lang.String" itemvalue="com.intellij.vim.annotations.CommandOrMotion" />
|
|
||||||
<item index="1" class="java.lang.String" itemvalue="com.intellij.vim.annotations.ExCommand" />
|
|
||||||
<item index="2" class="java.lang.String" itemvalue="com.intellij.vim.annotations.VimscriptFunction" />
|
|
||||||
</list>
|
|
||||||
</component>
|
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
||||||
<component name="FrameworkDetectionExcludesConfiguration">
|
|
||||||
<file type="web" url="file://$PROJECT_DIR$" />
|
|
||||||
</component>
|
|
||||||
<component name="MavenProjectsManager">
|
|
||||||
<option name="originalFiles">
|
|
||||||
<list>
|
|
||||||
<option value="$PROJECT_DIR$/.teamcity/pom.xml" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK" />
|
|
||||||
</project>
|
|
@@ -12,7 +12,7 @@
|
|||||||
<option name="taskNames">
|
<option name="taskNames">
|
||||||
<list>
|
<list>
|
||||||
<option value="check" />
|
<option value="check" />
|
||||||
<option value="verifyPlugin" />
|
<option value="runPluginVerifier" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
<option name="vmOptions" value="" />
|
<option name="vmOptions" value="" />
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
||||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
||||||
<DebugAllEnabled>false</DebugAllEnabled>
|
<DebugAllEnabled>false</DebugAllEnabled>
|
||||||
<RunAsTest>false</RunAsTest>
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
@@ -1,25 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Start IJ with IdeaVim (Split Mode)" type="GradleRunConfiguration" factoryName="Gradle">
|
|
||||||
<log_file alias="idea.log" path="$PROJECT_DIR$/build/idea-sandbox/system/log/idea.log" />
|
|
||||||
<ExternalSystemSettings>
|
|
||||||
<option name="executionName" />
|
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
|
||||||
<option name="externalSystemIdString" value="GRADLE" />
|
|
||||||
<option name="scriptParameters" value="" />
|
|
||||||
<option name="taskDescriptions">
|
|
||||||
<list />
|
|
||||||
</option>
|
|
||||||
<option name="taskNames">
|
|
||||||
<list>
|
|
||||||
<option value="runIdeSplitMode" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
<option name="vmOptions" value="" />
|
|
||||||
</ExternalSystemSettings>
|
|
||||||
<ExternalSystemDebugServerProcess>true</ExternalSystemDebugServerProcess>
|
|
||||||
<ExternalSystemReattachDebugProcess>true</ExternalSystemReattachDebugProcess>
|
|
||||||
<DebugAllEnabled>false</DebugAllEnabled>
|
|
||||||
<RunAsTest>false</RunAsTest>
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
2
.idea/scopes/Copyright.xml
generated
2
.idea/scopes/Copyright.xml
generated
@@ -1,3 +1,3 @@
|
|||||||
<component name="DependencyValidationManager">
|
<component name="DependencyValidationManager">
|
||||||
<scope name="Copyright" pattern="file:*/&&!file:.github//*&&!file:.idea//*&&!file:.teamcity//*&&!file:assets//*&&!file:config//*&&!file:doc//*&&!file:gradle//*&&!file:gradlew&&!file:gradlew.bat&&!file:src/main/resources//*&&!file:antlr//*&&!file:java/com/maddyhome/idea/vim/regexp/RegExp.kt&&!file:java/com/maddyhome/idea/vim/ui/Tutor.kt&&!file:java/com/maddyhome/idea/vim/helper/ScrollViewHelper.kt" />
|
<scope name="Copyright" pattern="file[IdeaVIM.main]:com//*||file[IdeaVIM.test]:*/" />
|
||||||
</component>
|
</component>
|
16
.idea/vcs.xml
generated
16
.idea/vcs.xml
generated
@@ -1,16 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="IssueNavigationConfiguration">
|
|
||||||
<option name="links">
|
|
||||||
<list>
|
|
||||||
<IssueNavigationLink>
|
|
||||||
<option name="issueRegexp" value="[A-Z]+\-\d+" />
|
|
||||||
<option name="linkRegexp" value="https://youtrack.jetbrains.com/issue/$0" />
|
|
||||||
</IssueNavigationLink>
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
17
.teamcity/_Self/Constants.kt
vendored
17
.teamcity/_Self/Constants.kt
vendored
@@ -1,17 +1,10 @@
|
|||||||
package _Self
|
package _Self
|
||||||
|
|
||||||
object Constants {
|
object Constants {
|
||||||
const val DEFAULT_CHANNEL = "default"
|
const val DEFAULT = "default"
|
||||||
const val EAP_CHANNEL = "eap"
|
const val EAP = "eap"
|
||||||
const val DEV_CHANNEL = "Dev"
|
const val DEV = "Dev"
|
||||||
|
|
||||||
const val GITHUB_TESTS = "2024.1.1"
|
const val VERSION = "0.64"
|
||||||
const val NVIM_TESTS = "2024.1.1"
|
const val DEV_VERSION = "0.65"
|
||||||
const val PROPERTY_TESTS = "2024.1.1"
|
|
||||||
const val LONG_RUNNING_TESTS = "2024.1.1"
|
|
||||||
const val QODANA_TESTS = "2024.1.1"
|
|
||||||
const val RELEASE = "2024.1.1"
|
|
||||||
|
|
||||||
const val RELEASE_DEV = "2024.1.1"
|
|
||||||
const val RELEASE_EAP = "2024.1.1"
|
|
||||||
}
|
}
|
||||||
|
102
.teamcity/_Self/Project.kt
vendored
102
.teamcity/_Self/Project.kt
vendored
@@ -1,63 +1,89 @@
|
|||||||
package _Self
|
package _Self
|
||||||
|
|
||||||
import _Self.buildTypes.Compatibility
|
import _Self.buildTypes.GitHubPullRequests
|
||||||
import _Self.buildTypes.LongRunning
|
|
||||||
import _Self.buildTypes.Nvim
|
import _Self.buildTypes.Nvim
|
||||||
import _Self.buildTypes.PluginVerifier
|
import _Self.buildTypes.PluginVerifier
|
||||||
import _Self.buildTypes.PropertyBased
|
import _Self.buildTypes.PropertyBased
|
||||||
import _Self.buildTypes.Qodana
|
import _Self.buildTypes.Qodana
|
||||||
import _Self.buildTypes.TestingBuildType
|
import _Self.buildTypes.TestsForIntelliJ20202
|
||||||
import _Self.subprojects.GitHub
|
import _Self.buildTypes.TestsForIntelliJ20203
|
||||||
|
import _Self.buildTypes.TestsForIntelliJEAP
|
||||||
import _Self.subprojects.OldTests
|
import _Self.subprojects.OldTests
|
||||||
import _Self.subprojects.Releases
|
import _Self.subprojects.Releases
|
||||||
|
import _Self.vcsRoots.Branch_181
|
||||||
|
import _Self.vcsRoots.Branch_183
|
||||||
|
import _Self.vcsRoots.Branch_191_193
|
||||||
|
import _Self.vcsRoots.Branch_201
|
||||||
import _Self.vcsRoots.GitHubPullRequest
|
import _Self.vcsRoots.GitHubPullRequest
|
||||||
import _Self.vcsRoots.ReleasesVcsRoot
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
|
||||||
object Project : Project({
|
object Project : Project({
|
||||||
description = "Vim engine for JetBrains IDEs"
|
description = "Vim emulation plugin for the IntelliJ platform products"
|
||||||
|
|
||||||
subProjects(Releases, OldTests, GitHub)
|
subProjects(Releases, OldTests)
|
||||||
|
|
||||||
// VCS roots
|
// VCS roots
|
||||||
|
vcsRoot(Branch_183)
|
||||||
|
vcsRoot(Branch_181)
|
||||||
|
vcsRoot(Branch_191_193)
|
||||||
|
vcsRoot(Branch_201)
|
||||||
vcsRoot(GitHubPullRequest)
|
vcsRoot(GitHubPullRequest)
|
||||||
vcsRoot(ReleasesVcsRoot)
|
|
||||||
|
|
||||||
// Active tests
|
// Builds
|
||||||
buildType(TestingBuildType("Latest EAP", "<default>", version = "LATEST-EAP-SNAPSHOT"))
|
buildType(GitHubPullRequests)
|
||||||
buildType(TestingBuildType("2024.1.1", "<default>"))
|
|
||||||
buildType(TestingBuildType("Latest EAP With Xorg", "<default>", version = "LATEST-EAP-SNAPSHOT"))
|
buildType(TestsForIntelliJ20202)
|
||||||
|
buildType(TestsForIntelliJ20203)
|
||||||
|
buildType(TestsForIntelliJEAP)
|
||||||
|
|
||||||
buildType(PropertyBased)
|
buildType(PropertyBased)
|
||||||
buildType(LongRunning)
|
|
||||||
|
|
||||||
buildType(Nvim)
|
buildType(Nvim)
|
||||||
buildType(PluginVerifier)
|
buildType(PluginVerifier)
|
||||||
buildType(Compatibility)
|
|
||||||
|
|
||||||
buildType(Qodana)
|
buildType(Qodana)
|
||||||
|
|
||||||
|
// Unknown staff generated by TeamCity
|
||||||
|
features {
|
||||||
|
feature {
|
||||||
|
type = "CloudImage"
|
||||||
|
id = "PROJECT_EXT_768"
|
||||||
|
param("agent_pool_id", "41")
|
||||||
|
param("amazon-id", "ami-0d1a6a32faa92923e")
|
||||||
|
param("ebs-optimized", "false")
|
||||||
|
param("image-instances-limit", "")
|
||||||
|
param("image-name-prefix", "BuildAgentsIdeaVim")
|
||||||
|
param("instance-type", "c5d.large")
|
||||||
|
param("key-pair-name", "teamcity-prod-pub")
|
||||||
|
param("profileId", "amazon-48")
|
||||||
|
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
|
||||||
|
param("source-id", "BuildAgentsIdeaVim")
|
||||||
|
param("spot-instance-price", "0.1")
|
||||||
|
param("subnet-id", "subnet-58839511")
|
||||||
|
param("use-spot-instances", "true")
|
||||||
|
param("user-tags", "project=idea-vim")
|
||||||
|
param("instance-type", "c5d.xlarge")
|
||||||
|
param("spot-instance-price", "0.12")
|
||||||
|
}
|
||||||
|
feature {
|
||||||
|
type = "CloudProfile"
|
||||||
|
id = "amazon-48"
|
||||||
|
param("agentPushPreset", "")
|
||||||
|
param("cloud-code", "amazon")
|
||||||
|
param("description", "")
|
||||||
|
param("enabled", "true")
|
||||||
|
param("max-running-instances", "10")
|
||||||
|
param("name", "Cloud Agents")
|
||||||
|
param("next-hour", "")
|
||||||
|
param("not-checked", "")
|
||||||
|
param("profileId", "amazon-48")
|
||||||
|
param("profileServerUrl", "")
|
||||||
|
param("region", "eu-west-1")
|
||||||
|
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
|
||||||
|
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
|
||||||
|
param("system.cloud.profile_id", "amazon-48")
|
||||||
|
param("terminate-idle-time", "15")
|
||||||
|
param("total-work-time", "")
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// Common build type for all configurations
|
|
||||||
abstract class IdeaVimBuildType(init: BuildType.() -> Unit) : BuildType({
|
|
||||||
artifactRules = """
|
|
||||||
+:build/reports => build/reports
|
|
||||||
+:/mnt/agent/temp/buildTmp/ => /mnt/agent/temp/buildTmp/
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
init()
|
|
||||||
|
|
||||||
requirements {
|
|
||||||
// These requirements define Linux-Medium configuration.
|
|
||||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
|
||||||
// IDK the reason for it, but on our agents this property is empty
|
|
||||||
equals("teamcity.agent.hardware.cpuCount", "4")
|
|
||||||
equals("teamcity.agent.os.family", "Linux")
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
// Disable detection of the java OOM
|
|
||||||
javaCrash = false
|
|
||||||
}
|
|
||||||
})
|
|
45
.teamcity/_Self/buildTypes/ActiveTests.kt
vendored
Normal file
45
.teamcity/_Self/buildTypes/ActiveTests.kt
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
sealed class ActiveTests(buildName: String, ijVersion: String) : BuildType({
|
||||||
|
name = buildName
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", ijVersion)
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(DslContext.settingsRoot)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean check"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
object TestsForIntelliJEAP : ActiveTests("Tests for IntelliJ Latest EAP", "LATEST-EAP-SNAPSHOT")
|
||||||
|
object TestsForIntelliJ20203 : ActiveTests("Tests for IntelliJ 2020.3", "2020.3")
|
||||||
|
object TestsForIntelliJ20202 : ActiveTests("Tests for IntelliJ 2020.2", "2020.2")
|
63
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
63
.teamcity/_Self/buildTypes/Compatibility.kt
vendored
@@ -1,63 +0,0 @@
|
|||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.golang
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
|
||||||
|
|
||||||
object Compatibility : IdeaVimBuildType({
|
|
||||||
id("IdeaVimCompatibility")
|
|
||||||
name = "IdeaVim compatibility with external plugins"
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:<default>"
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
name = "Load Verifier"
|
|
||||||
scriptContent = """
|
|
||||||
mkdir verifier1
|
|
||||||
curl -f -L -o verifier1/verifier-cli-dev-all-1.jar "https://packages.jetbrains.team/files/p/ideavim/plugin-verifier/verifier-cli-dev-all-1.jar"
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Check"
|
|
||||||
scriptContent = """
|
|
||||||
# We use a custom build of verifier that downloads IdeaVim from dev channel
|
|
||||||
# To create a custom build: Download plugin verifier repo, add an if that switches to dev channel for IdeaVim repo
|
|
||||||
# At the moment it's com.jetbrains.pluginverifier.repository.repositories.marketplace.MarketplaceRepository#getLastCompatibleVersionOfPlugin
|
|
||||||
# Build using gradlew :intellij-plugin-verifier:verifier-cli:shadowJar
|
|
||||||
# Upload verifier-cli-dev-all.jar artifact to the repo in IdeaVim space repo
|
|
||||||
|
|
||||||
java --version
|
|
||||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}org.jetbrains.IdeaVim-EasyMotion' [latest-IU] -team-city
|
|
||||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}eu.theblob42.idea.whichkey' [latest-IU] -team-city
|
|
||||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}IdeaVimExtension' [latest-IU] -team-city
|
|
||||||
# Outdated java -jar verifier/verifier-cli-dev-all.jar check-plugin '${'$'}github.zgqq.intellij-enhance' [latest-IU] -team-city
|
|
||||||
# java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.copilot' [latest-IU] -team-city
|
|
||||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.github.dankinsoid.multicursor' [latest-IU] -team-city
|
|
||||||
java -jar verifier1/verifier-cli-dev-all-1.jar check-plugin '${'$'}com.joshestein.ideavim-quickscope' [latest-IU] -team-city
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
schedule {
|
|
||||||
schedulingPolicy = daily {
|
|
||||||
hour = 4
|
|
||||||
}
|
|
||||||
branchFilter = ""
|
|
||||||
triggerBuild = always()
|
|
||||||
withPendingChangesOnly = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
golang {
|
|
||||||
testFormat = "json"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2024 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
|
|
||||||
object CreateNewReleaseBranchFromMaster : IdeaVimBuildType({
|
|
||||||
name = "EXP: Create new release branch from master"
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
name = "Calculate next potential release version"
|
|
||||||
scriptContent = """
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Fetch all remote branches
|
|
||||||
git fetch --all
|
|
||||||
|
|
||||||
# Get a list of all branches matching the pattern releases/x.y.z
|
|
||||||
branches=${'$'}(git branch -r | grep -oE 'releases/[0-9]+\.[0-9]+\.x')
|
|
||||||
|
|
||||||
# If no matching branches are found, print a message and exit
|
|
||||||
if [[ -z "${'$'}branches" ]]; then
|
|
||||||
echo "No release branches found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Find the largest release version
|
|
||||||
largest_release=${'$'}(echo "${'$'}branches" | sort -V | tail -n 1)
|
|
||||||
|
|
||||||
# Print the largest release
|
|
||||||
echo "Largest release branch: ${'$'}largest_release"
|
|
||||||
echo "##teamcity[setParameter name='env.POTENTIAL_VERSION' value='${'$'}largest_release']"
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
|
|
||||||
script {
|
|
||||||
name = "Show potential release version"
|
|
||||||
scriptContent = """
|
|
||||||
#!/bin/bash
|
|
||||||
echo "Calculated or user-provided parameter value is: %env.POTENTIAL_VERSION%"
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.POTENTIAL_VERSION", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
sshAgent {
|
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
74
.teamcity/_Self/buildTypes/GitHubPullRequests.kt
vendored
Normal file
74
.teamcity/_Self/buildTypes/GitHubPullRequests.kt
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import _Self.vcsRoots.GitHubPullRequest
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
object GitHubPullRequests : BuildType({
|
||||||
|
name = "GitHub Pull Requests"
|
||||||
|
description = "Test GitHub pull requests"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "2020.3")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.GitHubPullRequest)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
branchFilter = """
|
||||||
|
+:*
|
||||||
|
-:<default>
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean test"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
features {
|
||||||
|
pullRequests {
|
||||||
|
provider = github {
|
||||||
|
authType = token {
|
||||||
|
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
|
||||||
|
}
|
||||||
|
filterTargetBranch = "refs/heads/master"
|
||||||
|
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commitStatusPublisher {
|
||||||
|
vcsRootExtId = "${GitHubPullRequest.id}"
|
||||||
|
publisher = github {
|
||||||
|
githubUrl = "https://api.github.com"
|
||||||
|
authType = personalToken {
|
||||||
|
token = "credentialsJSON:43afd6e5-6ad5-4d12-a218-cf1547717a7f"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
param("github_oauth_user", "AlexPl292")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
46
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
46
.teamcity/_Self/buildTypes/LongRunning.kt
vendored
@@ -1,46 +0,0 @@
|
|||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.Constants.LONG_RUNNING_TESTS
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
|
|
||||||
object LongRunning : IdeaVimBuildType({
|
|
||||||
name = "Long running tests"
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", LONG_RUNNING_TESTS)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
gradle {
|
|
||||||
tasks = "clean :tests:long-running-tests:testLongRunning"
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
vcs {
|
|
||||||
enabled = false
|
|
||||||
branchFilter = "+:<default>"
|
|
||||||
}
|
|
||||||
schedule {
|
|
||||||
enabled = true
|
|
||||||
schedulingPolicy = daily {
|
|
||||||
hour = 5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
31
.teamcity/_Self/buildTypes/Nvim.kt
vendored
31
.teamcity/_Self/buildTypes/Nvim.kt
vendored
@@ -1,65 +1,54 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.Constants.NVIM_TESTS
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
object Nvim : IdeaVimBuildType({
|
object Nvim : BuildType({
|
||||||
name = "Tests with nvim"
|
name = "Tests with nvim"
|
||||||
description = "Running tests with nvim integration"
|
description = "Running tests with nvim integration"
|
||||||
|
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", NVIM_TESTS)
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "LATEST-EAP-SNAPSHOT")
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
param("env.ideavim.nvim.path", "./nvim-linux64/bin/nvim")
|
param("env.ideavim.nvim.path", "./nvim-linux64/bin/nvim")
|
||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
name = "Set up NeoVim"
|
name = "Set up NeoVim"
|
||||||
scriptContent = """
|
scriptContent = """
|
||||||
wget https://github.com/neovim/neovim/releases/download/v0.7.2/nvim-linux64.tar.gz
|
wget https://github.com/neovim/neovim/releases/download/v0.4.4/nvim-linux64.tar.gz
|
||||||
tar xzf nvim-linux64.tar.gz
|
tar xzf nvim-linux64.tar.gz
|
||||||
cd nvim-linux64/bin
|
cd nvim-linux64/bin
|
||||||
chmod +x nvim
|
chmod +x nvim
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
gradle {
|
gradle {
|
||||||
tasks = "clean test -Dnvim"
|
tasks = "clean testWithNeovim"
|
||||||
buildFile = ""
|
buildFile = ""
|
||||||
enableStacktrace = true
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
triggers {
|
triggers {
|
||||||
vcs {
|
vcs {
|
||||||
branchFilter = "+:<default>"
|
branchFilter = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
failureConditions {
|
requirements {
|
||||||
failOnMetricChange {
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
|
||||||
threshold = 20
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
16
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
16
.teamcity/_Self/buildTypes/PluginVerifier.kt
vendored
@@ -1,12 +1,12 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
object PluginVerifier : IdeaVimBuildType({
|
object PluginVerifier : BuildType({
|
||||||
name = "Plugin verification"
|
name = "Plugin verification"
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
@@ -15,22 +15,26 @@ object PluginVerifier : IdeaVimBuildType({
|
|||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
gradle {
|
gradle {
|
||||||
tasks = "clean verifyPlugin"
|
tasks = "clean runPluginVerifier"
|
||||||
buildFile = ""
|
buildFile = ""
|
||||||
enableStacktrace = true
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
triggers {
|
triggers {
|
||||||
vcs {
|
vcs {
|
||||||
branchFilter = "+:<default>"
|
branchFilter = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
42
.teamcity/_Self/buildTypes/PrintReleaseBranch.kt
vendored
42
.teamcity/_Self/buildTypes/PrintReleaseBranch.kt
vendored
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2024 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import _Self.vcsRoots.ReleasesVcsRoot
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
|
|
||||||
object PrintReleaseBranch : IdeaVimBuildType({
|
|
||||||
name = "EXP: Print release branch"
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(ReleasesVcsRoot)
|
|
||||||
branchFilter = "+:heads/releases/*"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
|
|
||||||
script {
|
|
||||||
name = "Print current branch"
|
|
||||||
scriptContent = """
|
|
||||||
echo "Current branch is: %teamcity.build.branch%"
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
sshAgent {
|
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
19
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
19
.teamcity/_Self/buildTypes/PropertyBased.kt
vendored
@@ -1,38 +1,41 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.Constants.PROPERTY_TESTS
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
object PropertyBased : IdeaVimBuildType({
|
object PropertyBased : BuildType({
|
||||||
name = "Property based tests"
|
name = "Property based tests"
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", PROPERTY_TESTS)
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "LATEST-EAP-SNAPSHOT")
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
gradle {
|
gradle {
|
||||||
tasks = "clean :tests:property-tests:testPropertyBased"
|
tasks = "clean testPropertyBased"
|
||||||
buildFile = ""
|
buildFile = ""
|
||||||
enableStacktrace = true
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
triggers {
|
triggers {
|
||||||
vcs {
|
vcs {
|
||||||
branchFilter = "+:<default>"
|
branchFilter = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
63
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
63
.teamcity/_Self/buildTypes/PublishVimEngine.kt
vendored
@@ -1,63 +0,0 @@
|
|||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
|
||||||
|
|
||||||
object PublishVimEngine : IdeaVimBuildType({
|
|
||||||
name = "Publish vim-engine"
|
|
||||||
description = "Build and publish vim-engine library"
|
|
||||||
|
|
||||||
artifactRules = "build/distributions/*"
|
|
||||||
buildNumberPattern = "0.0.%build.counter%"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_engineVersion", "%build.number%")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_uploadUrl", "https://packages.jetbrains.team/maven/p/ij/intellij-dependencies")
|
|
||||||
password("env.ORG_GRADLE_PROJECT_spacePassword", "credentialsJSON:5ea56f8c-efe7-4e1e-83de-0c02bcc39d0b", display = ParameterDisplay.HIDDEN)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_spaceUsername", "a121c67e-39ac-40e6-bf82-649855ec27b6")
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:fleet"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
gradle {
|
|
||||||
tasks = ":vim-engine:publish"
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
schedule {
|
|
||||||
enabled = true
|
|
||||||
schedulingPolicy = weekly {
|
|
||||||
dayOfWeek = ScheduleTrigger.DAY.Sunday
|
|
||||||
}
|
|
||||||
branchFilter = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
|
||||||
threshold = 5
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
60
.teamcity/_Self/buildTypes/Qodana.kt
vendored
60
.teamcity/_Self/buildTypes/Qodana.kt
vendored
@@ -1,80 +1,42 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.Constants.QODANA_TESTS
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.Qodana
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.qodana
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
object Qodana : IdeaVimBuildType({
|
object Qodana : BuildType({
|
||||||
name = "Qodana checks"
|
name = "Qodana checks"
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", QODANA_TESTS)
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "LATEST-EAP-SNAPSHOT")
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
gradle {
|
|
||||||
name = "Generate grammar"
|
|
||||||
tasks = "generateGrammarSource"
|
|
||||||
}
|
|
||||||
qodana {
|
qodana {
|
||||||
name = "Qodana"
|
name = "Qodana"
|
||||||
param("clonefinder-languages", "")
|
reportAsTestsEnable = ""
|
||||||
param("collect-anonymous-statistics", "")
|
failBuildOnErrors = ""
|
||||||
param("licenseaudit-enable", "")
|
codeInspectionXmlConfig = "Custom"
|
||||||
param("clonefinder-languages-container", "")
|
codeInspectionCustomXmlConfigPath = ".idea/inspectionProfiles/Qodana.xml"
|
||||||
param("linterVersion", "")
|
|
||||||
param("clonefinder-queried-project", "")
|
|
||||||
param("clonefinder-enable", "")
|
|
||||||
param("clonefinder-reference-projects", "")
|
|
||||||
linter = jvm {
|
|
||||||
version = Qodana.JVMVersion.LATEST
|
|
||||||
}
|
|
||||||
reportAsTests = true
|
|
||||||
additionalQodanaArguments = "--baseline qodana.sarif.json"
|
|
||||||
cloudToken = "credentialsJSON:6b79412e-9198-4862-9223-c5019488f903"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
triggers {
|
triggers {
|
||||||
vcs {
|
vcs {
|
||||||
enabled = false
|
branchFilter = ""
|
||||||
branchFilter = "+:<default>"
|
|
||||||
}
|
|
||||||
schedule {
|
|
||||||
schedulingPolicy = daily {
|
|
||||||
hour = 12
|
|
||||||
minute = 0
|
|
||||||
timezone = "SERVER"
|
|
||||||
}
|
|
||||||
param("dayOfWeek", "Sunday")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
failureConditions {
|
requirements {
|
||||||
failOnMetricChange {
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
threshold = 0
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.MORE
|
|
||||||
compareTo = value()
|
|
||||||
metric = BuildFailureOnMetric.MetricType.TEST_FAILED_COUNT
|
|
||||||
param("metricKey", "QodanaProblemsNew")
|
|
||||||
enabled = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
46
.teamcity/_Self/buildTypes/Release.kt
vendored
Normal file
46
.teamcity/_Self/buildTypes/Release.kt
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import _Self.Constants.DEFAULT
|
||||||
|
import _Self.Constants.DEV
|
||||||
|
import _Self.Constants.EAP
|
||||||
|
import _Self.Constants.VERSION
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
|
||||||
|
object Release : BuildType({
|
||||||
|
name = "Publish Release"
|
||||||
|
description = "Build and publish IdeaVim plugin"
|
||||||
|
|
||||||
|
artifactRules = "build/distributions/*"
|
||||||
|
buildNumberPattern = VERSION
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "2020.2")
|
||||||
|
password(
|
||||||
|
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||||
|
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||||
|
label = "Password"
|
||||||
|
)
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishUsername", "Aleksei.Plate")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT,$EAP,$DEV")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(DslContext.settingsRoot)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean publishPlugin"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
64
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
64
.teamcity/_Self/buildTypes/ReleaseDev.kt
vendored
@@ -1,59 +1,45 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.Constants.DEV_CHANNEL
|
import _Self.Constants.DEV
|
||||||
import _Self.Constants.RELEASE_DEV
|
import _Self.Constants.DEV_VERSION
|
||||||
import _Self.IdeaVimBuildType
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||||
|
|
||||||
object ReleaseDev : IdeaVimBuildType({
|
object ReleaseDev : BuildType({
|
||||||
name = "Publish Dev Build"
|
name = "Publish Dev Build"
|
||||||
description = "Build and publish Dev of IdeaVim plugin"
|
description = "Build and publish Dev of IdeaVim plugin"
|
||||||
|
|
||||||
artifactRules = "build/distributions/*"
|
artifactRules = "build/distributions/*"
|
||||||
|
buildNumberPattern = "$DEV_VERSION-dev.%build.counter%"
|
||||||
|
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_DEV)
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "2020.2")
|
||||||
password(
|
password(
|
||||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||||
label = "Password"
|
label = "Password"
|
||||||
)
|
)
|
||||||
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV_CHANNEL)
|
param("env.ORG_GRADLE_PROJECT_publishUsername", "Aleksei.Plate")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishChannels", DEV)
|
||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
|
||||||
name = "Pull git tags"
|
|
||||||
scriptContent = "git fetch --tags origin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Pull git history"
|
|
||||||
scriptContent = "git fetch --unshallow"
|
|
||||||
}
|
|
||||||
gradle {
|
gradle {
|
||||||
name = "Calculate new dev version"
|
tasks = "clean publishPlugin"
|
||||||
tasks = "scripts:calculateNewDevVersion"
|
buildFile = ""
|
||||||
}
|
enableStacktrace = true
|
||||||
gradle {
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
name = "Set TeamCity build number"
|
|
||||||
tasks = "scripts:setTeamCityBuildNumber"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
tasks = "publishPlugin"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,27 +47,9 @@ object ReleaseDev : IdeaVimBuildType({
|
|||||||
schedule {
|
schedule {
|
||||||
enabled = true
|
enabled = true
|
||||||
schedulingPolicy = daily {
|
schedulingPolicy = daily {
|
||||||
hour = 2
|
hour = 22
|
||||||
}
|
}
|
||||||
branchFilter = ""
|
branchFilter = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
features {
|
|
||||||
sshAgent {
|
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
|
||||||
threshold = 5
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
102
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
102
.teamcity/_Self/buildTypes/ReleaseEap.kt
vendored
@@ -1,117 +1,61 @@
|
|||||||
package _Self.buildTypes
|
package _Self.buildTypes
|
||||||
|
|
||||||
import _Self.Constants.EAP_CHANNEL
|
import _Self.Constants.EAP
|
||||||
import _Self.Constants.RELEASE_EAP
|
import _Self.Constants.VERSION
|
||||||
import _Self.IdeaVimBuildType
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.vcsLabeling
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.ScheduleTrigger
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.schedule
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
|
|
||||||
object ReleaseEap : IdeaVimBuildType({
|
object ReleaseEap : BuildType({
|
||||||
name = "Publish EAP Build"
|
name = "Publish EAP Build"
|
||||||
description = "Build and publish EAP of IdeaVim plugin"
|
description = "Build and publish EAP of IdeaVim plugin"
|
||||||
|
|
||||||
artifactRules = "build/distributions/*"
|
artifactRules = "build/distributions/*"
|
||||||
|
buildNumberPattern = "$VERSION.%build.counter%"
|
||||||
|
|
||||||
params {
|
params {
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "2020.2")
|
||||||
password(
|
password(
|
||||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||||
label = "Password"
|
label = "Password"
|
||||||
)
|
)
|
||||||
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
|
param("env.ORG_GRADLE_PROJECT_publishUsername", "Aleksei.Plate")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP)
|
||||||
password(
|
password(
|
||||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
"env.ORG_GRADLE_PROJECT_slackUrl",
|
||||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
||||||
label = "Slack Token"
|
label = "Slack Token"
|
||||||
)
|
)
|
||||||
password(
|
|
||||||
"env.YOUTRACK_TOKEN",
|
|
||||||
"credentialsJSON:2479995b-7b60-4fbb-b095-f0bafae7f622",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vcs {
|
vcs {
|
||||||
root(DslContext.settingsRoot)
|
root(DslContext.settingsRoot)
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
}
|
}
|
||||||
|
|
||||||
steps {
|
steps {
|
||||||
script {
|
|
||||||
name = "Pull git tags"
|
|
||||||
scriptContent = "git fetch --tags origin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Pull git history"
|
|
||||||
scriptContent = "git fetch --unshallow"
|
|
||||||
}
|
|
||||||
gradle {
|
gradle {
|
||||||
name = "Calculate new eap version"
|
tasks = "clean publishPlugin slackEapNotification"
|
||||||
tasks = "scripts:calculateNewEapVersion"
|
buildFile = ""
|
||||||
}
|
enableStacktrace = true
|
||||||
gradle {
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
name = "Set TeamCity build number"
|
|
||||||
tasks = "scripts:setTeamCityBuildNumber"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Add release tag"
|
|
||||||
tasks = "scripts:addReleaseTag"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Publish plugin"
|
|
||||||
tasks = "publishPlugin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Push changes to the repo"
|
|
||||||
scriptContent = """
|
|
||||||
branch=$(git branch --show-current)
|
|
||||||
echo current branch is ${'$'}branch
|
|
||||||
if [ "master" != "${'$'}branch" ];
|
|
||||||
then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
git push origin %build.number%
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "YouTrack post release actions"
|
|
||||||
tasks = "scripts:eapReleaseActions"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
features {
|
features {
|
||||||
sshAgent {
|
vcsLabeling {
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
vcsRootId = "${DslContext.settingsRoot.id}"
|
||||||
|
labelingPattern = "%system.build.number%-EAP"
|
||||||
|
successfulOnly = true
|
||||||
|
branchFilter = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
|
||||||
threshold = 5
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
requirements {
|
|
||||||
// These requirements define Linux-XLarge configuration.
|
|
||||||
// Unfortunately, requirement by name (teamcity.agent.name) doesn't work
|
|
||||||
// IDK the reason for it, but on our agents this property is empty
|
|
||||||
// equals("teamcity.agent.hardware.cpuCount", "16")
|
|
||||||
// equals("teamcity.agent.os.family", "Linux")
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
106
.teamcity/_Self/buildTypes/ReleaseEapFromBranch.kt
vendored
106
.teamcity/_Self/buildTypes/ReleaseEapFromBranch.kt
vendored
@@ -1,106 +0,0 @@
|
|||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.Constants.EAP_CHANNEL
|
|
||||||
import _Self.Constants.RELEASE_EAP
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import _Self.vcsRoots.ReleasesVcsRoot
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
|
|
||||||
object ReleaseEapFromBranch : IdeaVimBuildType({
|
|
||||||
name = "EXP: Publish EAP Build from branch"
|
|
||||||
description = "Build and publish EAP of IdeaVim plugin"
|
|
||||||
|
|
||||||
artifactRules = "build/distributions/*"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE_EAP)
|
|
||||||
password(
|
|
||||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
|
||||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
|
||||||
label = "Password"
|
|
||||||
)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_publishChannels", EAP_CHANNEL)
|
|
||||||
password(
|
|
||||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
|
||||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
|
||||||
label = "Slack Token"
|
|
||||||
)
|
|
||||||
password(
|
|
||||||
"env.YOUTRACK_TOKEN",
|
|
||||||
"credentialsJSON:2479995b-7b60-4fbb-b095-f0bafae7f622",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(ReleasesVcsRoot)
|
|
||||||
branchFilter = """
|
|
||||||
+:heads/(releases/*)
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
name = "Pull git tags"
|
|
||||||
scriptContent = "git fetch --tags origin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Pull git history"
|
|
||||||
scriptContent = "git fetch --unshallow"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Calculate new eap version from branch"
|
|
||||||
tasks = "scripts:calculateNewEapVersionFromBranch"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Set TeamCity build number"
|
|
||||||
tasks = "scripts:setTeamCityBuildNumber"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Add release tag"
|
|
||||||
tasks = "scripts:addReleaseTag"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Publish plugin"
|
|
||||||
tasks = "publishPlugin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Push changes to the repo"
|
|
||||||
scriptContent = """
|
|
||||||
branch=$(git branch --show-current)
|
|
||||||
echo current branch is ${'$'}branch
|
|
||||||
git push origin %build.number%
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "YouTrack post release actions"
|
|
||||||
tasks = "scripts:eapReleaseActions"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
sshAgent {
|
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.ARTIFACT_SIZE
|
|
||||||
threshold = 5
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.DIFF
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
160
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
160
.teamcity/_Self/buildTypes/ReleasePlugin.kt
vendored
@@ -1,160 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.Constants.DEFAULT_CHANNEL
|
|
||||||
import _Self.Constants.DEV_CHANNEL
|
|
||||||
import _Self.Constants.EAP_CHANNEL
|
|
||||||
import _Self.Constants.RELEASE
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.sshAgent
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
|
|
||||||
|
|
||||||
object ReleaseMajor : ReleasePlugin("major")
|
|
||||||
object ReleaseMinor : ReleasePlugin("minor")
|
|
||||||
object ReleasePatch : ReleasePlugin("patch")
|
|
||||||
|
|
||||||
sealed class ReleasePlugin(private val releaseType: String) : IdeaVimBuildType({
|
|
||||||
name = "Publish $releaseType release"
|
|
||||||
description = "Build and publish IdeaVim plugin"
|
|
||||||
|
|
||||||
artifactRules = "build/distributions/*"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", RELEASE)
|
|
||||||
password(
|
|
||||||
"env.ORG_GRADLE_PROJECT_publishToken",
|
|
||||||
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
|
||||||
label = "Password"
|
|
||||||
)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT_CHANNEL,$EAP_CHANNEL,$DEV_CHANNEL")
|
|
||||||
password(
|
|
||||||
"env.ORG_GRADLE_PROJECT_slackUrl",
|
|
||||||
"credentialsJSON:a8ab8150-e6f8-4eaf-987c-bcd65eac50b5",
|
|
||||||
label = "Slack Token"
|
|
||||||
)
|
|
||||||
password(
|
|
||||||
"env.ORG_GRADLE_PROJECT_youtrackToken",
|
|
||||||
"credentialsJSON:7bc0eb3a-b86a-4ebd-b622-d4ef12d7e1d3",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_releaseType", releaseType)
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:<default>"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
name = "Pull git tags"
|
|
||||||
scriptContent = "git fetch --tags origin"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Pull git history"
|
|
||||||
scriptContent = "git fetch --unshallow"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Reset release branch"
|
|
||||||
scriptContent = """
|
|
||||||
if [ "major" = "$releaseType" ] || [ "minor" = "$releaseType" ]
|
|
||||||
then
|
|
||||||
echo Resetting the release branch because the release type is $releaseType
|
|
||||||
git checkout master
|
|
||||||
latest_eap=${'$'}(git describe --tags --match="[0-9].[0-9]*.[0-9]-eap.[0-9]*" --abbrev=0 HEAD)
|
|
||||||
echo Latest EAP: ${'$'}latest_eap
|
|
||||||
commit_of_latest_eap=${'$'}(git rev-list -n 1 ${'$'}latest_eap)
|
|
||||||
echo Commit of latest EAP: ${'$'}commit_of_latest_eap
|
|
||||||
git checkout release
|
|
||||||
git reset --hard ${'$'}commit_of_latest_eap
|
|
||||||
else
|
|
||||||
git checkout release
|
|
||||||
echo Do not reset the release branch because the release type is $releaseType
|
|
||||||
fi
|
|
||||||
echo Checked out release branch
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Calculate new version"
|
|
||||||
tasks = "scripts:calculateNewVersion"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Set TeamCity build number"
|
|
||||||
tasks = "scripts:setTeamCityBuildNumber"
|
|
||||||
}
|
|
||||||
// gradle {
|
|
||||||
// name = "Update change log"
|
|
||||||
// tasks = "scripts:changelogUpdateUnreleased"
|
|
||||||
// }
|
|
||||||
// gradle {
|
|
||||||
// name = "Commit preparation changes"
|
|
||||||
// tasks = "scripts:commitChanges"
|
|
||||||
// }
|
|
||||||
gradle {
|
|
||||||
name = "Add release tag"
|
|
||||||
tasks = "scripts:addReleaseTag"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
name = "Run tests"
|
|
||||||
scriptContent = "./gradlew test"
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Publish release"
|
|
||||||
tasks = "publishPlugin"
|
|
||||||
}
|
|
||||||
// script {
|
|
||||||
// name = "Checkout master branch"
|
|
||||||
// scriptContent = """
|
|
||||||
// echo Checkout master
|
|
||||||
// git checkout master
|
|
||||||
// """.trimIndent()
|
|
||||||
// }
|
|
||||||
// gradle {
|
|
||||||
// name = "Update change log in master"
|
|
||||||
// tasks = "scripts:changelogUpdateUnreleased"
|
|
||||||
// }
|
|
||||||
// gradle {
|
|
||||||
// name = "Commit preparation changes in master"
|
|
||||||
// tasks = "scripts:commitChanges"
|
|
||||||
// }
|
|
||||||
script {
|
|
||||||
name = "Push changes to the repo"
|
|
||||||
scriptContent = """
|
|
||||||
git checkout release
|
|
||||||
echo checkout release branch
|
|
||||||
git branch --set-upstream-to=origin/release release
|
|
||||||
git push origin --force
|
|
||||||
# Push tag
|
|
||||||
git push origin %build.number%
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
gradle {
|
|
||||||
name = "Run Integrations"
|
|
||||||
tasks = "releaseActions"
|
|
||||||
gradleParams = "--no-configuration-cache"
|
|
||||||
}
|
|
||||||
// gradle {
|
|
||||||
// name = "Slack Notification"
|
|
||||||
// tasks = "slackNotification"
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
sshAgent {
|
|
||||||
teamcitySshKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
45
.teamcity/_Self/buildTypes/Release_201.kt
vendored
Normal file
45
.teamcity/_Self/buildTypes/Release_201.kt
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import _Self.Constants.DEFAULT
|
||||||
|
import _Self.Constants.DEV
|
||||||
|
import _Self.Constants.EAP
|
||||||
|
import _Self.Constants.VERSION
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
|
||||||
|
object Release_201 : BuildType({
|
||||||
|
name = "Publish Release 2020.1"
|
||||||
|
description = "Build and publish IdeaVim plugin"
|
||||||
|
|
||||||
|
artifactRules = "build/distributions/*"
|
||||||
|
buildNumberPattern = "$VERSION-2020.1"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "2020.1")
|
||||||
|
password(
|
||||||
|
"env.ORG_GRADLE_PROJECT_publishToken",
|
||||||
|
"credentialsJSON:61a36031-4da1-4226-a876-b8148bf32bde",
|
||||||
|
label = "Password"
|
||||||
|
)
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishUsername", "Aleksei.Plate")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_version", "%build.number%")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_publishChannels", "$DEFAULT,$EAP,$DEV")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.Branch_201)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean publishPlugin"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
72
.teamcity/_Self/buildTypes/TestingBuildType.kt
vendored
72
.teamcity/_Self/buildTypes/TestingBuildType.kt
vendored
@@ -1,72 +0,0 @@
|
|||||||
@file:Suppress("ClassName")
|
|
||||||
|
|
||||||
package _Self.buildTypes
|
|
||||||
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.DslContext
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.BuildFailureOnMetric
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.failureConditions.failOnMetricChange
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
|
|
||||||
open class TestingBuildType(
|
|
||||||
private val testName: String,
|
|
||||||
private val branch: String,
|
|
||||||
private val version: String = testName,
|
|
||||||
private val javaVersion: String? = null,
|
|
||||||
private val javaPlugin: Boolean = true,
|
|
||||||
) : IdeaVimBuildType({
|
|
||||||
id("IdeaVimTests_${testName.vanish()}")
|
|
||||||
name = "Tests for IntelliJ $testName"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", javaPlugin.not().toString())
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", version)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
|
||||||
if (javaVersion != null) {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_javaVersion", javaVersion)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(DslContext.settingsRoot)
|
|
||||||
branchFilter = "+:$branch"
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
gradle {
|
|
||||||
tasks = "clean test"
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
vcs {
|
|
||||||
branchFilter = "+:$branch"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
failureConditions {
|
|
||||||
failOnMetricChange {
|
|
||||||
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
|
|
||||||
threshold = 20
|
|
||||||
units = BuildFailureOnMetric.MetricUnit.PERCENTS
|
|
||||||
comparison = BuildFailureOnMetric.MetricComparison.LESS
|
|
||||||
compareTo = build {
|
|
||||||
buildRule = lastSuccessful()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
private fun String.vanish(): String {
|
|
||||||
return this
|
|
||||||
.replace(' ', '_')
|
|
||||||
.replace('.', '_')
|
|
||||||
.replace('-', '_')
|
|
||||||
}
|
|
44
.teamcity/_Self/buildTypes/TestsForIntelliJ20183.kt
vendored
Normal file
44
.teamcity/_Self/buildTypes/TestsForIntelliJ20183.kt
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
object TestsForIntelliJ20183 : BuildType({
|
||||||
|
name = "Tests for IntelliJ 2018.3"
|
||||||
|
description = "branch 183"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-2018.3")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.Branch_183)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean test"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
47
.teamcity/_Self/buildTypes/TestsForIntelliJ_181-182.kt
vendored
Normal file
47
.teamcity/_Self/buildTypes/TestsForIntelliJ_181-182.kt
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
sealed class TestsForIntelliJ_181_branch(private val version: String) : BuildType({
|
||||||
|
name = "Tests for IntelliJ $version"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.Branch_181)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean test"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
object TestsForIntelliJ20181 : TestsForIntelliJ_181_branch("2018.1")
|
||||||
|
object TestsForIntelliJ20182 : TestsForIntelliJ_181_branch("2018.2")
|
49
.teamcity/_Self/buildTypes/TestsForIntelliJ_191-193.kt
vendored
Normal file
49
.teamcity/_Self/buildTypes/TestsForIntelliJ_191-193.kt
vendored
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
sealed class TestsForIntelliJ_191_193_branch(private val version: String) : BuildType({
|
||||||
|
name = "Tests for IntelliJ $version"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_legacyNoJavaPlugin", "true")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.Branch_191_193)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean test"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
object TestsForIntelliJ20191 : TestsForIntelliJ_191_193_branch("2019.1")
|
||||||
|
object TestsForIntelliJ20192 : TestsForIntelliJ_191_193_branch("2019.2")
|
||||||
|
object TestsForIntelliJ20193 : TestsForIntelliJ_191_193_branch("2019.3")
|
46
.teamcity/_Self/buildTypes/TestsForIntelliJ_201.kt
vendored
Normal file
46
.teamcity/_Self/buildTypes/TestsForIntelliJ_201.kt
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.buildTypes
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.BuildType
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
||||||
|
|
||||||
|
sealed class TestsForIntelliJ_201_branch(private val version: String) : BuildType({
|
||||||
|
name = "Tests for IntelliJ $version"
|
||||||
|
|
||||||
|
params {
|
||||||
|
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_ideaVersion", "IC-$version")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
||||||
|
param("env.ORG_GRADLE_PROJECT_javaVersion", "1.8")
|
||||||
|
}
|
||||||
|
|
||||||
|
vcs {
|
||||||
|
root(_Self.vcsRoots.Branch_201)
|
||||||
|
|
||||||
|
checkoutMode = CheckoutMode.ON_SERVER
|
||||||
|
}
|
||||||
|
|
||||||
|
steps {
|
||||||
|
gradle {
|
||||||
|
tasks = "clean test"
|
||||||
|
buildFile = ""
|
||||||
|
enableStacktrace = true
|
||||||
|
param("org.jfrog.artifactory.selectedDeployableServer.defaultModuleVersionConfiguration", "GLOBAL")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
triggers {
|
||||||
|
vcs {
|
||||||
|
branchFilter = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
requirements {
|
||||||
|
noLessThanVer("teamcity.agent.jvm.version", "1.8")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
object TestsForIntelliJ20201 : TestsForIntelliJ_201_branch("2020.1")
|
78
.teamcity/_Self/subprojects/GitHub.kt
vendored
78
.teamcity/_Self/subprojects/GitHub.kt
vendored
@@ -1,78 +0,0 @@
|
|||||||
package _Self.subprojects
|
|
||||||
|
|
||||||
import _Self.Constants
|
|
||||||
import _Self.IdeaVimBuildType
|
|
||||||
import _Self.vcsRoots.GitHubPullRequest
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.CheckoutMode
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.PullRequests
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.commitStatusPublisher
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildFeatures.pullRequests
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.VcsTrigger
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
|
|
||||||
|
|
||||||
object GitHub : Project({
|
|
||||||
name = "Pull Requests checks"
|
|
||||||
description = "Automatic checking of GitHub Pull Requests"
|
|
||||||
|
|
||||||
buildType(GithubBuildType("clean test", "Tests"))
|
|
||||||
})
|
|
||||||
|
|
||||||
class GithubBuildType(command: String, desc: String) : IdeaVimBuildType({
|
|
||||||
name = "GitHub Pull Requests $desc"
|
|
||||||
description = "Test GitHub pull requests $desc"
|
|
||||||
|
|
||||||
params {
|
|
||||||
param("env.ORG_GRADLE_PROJECT_downloadIdeaSources", "false")
|
|
||||||
param("env.ORG_GRADLE_PROJECT_ideaVersion", Constants.GITHUB_TESTS)
|
|
||||||
param("env.ORG_GRADLE_PROJECT_instrumentPluginCode", "false")
|
|
||||||
}
|
|
||||||
|
|
||||||
vcs {
|
|
||||||
root(GitHubPullRequest)
|
|
||||||
|
|
||||||
checkoutMode = CheckoutMode.AUTO
|
|
||||||
branchFilter = """
|
|
||||||
+:*
|
|
||||||
-:<default>
|
|
||||||
""".trimIndent()
|
|
||||||
}
|
|
||||||
|
|
||||||
steps {
|
|
||||||
gradle {
|
|
||||||
tasks = command
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
triggers {
|
|
||||||
vcs {
|
|
||||||
quietPeriodMode = VcsTrigger.QuietPeriodMode.USE_DEFAULT
|
|
||||||
branchFilter = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
features {
|
|
||||||
pullRequests {
|
|
||||||
provider = github {
|
|
||||||
authType = token {
|
|
||||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
|
||||||
}
|
|
||||||
filterTargetBranch = "refs/heads/master"
|
|
||||||
filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commitStatusPublisher {
|
|
||||||
vcsRootExtId = "${GitHubPullRequest.id}"
|
|
||||||
publisher = github {
|
|
||||||
githubUrl = "https://api.github.com"
|
|
||||||
authType = personalToken {
|
|
||||||
token = "credentialsJSON:90f3b439-6e91-40f7-a086-d4dd8e0ea9b8"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
param("github_oauth_user", "AlexPl292")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
30
.teamcity/_Self/subprojects/OldTests.kt
vendored
30
.teamcity/_Self/subprojects/OldTests.kt
vendored
@@ -1,25 +1,23 @@
|
|||||||
package _Self.subprojects
|
package _Self.subprojects
|
||||||
|
|
||||||
import _Self.buildTypes.TestingBuildType
|
import _Self.buildTypes.TestsForIntelliJ20181
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20182
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20183
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20191
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20192
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20193
|
||||||
|
import _Self.buildTypes.TestsForIntelliJ20201
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
|
||||||
object OldTests : Project({
|
object OldTests : Project({
|
||||||
name = "Old IdeaVim tests"
|
name = "Old IdeaVim tests"
|
||||||
description = "Tests for older versions of IJ"
|
description = "Tests for older versions of IJ"
|
||||||
|
|
||||||
buildType(TestingBuildType("IC-2018.1", "181-182", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20201)
|
||||||
buildType(TestingBuildType("IC-2018.2", "181-182", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20191)
|
||||||
buildType(TestingBuildType("IC-2018.3", "183", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20181)
|
||||||
buildType(TestingBuildType("IC-2019.1", "191-193", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20192)
|
||||||
buildType(TestingBuildType("IC-2019.2", "191-193", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20182)
|
||||||
buildType(TestingBuildType("IC-2019.3", "191-193", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20193)
|
||||||
buildType(TestingBuildType("IC-2020.1", "201", javaVersion = "1.8", javaPlugin = false))
|
buildType(TestsForIntelliJ20183)
|
||||||
buildType(TestingBuildType("IC-2020.2", "202", javaVersion = "1.8", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2020.3", "203-212", javaVersion = "1.8", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2021.1", "203-212", javaVersion = "1.8", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2021.2.2", "203-212", javaVersion = "1.8", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2021.3.2", "213-221", javaVersion = "1.8", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2022.2.3", branch = "222", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2023.1", "231-232", javaPlugin = false))
|
|
||||||
buildType(TestingBuildType("IC-2023.2", "231-232", javaPlugin = false))
|
|
||||||
})
|
})
|
||||||
|
39
.teamcity/_Self/subprojects/Releases.kt
vendored
39
.teamcity/_Self/subprojects/Releases.kt
vendored
@@ -1,48 +1,17 @@
|
|||||||
package _Self.subprojects
|
package _Self.subprojects
|
||||||
|
|
||||||
import _Self.buildTypes.CreateNewReleaseBranchFromMaster
|
import _Self.buildTypes.Release
|
||||||
import _Self.buildTypes.PrintReleaseBranch
|
|
||||||
import _Self.buildTypes.PublishVimEngine
|
|
||||||
import _Self.buildTypes.ReleaseDev
|
import _Self.buildTypes.ReleaseDev
|
||||||
import _Self.buildTypes.ReleaseEap
|
import _Self.buildTypes.ReleaseEap
|
||||||
import _Self.buildTypes.ReleaseEapFromBranch
|
import _Self.buildTypes.Release_201
|
||||||
import _Self.buildTypes.ReleaseMajor
|
|
||||||
import _Self.buildTypes.ReleaseMinor
|
|
||||||
import _Self.buildTypes.ReleasePatch
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ParameterDisplay
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
|
||||||
object Releases : Project({
|
object Releases : Project({
|
||||||
name = "IdeaVim releases"
|
name = "IdeaVim releases"
|
||||||
description = "Stable and EAP releases for IdeaVim"
|
description = "Stable and EAP releases for IdeaVim"
|
||||||
|
|
||||||
params {
|
buildType(Release)
|
||||||
password(
|
buildType(Release_201)
|
||||||
"env.CERTIFICATE_CHAIN",
|
|
||||||
"credentialsJSON:1bab4a88-10e7-4bf9-856c-e6253499dc95",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
password(
|
|
||||||
"env.PRIVATE_KEY_PASSWORD",
|
|
||||||
"credentialsJSON:7c12c867-fe09-4a2f-884d-6fd0ec0a1e79",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
password(
|
|
||||||
"env.PRIVATE_KEY",
|
|
||||||
"credentialsJSON:5d8b553d-fd7e-4347-abd2-51d8d0f2b3f7",
|
|
||||||
display = ParameterDisplay.HIDDEN
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// buildType(Release)
|
|
||||||
buildType(ReleaseMajor)
|
|
||||||
buildType(ReleaseMinor)
|
|
||||||
buildType(ReleasePatch)
|
|
||||||
buildType(ReleaseEap)
|
buildType(ReleaseEap)
|
||||||
buildType(ReleaseDev)
|
buildType(ReleaseDev)
|
||||||
buildType(PublishVimEngine)
|
|
||||||
|
|
||||||
buildType(CreateNewReleaseBranchFromMaster)
|
|
||||||
buildType(PrintReleaseBranch)
|
|
||||||
buildType(ReleaseEapFromBranch)
|
|
||||||
})
|
})
|
||||||
|
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_181.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.vcsRoots
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||||
|
|
||||||
|
object Branch_181 : GitVcsRoot({
|
||||||
|
name = "https://github.com/JetBrains/ideavim (branch 181)"
|
||||||
|
url = "https://github.com/JetBrains/ideavim.git"
|
||||||
|
branch = "181"
|
||||||
|
useMirrors = false
|
||||||
|
})
|
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_183.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.vcsRoots
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||||
|
|
||||||
|
object Branch_183 : GitVcsRoot({
|
||||||
|
name = "https://github.com/JetBrains/ideavim (branch 183)"
|
||||||
|
url = "https://github.com/JetBrains/ideavim.git"
|
||||||
|
branch = "183"
|
||||||
|
useMirrors = false
|
||||||
|
})
|
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_191_193.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.vcsRoots
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||||
|
|
||||||
|
object Branch_191_193 : GitVcsRoot({
|
||||||
|
name = "https://github.com/JetBrains/ideavim (branch 191-193)"
|
||||||
|
url = "https://github.com/JetBrains/ideavim.git"
|
||||||
|
branch = "191-193"
|
||||||
|
useMirrors = false
|
||||||
|
})
|
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
Normal file
12
.teamcity/_Self/vcsRoots/Branch_201.kt
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@file:Suppress("ClassName")
|
||||||
|
|
||||||
|
package _Self.vcsRoots
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
||||||
|
|
||||||
|
object Branch_201 : GitVcsRoot({
|
||||||
|
name = "https://github.com/JetBrains/ideavim (branch 201)"
|
||||||
|
url = "https://github.com/JetBrains/ideavim.git"
|
||||||
|
branch = "201"
|
||||||
|
useMirrors = false
|
||||||
|
})
|
@@ -7,6 +7,6 @@ object GitHubPullRequest : GitVcsRoot({
|
|||||||
url = "git@github.com:JetBrains/ideavim.git"
|
url = "git@github.com:JetBrains/ideavim.git"
|
||||||
branchSpec = "+:refs/(pull/*)/head"
|
branchSpec = "+:refs/(pull/*)/head"
|
||||||
authMethod = uploadedKey {
|
authMethod = uploadedKey {
|
||||||
uploadedKey = "IdeaVim ssh keys"
|
uploadedKey = "Alex Plate TeamCity key"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
13
.teamcity/_Self/vcsRoots/Releases.kt
vendored
13
.teamcity/_Self/vcsRoots/Releases.kt
vendored
@@ -1,13 +0,0 @@
|
|||||||
package _Self.vcsRoots
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.vcs.GitVcsRoot
|
|
||||||
|
|
||||||
object ReleasesVcsRoot : GitVcsRoot({
|
|
||||||
name = "IdeaVim Releases"
|
|
||||||
url = "git@github.com:JetBrains/ideavim.git"
|
|
||||||
branch = "refs/heads/master"
|
|
||||||
branchSpec = "+:refs/(*)"
|
|
||||||
authMethod = uploadedKey {
|
|
||||||
uploadedKey = "IdeaVim ssh keys"
|
|
||||||
}
|
|
||||||
})
|
|
@@ -1,39 +0,0 @@
|
|||||||
package patches.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.GradleBuildStep
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.gradle
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
|
||||||
|
|
||||||
/*
|
|
||||||
This patch script was generated by TeamCity on settings change in UI.
|
|
||||||
To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP'
|
|
||||||
accordingly, and delete the patch script.
|
|
||||||
*/
|
|
||||||
changeBuildType(RelativeId("IdeaVimTests_Latest_EAP")) {
|
|
||||||
check(artifactRules == """
|
|
||||||
+:build/reports => build/reports
|
|
||||||
+:/mnt/agent/temp/buildTmp/ => /mnt/agent/temp/buildTmp/
|
|
||||||
""".trimIndent()) {
|
|
||||||
"Unexpected option value: artifactRules = $artifactRules"
|
|
||||||
}
|
|
||||||
artifactRules = """
|
|
||||||
+:build/reports => build/reports
|
|
||||||
+:/mnt/agent/temp/buildTmp/ => /mnt/agent/temp/buildTmp/
|
|
||||||
+:tests/java-tests/build/reports => tests/java-tests/build/reports
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
expectSteps {
|
|
||||||
gradle {
|
|
||||||
tasks = "clean test"
|
|
||||||
buildFile = ""
|
|
||||||
enableStacktrace = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
update<GradleBuildStep>(0) {
|
|
||||||
clearConditions()
|
|
||||||
jdkHome = "/usr/lib/jvm/java-17-amazon-corretto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,20 +0,0 @@
|
|||||||
package patches.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
|
||||||
|
|
||||||
/*
|
|
||||||
This patch script was generated by TeamCity on settings change in UI.
|
|
||||||
To apply the patch, change the buildType with id = 'IdeaVimTests_Latest_EAP_With_Xorg'
|
|
||||||
accordingly, and delete the patch script.
|
|
||||||
*/
|
|
||||||
changeBuildType(RelativeId("IdeaVimTests_Latest_EAP_With_Xorg")) {
|
|
||||||
requirements {
|
|
||||||
add {
|
|
||||||
matches("teamcity.agent.jvm.os.family", "Linux")
|
|
||||||
}
|
|
||||||
add {
|
|
||||||
exists("env.DISPLAY")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,19 +0,0 @@
|
|||||||
package patches.buildTypes
|
|
||||||
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
|
||||||
|
|
||||||
/*
|
|
||||||
This patch script was generated by TeamCity on settings change in UI.
|
|
||||||
To apply the patch, change the buildType with id = 'ReleaseEapFromBranch'
|
|
||||||
accordingly, and delete the patch script.
|
|
||||||
*/
|
|
||||||
changeBuildType(RelativeId("ReleaseEapFromBranch")) {
|
|
||||||
vcs {
|
|
||||||
|
|
||||||
check(branchFilter == "+:heads/(releases/*)") {
|
|
||||||
"Unexpected option value: branchFilter = $branchFilter"
|
|
||||||
}
|
|
||||||
branchFilter = "heads/releases/*"
|
|
||||||
}
|
|
||||||
}
|
|
68
.teamcity/patches/projects/_Self.kts
vendored
Normal file
68
.teamcity/patches/projects/_Self.kts
vendored
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package patches.projects
|
||||||
|
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.ProjectFeature
|
||||||
|
import jetbrains.buildServer.configs.kotlin.v2019_2.ui.*
|
||||||
|
|
||||||
|
/*
|
||||||
|
This patch script was generated by TeamCity on settings change in UI.
|
||||||
|
To apply the patch, change the root project
|
||||||
|
accordingly, and delete the patch script.
|
||||||
|
*/
|
||||||
|
changeProject(DslContext.projectId) {
|
||||||
|
features {
|
||||||
|
val feature1 = find<ProjectFeature> {
|
||||||
|
feature {
|
||||||
|
type = "CloudImage"
|
||||||
|
id = "PROJECT_EXT_768"
|
||||||
|
param("agent_pool_id", "41")
|
||||||
|
param("amazon-id", "ami-0d1a6a32faa92923e")
|
||||||
|
param("ebs-optimized", "false")
|
||||||
|
param("image-instances-limit", "")
|
||||||
|
param("image-name-prefix", "BuildAgentsIdeaVim")
|
||||||
|
param("instance-type", "c5d.xlarge")
|
||||||
|
param("key-pair-name", "teamcity-prod-pub")
|
||||||
|
param("profileId", "amazon-48")
|
||||||
|
param("security-group-ids", "sg-eda08696,sg-7332cf0f,")
|
||||||
|
param("source-id", "BuildAgentsIdeaVim")
|
||||||
|
param("spot-instance-price", "0.12")
|
||||||
|
param("subnet-id", "subnet-58839511")
|
||||||
|
param("use-spot-instances", "true")
|
||||||
|
param("user-tags", "project=idea-vim")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
feature1.apply {
|
||||||
|
param("spot-instance-price", "")
|
||||||
|
param("key-pair-name", "")
|
||||||
|
}
|
||||||
|
val feature2 = find<ProjectFeature> {
|
||||||
|
feature {
|
||||||
|
type = "CloudProfile"
|
||||||
|
id = "amazon-48"
|
||||||
|
param("agentPushPreset", "")
|
||||||
|
param("cloud-code", "amazon")
|
||||||
|
param("description", "")
|
||||||
|
param("enabled", "true")
|
||||||
|
param("max-running-instances", "10")
|
||||||
|
param("name", "Cloud Agents")
|
||||||
|
param("next-hour", "")
|
||||||
|
param("not-checked", "")
|
||||||
|
param("profileId", "amazon-48")
|
||||||
|
param("profileServerUrl", "")
|
||||||
|
param("region", "eu-west-1")
|
||||||
|
param("secure:access-id", "credentialsJSON:dbcdb2a2-de5f-4bc9-9421-292b19e83947")
|
||||||
|
param("secure:secret-key", "credentialsJSON:65a87fe7-0977-4af9-96f1-344f2b82d269")
|
||||||
|
param("system.cloud.profile_id", "amazon-48")
|
||||||
|
param("terminate-idle-time", "15")
|
||||||
|
param("total-work-time", "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
feature2.apply {
|
||||||
|
param("user-script", "")
|
||||||
|
param("spot-fleet-config", "")
|
||||||
|
param("terminate-after-build", "true")
|
||||||
|
param("name", "Cloud Agents - Single Build")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
.teamcity/pom.xml
vendored
2
.teamcity/pom.xml
vendored
@@ -22,7 +22,7 @@
|
|||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>teamcity-server</id>
|
<id>teamcity-server</id>
|
||||||
<url>https://ideavim.teamcity.com/app/dsl-plugins-repository</url>
|
<url>https://teamcity.jetbrains.com/app/dsl-plugins-repository</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
7
.teamcity/settings.kts
vendored
7
.teamcity/settings.kts
vendored
@@ -1,5 +1,4 @@
|
|||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.project
|
import jetbrains.buildServer.configs.kotlin.v2019_2.*
|
||||||
import jetbrains.buildServer.configs.kotlin.v2019_2.version
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The settings script is an entry point for defining a single
|
The settings script is an entry point for defining a single
|
||||||
@@ -30,5 +29,5 @@ node (Plugins -> teamcity-configs -> teamcity-configs:generate),
|
|||||||
the 'Debug' option is available in the context menu for the task.
|
the 'Debug' option is available in the context menu for the task.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
version = "2024.03"
|
version = "2020.2"
|
||||||
project(_Self.Project)
|
project(_Self.Project)
|
249
AUTHORS.md
249
AUTHORS.md
@@ -32,48 +32,16 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/yole)
|
[![icon][github]](https://github.com/yole)
|
||||||
|
|
||||||
Dmitry Jemerov
|
Dmitry Jemerov
|
||||||
* [![icon][mail]](mailto:tony.kay@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/awkay)
|
|
||||||
|
|
||||||
Tony Kay
|
|
||||||
* [![icon][mail]](mailto:jamescmartinez@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/jamescmartinez)
|
|
||||||
|
|
||||||
James Martinez
|
|
||||||
* [![icon][mail]](mailto:almas337519@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/strogiyotec)
|
|
||||||
|
|
||||||
strogiyotec
|
|
||||||
* [![icon][mail]](mailto:raimon49@hotmail.com)
|
|
||||||
[![icon][github]](https://github.com/raimon49)
|
|
||||||
|
|
||||||
raimon
|
|
||||||
* [![icon][mail]](mailto:agrsbm@gmail.com)
|
|
||||||
[![icon][github-off]](#)
|
|
||||||
|
|
||||||
Alexander Griesbaum
|
|
||||||
* [![icon][mail]](mailto:manwe64@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/baldrs)
|
|
||||||
|
|
||||||
Baldrs
|
|
||||||
* [![icon][mail]](mailto:yury@shurup.com)
|
|
||||||
[![icon][github]](https://github.com/zyv)
|
|
||||||
|
|
||||||
Yury V. Zaytsev
|
|
||||||
* [![icon][mail]](mailto:jflorian@doubledog.org)
|
|
||||||
[![icon][github]](https://github.com/jflorian)
|
|
||||||
|
|
||||||
John Florian
|
|
||||||
* [![icon][mail]](mailto:marquis@marquiswang.com)
|
* [![icon][mail]](mailto:marquis@marquiswang.com)
|
||||||
[![icon][github]](https://github.com/marquiswang)
|
[![icon][github]](https://github.com/marquiswang)
|
||||||
|
|
||||||
Marquis Wang
|
Marquis Wang
|
||||||
* [![icon][mail]](mailto:madgnome@gmail.com)
|
* [![icon][mail]](mailto:madgnome@gmail.com)
|
||||||
[![icon][github]](https://github.com/madgnome)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Julien Hoarau
|
Julien Hoarau
|
||||||
* [![icon][mail]](mailto:masanobu.imai@gmail.com)
|
* [![icon][mail]](mailto:masanobu.imai@gmail.com)
|
||||||
[![icon][github]](https://github.com/masanobuimai)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Masanobu Imai
|
Masanobu Imai
|
||||||
* [![icon][mail]](mailto:poxvuibr@gmail.com)
|
* [![icon][mail]](mailto:poxvuibr@gmail.com)
|
||||||
@@ -89,7 +57,7 @@ Contributors:
|
|||||||
|
|
||||||
John Lindquist
|
John Lindquist
|
||||||
* [![icon][mail]](mailto:iklotzko@ltech.com)
|
* [![icon][mail]](mailto:iklotzko@ltech.com)
|
||||||
[![icon][github]](https://github.com/iklotzko)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Ira Klotzko
|
Ira Klotzko
|
||||||
* [![icon][mail]](mailto:alex@selesse.com)
|
* [![icon][mail]](mailto:alex@selesse.com)
|
||||||
@@ -97,7 +65,7 @@ Contributors:
|
|||||||
|
|
||||||
Alex Selesse
|
Alex Selesse
|
||||||
* [![icon][mail]](mailto:dbennett@palantir.com)
|
* [![icon][mail]](mailto:dbennett@palantir.com)
|
||||||
[![icon][github]](https://github.com/dathanb)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Dathan Bennett
|
Dathan Bennett
|
||||||
* [![icon][mail]](mailto:kphayen@gmail.com)
|
* [![icon][mail]](mailto:kphayen@gmail.com)
|
||||||
@@ -109,11 +77,11 @@ Contributors:
|
|||||||
|
|
||||||
Alexey Shmalko
|
Alexey Shmalko
|
||||||
* [![icon][mail]](mailto:a.m.brookins@gmail.com)
|
* [![icon][mail]](mailto:a.m.brookins@gmail.com)
|
||||||
[![icon][github]](https://github.com/abrookins)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Andrew Brookins
|
Andrew Brookins
|
||||||
* [![icon][mail]](mailto:changwang83@gmail.com)
|
* [![icon][mail]](mailto:changwang83@gmail.com)
|
||||||
[![icon][github]](https://github.com/changwang)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Chang Wang
|
Chang Wang
|
||||||
* [![icon][mail]](mailto:josejaime.sanchez@gmail.com)
|
* [![icon][mail]](mailto:josejaime.sanchez@gmail.com)
|
||||||
@@ -121,19 +89,19 @@ Contributors:
|
|||||||
|
|
||||||
Jaime Sanchez
|
Jaime Sanchez
|
||||||
* [![icon][mail]](mailto:thomas@homburg.dk)
|
* [![icon][mail]](mailto:thomas@homburg.dk)
|
||||||
[![icon][github]](https://github.com/homburg)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Thomas B Homburg
|
Thomas B Homburg
|
||||||
* [![icon][mail]](mailto:smartbomb@server.fake)
|
* [![icon][mail]](mailto:smartbomb@server.fake)
|
||||||
[![icon][github]](https://github.com/smartbomb)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
smartbomb
|
smartbomb
|
||||||
* [![icon][mail]](mailto:tuomas.tynkkynen@iki.fi)
|
* [![icon][mail]](mailto:tuomas.tynkkynen@iki.fi)
|
||||||
[![icon][github]](https://github.com/dezgeg)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Tuomas Tynkkynen
|
Tuomas Tynkkynen
|
||||||
* [![icon][mail]](mailto:jackson@donorschoose.org)
|
* [![icon][mail]](mailto:jackson@donorschoose.org)
|
||||||
[![icon][github]](https://github.com/jdpopkin)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Jackson Popkin
|
Jackson Popkin
|
||||||
* [![icon][mail]](mailto:yuyuyu1999@gmail.com)
|
* [![icon][mail]](mailto:yuyuyu1999@gmail.com)
|
||||||
@@ -141,7 +109,7 @@ Contributors:
|
|||||||
|
|
||||||
Teruo Kunihiro
|
Teruo Kunihiro
|
||||||
* [![icon][mail]](mailto:lubashka.994@mail.ru)
|
* [![icon][mail]](mailto:lubashka.994@mail.ru)
|
||||||
[![icon][github]](https://github.com/lubba)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Liubov Paina
|
Liubov Paina
|
||||||
* [![icon][mail]](mailto:me@dhleong.net)
|
* [![icon][mail]](mailto:me@dhleong.net)
|
||||||
@@ -165,11 +133,11 @@ Contributors:
|
|||||||
|
|
||||||
Pavel Fatin
|
Pavel Fatin
|
||||||
* [![icon][mail]](mailto:tietyt@gmail.com)
|
* [![icon][mail]](mailto:tietyt@gmail.com)
|
||||||
[![icon][github-off]](https://github.com/DanKaplanSES)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
tieTYT
|
tieTYT
|
||||||
* [![icon][mail]](mailto:nickgieschen@gmail.com)
|
* [![icon][mail]](mailto:nickgieschen@gmail.com)
|
||||||
[![icon][github]](https://github.com/nickgieschen)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Nick Gieschen
|
Nick Gieschen
|
||||||
* [![icon][mail]](mailto:ikenox@gmail.com)
|
* [![icon][mail]](mailto:ikenox@gmail.com)
|
||||||
@@ -181,11 +149,11 @@ Contributors:
|
|||||||
|
|
||||||
Maximilian Luz
|
Maximilian Luz
|
||||||
* [![icon][mail]](mailto:vparfinenko@excelsior-usa.com)
|
* [![icon][mail]](mailto:vparfinenko@excelsior-usa.com)
|
||||||
[![icon][github]](https://github.com/cypok)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Vladimir Parfinenko
|
Vladimir Parfinenko
|
||||||
* [![icon][mail]](mailto:hassmann@hwdev.de)
|
* [![icon][mail]](mailto:hassmann@hwdev.de)
|
||||||
[![icon][github-off]](https://github.com/lumie1337)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Florian Hassmann
|
Florian Hassmann
|
||||||
* [![icon][mail]](mailto:jpalus@fastmail.com)
|
* [![icon][mail]](mailto:jpalus@fastmail.com)
|
||||||
@@ -193,7 +161,7 @@ Contributors:
|
|||||||
|
|
||||||
Jan Palus
|
Jan Palus
|
||||||
* [![icon][mail]](mailto:kpetrov@ripe.net)
|
* [![icon][mail]](mailto:kpetrov@ripe.net)
|
||||||
[![icon][github-off]](https://github.com/constpetrov)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Konstantin Petrov
|
Konstantin Petrov
|
||||||
* [![icon][mail]](mailto:ya-ikmik2012@yandex.ru)
|
* [![icon][mail]](mailto:ya-ikmik2012@yandex.ru)
|
||||||
@@ -220,8 +188,12 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/johngrib)
|
[![icon][github]](https://github.com/johngrib)
|
||||||
|
|
||||||
John Grib
|
John Grib
|
||||||
|
* [![icon][mail]](mailto:hild@b4mad.net)
|
||||||
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
|
Marcel Hild
|
||||||
* [![icon][mail]](mailto:vedranb@gmail.com)
|
* [![icon][mail]](mailto:vedranb@gmail.com)
|
||||||
[![icon][github]](https://github.com/vedran)
|
[![icon][github-off]](#)
|
||||||
|
|
||||||
Vedran Budimcic
|
Vedran Budimcic
|
||||||
* [![icon][mail]](mailto:andreigasparovici1@gmail.com)
|
* [![icon][mail]](mailto:andreigasparovici1@gmail.com)
|
||||||
@@ -236,13 +208,10 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/TonyArra)
|
[![icon][github]](https://github.com/TonyArra)
|
||||||
|
|
||||||
Tony Arra
|
Tony Arra
|
||||||
* [![icon][mail]](mailto:mj@ziolko.dev)
|
* [![icon][mail]](mailto:bradziolko@gmail.com)
|
||||||
[![icon][github]](https://github.com/mjziolko)
|
[![icon][github]](https://github.com/bradziolko)
|
||||||
|
|
||||||
Madeline Ziolko
|
Brad Ziolko
|
||||||
[Original contribution from:
|
|
||||||
[![icon][mail]](mailto:bradziolko@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/bradziolko)]
|
|
||||||
* [![icon][mail]](mailto:sumoooru2@gmail.com)
|
* [![icon][mail]](mailto:sumoooru2@gmail.com)
|
||||||
[![icon][github]](https://github.com/sumoooru2)
|
[![icon][github]](https://github.com/sumoooru2)
|
||||||
|
|
||||||
@@ -315,6 +284,10 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/angelbot)
|
[![icon][github]](https://github.com/angelbot)
|
||||||
|
|
||||||
John Weigel
|
John Weigel
|
||||||
|
* [![icon][mail]](mailto:kevinz@weghst.com)
|
||||||
|
[![icon][github]](https://github.com/kevin70)
|
||||||
|
|
||||||
|
kk
|
||||||
* [![icon][mail]](mailto:runforprogram@163.com)
|
* [![icon][mail]](mailto:runforprogram@163.com)
|
||||||
[![icon][github]](https://github.com/runforprogram)
|
[![icon][github]](https://github.com/runforprogram)
|
||||||
|
|
||||||
@@ -375,173 +348,13 @@ Contributors:
|
|||||||
[![icon][github]](https://github.com/daya0576)
|
[![icon][github]](https://github.com/daya0576)
|
||||||
|
|
||||||
大牙(Henry Zhu)
|
大牙(Henry Zhu)
|
||||||
* [![icon][mail]](mailto:mplacek@skilltech.pl)
|
|
||||||
[![icon][github]](https://github.com/MichalPlacek)
|
|
||||||
|
|
||||||
MichalPlacek
|
|
||||||
* [![icon][mail]](mailto:shrikantsharat.k@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/sharat87)
|
|
||||||
|
|
||||||
Shrikant Sharat Kandula
|
|
||||||
* [![icon][mail]](mailto:michal.placek@yandex.com)
|
|
||||||
[![icon][github]](https://github.com/MichalPlacek)
|
|
||||||
|
|
||||||
Michal Placek
|
|
||||||
* [![icon][mail]](mailto:eugene.nizienko@jetbrains.com)
|
|
||||||
[![icon][github]](https://github.com/nizienko)
|
|
||||||
|
|
||||||
eugene nizienko
|
|
||||||
* [![icon][mail]](mailto:x@lipp.fi)
|
|
||||||
[![icon][github]](https://github.com/lippfi)
|
|
||||||
|
|
||||||
Filipp Vakhitov
|
|
||||||
* [![icon][mail]](mailto:yzeiri.1@osu.edu)
|
|
||||||
[![icon][github]](https://github.com/myzeiri)
|
|
||||||
|
|
||||||
Martin Yzeiri
|
|
||||||
* [![icon][mail]](mailto:jeyko1@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/wrightwriter)
|
|
||||||
|
|
||||||
Petar Guglev
|
|
||||||
* [![icon][mail]](mailto:contact@chylex.com)
|
|
||||||
[![icon][github]](https://github.com/chylex)
|
|
||||||
|
|
||||||
chylex
|
|
||||||
* [![icon][mail]](mailto:daniel.egger@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/DanEEStar)
|
|
||||||
|
|
||||||
DanEEStar
|
|
||||||
* [![icon][mail]](mailto:ksrbkevinsuen@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/ksrb)
|
|
||||||
|
|
||||||
Kevin Suen
|
|
||||||
* [![icon][mail]](mailto:michael.schertenleib@inftec.ch)
|
|
||||||
[![icon][github]](https://github.com/cravay)
|
|
||||||
|
|
||||||
Michael Schertenleib
|
|
||||||
* [![icon][mail]](mailto:piotr@near.org)
|
|
||||||
[![icon][github]](https://github.com/pmnoxx)
|
|
||||||
|
|
||||||
Piotr Mikulski
|
|
||||||
* [![icon][mail]](mailto:lonrevip@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/lonre)
|
|
||||||
|
|
||||||
Lonre Wang
|
|
||||||
* [![icon][mail]](mailto:AlexPl292@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/AlexPl292)
|
|
||||||
|
|
||||||
Alex Pláte
|
|
||||||
* [![icon][mail]](mailto:david@dadon.fr)
|
|
||||||
[![icon][github]](https://github.com/ddadon10)
|
|
||||||
|
|
||||||
David Dadon
|
|
||||||
* [![icon][mail]](mailto:hollandpirates@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/PHPirates)
|
|
||||||
|
|
||||||
Thomas Schouten
|
|
||||||
* [![icon][mail]](mailto:sr@mail25.de)
|
|
||||||
[![icon][github]](https://github.com/Vvalter)
|
|
||||||
|
|
||||||
Simon Rainer
|
|
||||||
* [![icon][mail]](mailto:filipp.vakhitov@jetbrains.com)
|
|
||||||
[![icon][github]](https://github.com/lippfi)
|
|
||||||
|
|
||||||
lippfi
|
|
||||||
* [![icon][mail]](mailto:3237686+Runinho@users.noreply.github.com)
|
|
||||||
[![icon][github]](https://github.com/Runinho)
|
|
||||||
|
|
||||||
Runinho
|
|
||||||
* [![icon][mail]](mailto:me@yuhaowen.com)
|
|
||||||
[![icon][github]](https://github.com/adaext)
|
|
||||||
|
|
||||||
Ada
|
|
||||||
* [![icon][mail]](mailto:dominic.palmer@outlook.com)
|
|
||||||
[![icon][github]](https://github.com/dominicpalmer)
|
|
||||||
|
|
||||||
Dominic Palmer
|
|
||||||
* [![icon][mail]](mailto:kawagh.dev@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/kawagh)
|
|
||||||
|
|
||||||
kawagh
|
|
||||||
* [![icon][mail]](mailto:78074243+danisevas@users.noreply.github.com)
|
|
||||||
[![icon][github]](https://github.com/danisevas)
|
|
||||||
|
|
||||||
Dani Sevastianov
|
|
||||||
* [![icon][mail]](mailto:oskar.persson@polken.se)
|
|
||||||
[![icon][github]](https://github.com/oskarpersson/)
|
|
||||||
|
|
||||||
Oskar Persson
|
|
||||||
* [![icon][mail]](mailto:silence.m@hotmail.com)
|
|
||||||
[![icon][github]](https://github.com/Stzx)
|
|
||||||
|
|
||||||
Silence Tai
|
|
||||||
* [![icon][mail]](mailto:tszsumng90@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/samabcde)
|
|
||||||
|
|
||||||
Sam Ng
|
|
||||||
* [![icon][mail]](mailto:ludwig.valda.vasquez@jetbrains.com)
|
|
||||||
[![icon][github]](https://github.com/ludwig-jb)
|
|
||||||
|
|
||||||
ludwig-jb
|
|
||||||
* [![icon][mail]](mailto:pvydmuch@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/pWydmuch)
|
|
||||||
|
|
||||||
pWydmuch
|
|
||||||
* [![icon][mail]](mailto:leonid989@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/Infonautica)
|
|
||||||
|
|
||||||
Leonid Danilov
|
|
||||||
* [![icon][mail]](mailto:emanuel-367@hotmail.com)
|
|
||||||
[![icon][github]](https://github.com/emanuelgestosa)
|
|
||||||
|
|
||||||
Emanuel Gestosa
|
|
||||||
* [![icon][mail]](mailto:81118900+lippfi@users.noreply.github.com)
|
|
||||||
[![icon][github]](https://github.com/lippfi)
|
|
||||||
|
|
||||||
lippfi,
|
|
||||||
* [![icon][mail]](mailto:fillipser143@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/Parker7123)
|
|
||||||
|
|
||||||
FilipParker
|
|
||||||
* [![icon][mail]](mailto:7138209+duhaesbaert@users.noreply.github.com)
|
|
||||||
[![icon][github]](https://github.com/duhaesbaert)
|
|
||||||
|
|
||||||
Eduardo Haesbaert
|
|
||||||
* [![icon][mail]](mailto:nikolaevsky.egor@gmail.com)
|
|
||||||
[![icon][github]](https://github.com/Aisper)
|
|
||||||
|
|
||||||
Egor Nikolaevsky
|
|
||||||
* [![icon][mail]](mailto:77796630+throwaway69420-69420@users.noreply.github.com)
|
|
||||||
[![icon][github]](https://github.com/kun-codes)
|
|
||||||
|
|
||||||
Bishwa Saha,
|
|
||||||
* [![icon][mail]](mailto:alexfu@fastmail.com)
|
|
||||||
[![icon][github]](https://github.com/alexfu)
|
|
||||||
|
|
||||||
Alex Fu
|
|
||||||
* [![icon][mail]](mailto:jakepeters199@hotmail.com)
|
|
||||||
[![icon][github]](https://github.com/LazyScaper)
|
|
||||||
|
|
||||||
Jake
|
|
||||||
|
|
||||||
Previous contributors:
|
|
||||||
|
|
||||||
* [![icon][mail]](mailto:hild@b4mad.net)
|
|
||||||
[![icon][github-off]](#)
|
|
||||||
|
|
||||||
Marcel Hild
|
|
||||||
* [![icon][mail]](mailto:kevinz@weghst.com)
|
|
||||||
[![icon][github]](https://github.com/kevin70)
|
|
||||||
|
|
||||||
kk
|
|
||||||
|
|
||||||
|
|
||||||
If you are a contributor and your name is not listed here, feel free to
|
If you are a contributor and your name is not listed here, feel free to
|
||||||
contact the maintainers.
|
contact the maintainers.
|
||||||
|
|
||||||
<a href="https://icons8.com">Icons by Icons8</a>
|
<a href="https://icons8.com">Icons by Icons8</a>
|
||||||
|
|
||||||
[mail]: assets/icons/mail.png
|
[mail]: resources/icons/mail.png
|
||||||
[github]: assets/icons/github.png
|
[github]: resources/icons/github.png
|
||||||
|
|
||||||
[github-off]: assets/icons/github-off.png
|
[github-off]: resources/icons/github-off.png
|
||||||
|
492
CHANGES.md
492
CHANGES.md
@@ -4,18 +4,17 @@ The Changelog
|
|||||||
History of changes in IdeaVim for the IntelliJ platform.
|
History of changes in IdeaVim for the IntelliJ platform.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project DOES NOT adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
Before version 1.7.0:
|
Stable versions use X.Y format.
|
||||||
Stable versions use X.Y format.
|
EAP versions use X.Y.Z format.
|
||||||
EAP ([Early Access Program](https://jb.gg/ideavim-eap)) versions use X.Y.Z format.
|
|
||||||
|
|
||||||
|
|
||||||
Get an Early Access
|
Get an Early Access
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Would you like to try new features and fixes? Join the Early Access Program and
|
Would you like to try new features and fixes? Join the Early Access Program and
|
||||||
receive EAP builds as updates! Use the `Early Access Program` option in the status bar or
|
receive EAP builds as updates! Use the `EAP` option in the status bar or
|
||||||
add this URL to "Settings | Plugins | Manage Plugin Repositories":
|
add this URL to "Settings | Plugins | Manage Plugin Repositories":
|
||||||
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
||||||
|
|
||||||
@@ -23,486 +22,10 @@ It is important to distinguish EAP from traditional pre-release software.
|
|||||||
Please note that the quality of EAP versions may at times be way below even
|
Please note that the quality of EAP versions may at times be way below even
|
||||||
usual beta standards.
|
usual beta standards.
|
||||||
|
|
||||||
## End of changelog file maintenance
|
## To Be Released
|
||||||
|
|
||||||
Since version 2.9.0, the changelog can be found on YouTrack
|
|
||||||
|
|
||||||
To Be Released: https://youtrack.jetbrains.com/issues/VIM?q=%23%7BReady%20To%20Release%7D%20
|
|
||||||
Latest Fixes: https://youtrack.jetbrains.com/issues/VIM?q=State:%20Fixed%20sort%20by:%20updated%20
|
|
||||||
|
|
||||||
## 2.9.0, 2024-02-20
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-3055](https://youtrack.jetbrains.com/issue/VIM-3055) Fix the issue with double deleting after dot
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [805](https://github.com/JetBrains/ideavim/pull/805) by [chylex](https://github.com/chylex): VIM-3238 Fix recording a macro that replays another macro
|
|
||||||
|
|
||||||
## 2.8.0, 2024-01-30
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-3130](https://youtrack.jetbrains.com/issue/VIM-3130) Change the build version to 2023.1.2
|
|
||||||
* [VIM-3168](https://youtrack.jetbrains.com/issue/VIM-3168) Do not switch to block caret after enter if the IdeaVim is disabled
|
|
||||||
* [VIM-3165](https://youtrack.jetbrains.com/issue/VIM-3165) Do not process enter key as IdeaVim shortcut if it's not an actual keypress
|
|
||||||
* [VIM-3159](https://youtrack.jetbrains.com/issue/VIM-3159) Shift-enter now works in normal mode again
|
|
||||||
* [VIM-3157](https://youtrack.jetbrains.com/issue/VIM-3157) Do not invoke enter in invokeLater for python console
|
|
||||||
* [VIM-3195](https://youtrack.jetbrains.com/issue/VIM-3195) Fix escape in injected editor
|
|
||||||
* [VIM-3190](https://youtrack.jetbrains.com/issue/VIM-3190) Do not use octopus handler if the enter key is used with modifiers like shift or control
|
|
||||||
* [VIM-3203](https://youtrack.jetbrains.com/issue/VIM-3203) Split action not works in normal mode
|
|
||||||
* [VIM-3184](https://youtrack.jetbrains.com/issue/VIM-3184) Revert "VIM-3184: Temporally disable new handlers for the thin client"
|
|
||||||
* [VIM-3186](https://youtrack.jetbrains.com/issue/VIM-3186) Do not multiply the enter action by the amount of carets
|
|
||||||
* [VIM-3177](https://youtrack.jetbrains.com/issue/VIM-3177) Formatting of commit message works again
|
|
||||||
* [VIM-1611](https://youtrack.jetbrains.com/issue/VIM-1611) actions related to resolving conflicts doesn't seem to work
|
|
||||||
* [VIM-3204](https://youtrack.jetbrains.com/issue/VIM-3204) Add checker that verifies the configuratin of the keymap
|
|
||||||
* [VIM-3084](https://youtrack.jetbrains.com/issue/VIM-3084) Double update for the status bar icon
|
|
||||||
* [VIM-3176](https://youtrack.jetbrains.com/issue/VIM-3176) Reselecting visual selection after pasting above it select wrong lines
|
|
||||||
* [VIM-3206](https://youtrack.jetbrains.com/issue/VIM-3206) Disable both copilot suggestion and insert mode on a single escape
|
|
||||||
* [VIM-3090](https://youtrack.jetbrains.com/issue/VIM-3090) Cmd line mode saves the visual mode
|
|
||||||
* [VIM-3085](https://youtrack.jetbrains.com/issue/VIM-3085) Open access to VimTypedActionHandler and VimShortcutKeyAction
|
|
||||||
* [VIM-3260](https://youtrack.jetbrains.com/issue/VIM-3260) Processing the offsets at the file end
|
|
||||||
* [VIM-3183](https://youtrack.jetbrains.com/issue/VIM-3183) Execute .ideavimrc on pooled thread
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [763](https://github.com/JetBrains/ideavim/pull/763) by [Sam Ng](https://github.com/samabcde): Fix(VIM-3176) add test for restore selection after pasting in/below s…
|
|
||||||
* [772](https://github.com/JetBrains/ideavim/pull/772) by [chylex](https://github.com/chylex): Prevent code completion popup from appearing after running a macro
|
|
||||||
* [787](https://github.com/JetBrains/ideavim/pull/787) by [Leonid Danilov](https://github.com/Infonautica): Added "Which-Key" to Plugins
|
|
||||||
* [778](https://github.com/JetBrains/ideavim/pull/778) by [lippfi](https://github.com/lippfi): Showmode
|
|
||||||
* [788](https://github.com/JetBrains/ideavim/pull/788) by [Matt Ellis](https://github.com/citizenmatt): Refactor VimOptionGroupBase
|
|
||||||
|
|
||||||
## 2.7.0, 2023-11-07
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2933](https://youtrack.jetbrains.com/issue/VIM-2933) Reloading/sourcing .ideavimrc does not initialize new plugins
|
|
||||||
* [VIM-3138](https://youtrack.jetbrains.com/issue/VIM-3138) Do not try to register disposer if the caret is already disposed
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [734](https://github.com/JetBrains/ideavim/pull/734) by [Matt Ellis](https://github.com/citizenmatt): Support `~/` on Windows
|
|
||||||
* [736](https://github.com/JetBrains/ideavim/pull/736) by [chylex](https://github.com/chylex): Fix(VIM-2933): Reloading/sourcing .ideavimrc does not initialize new plugins
|
|
||||||
|
|
||||||
## 2.6.3, 2023-10-30
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
- 2.6.0 and 2.6.1 releases are broken. Version 2.6.3 reverts IdeaVim plugin to the working state as for 2.5.1.
|
|
||||||
|
|
||||||
## 2.6.0, 2023-10-27
|
|
||||||
|
|
||||||
This version of IdeaVim contains a lot of issues. Version 2.6.3 reverts these changes.
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
|
|
||||||
* `ShowHoverInfo` action can be used in mappings to open a tooltip that is shown by
|
|
||||||
mouse hovering | [VIM-2106](https://youtrack.jetbrains.com/issue/VIM-2106)
|
|
||||||
* `has` Vim Script function supports the most common OS checks: win32, win64, linux, mac, macunix, osx, osxdarwin, bsd, sun, unix
|
|
||||||
* See https://github.com/JetBrains/ideavim#vim-script for details about Vim Script
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-3060](https://youtrack.jetbrains.com/issue/VIM-3060) Clipboard interaction stopped working
|
|
||||||
* [VIM-3095](https://youtrack.jetbrains.com/issue/VIM-3095) Fix missing ellipsis digraph
|
|
||||||
* [VIM-2562](https://youtrack.jetbrains.com/issue/VIM-2562) Fix hang with multi-width chars in command line
|
|
||||||
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696) Vim selection issue after undo
|
|
||||||
* [VIM-1639](https://youtrack.jetbrains.com/issue/VIM-1639) Ctrl-o and Ctrl-i jumping in files of different projects
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [697](https://github.com/JetBrains/ideavim/pull/697) by [Matt Ellis](https://github.com/citizenmatt): Support per-window "global" values for local-to-window options
|
|
||||||
* [717](https://github.com/JetBrains/ideavim/pull/717) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2562): Fix hang with multi-width chars in command line
|
|
||||||
* [732](https://github.com/JetBrains/ideavim/pull/732) by [pWydmuch](https://github.com/pWydmuch): Fix md links in doc
|
|
||||||
* [733](https://github.com/JetBrains/ideavim/pull/733) by [Matt Ellis](https://github.com/citizenmatt): Add support for ShowHoverInfo action to 2023.1 and 2023.2
|
|
||||||
* [729](https://github.com/JetBrains/ideavim/pull/729) by [chylex](https://github.com/chylex): Add operating system type to `has()` function
|
|
||||||
* [726](https://github.com/JetBrains/ideavim/pull/726) by [Matt Ellis](https://github.com/citizenmatt): Fix range for fall back comment mode
|
|
||||||
|
|
||||||
## 2.5.0, 2023-09-01
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-802](https://youtrack.jetbrains.com/issue/VIM-802) IdeaVim vs. Vim: discrepancies in using registers
|
|
||||||
* [VIM-2246](https://youtrack.jetbrains.com/issue/VIM-2246) X11/Xorg Primary selection register "* not supported
|
|
||||||
* [VIM-2313](https://youtrack.jetbrains.com/issue/VIM-2313)
|
|
||||||
[VIM-2318](https://youtrack.jetbrains.com/issue/VIM-2318)
|
|
||||||
[VIM-2666](https://youtrack.jetbrains.com/issue/VIM-2666)
|
|
||||||
[VIM-2951](https://youtrack.jetbrains.com/issue/VIM-2951)
|
|
||||||
IdeaVim works correctly in read-only editors like log or tests output.
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [666](https://github.com/JetBrains/ideavim/pull/666) by [Matt Ellis](https://github.com/citizenmatt): Improve formatting of `:set` command output
|
|
||||||
* [667](https://github.com/JetBrains/ideavim/pull/667) by [Matt Ellis](https://github.com/citizenmatt): Eagerly initialise local options and introduce option scope
|
|
||||||
* [672](https://github.com/JetBrains/ideavim/pull/672) by [Matt Ellis](https://github.com/citizenmatt): Fix issue adding back hidden status bar widget
|
|
||||||
* [668](https://github.com/JetBrains/ideavim/pull/668) by [ludwig-jb](https://github.com/ludwig-jb): Handle unicode grapheme clusters
|
|
||||||
|
|
||||||
## 2.4.0, 2023-07-18
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2975](https://youtrack.jetbrains.com/issue/VIM-2975) Fix the offset after the rendered docs
|
|
||||||
* [VIM-2685](https://youtrack.jetbrains.com/issue/VIM-2685) Register command outputs different values for same registers
|
|
||||||
* [VIM-1294](https://youtrack.jetbrains.com/issue/VIM-1294) unvoluntary unfolding when using ideavim
|
|
||||||
* [VIM-2818](https://youtrack.jetbrains.com/issue/VIM-2818) Wrong caret position after multicaret paste
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [662](https://github.com/JetBrains/ideavim/pull/662) by [ludwig-jb](https://github.com/ludwig-jb): Update VimMessages#updateStatusBar to accept VimEditor
|
|
||||||
* [659](https://github.com/JetBrains/ideavim/pull/659) by [Sam Ng](https://github.com/samabcde): VIM-2920 fix select block expansion when enclose boundary is line break
|
|
||||||
|
|
||||||
## 2.3.0, 2023-06-14
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Matchit now supports PHP files | [VIM-2678](https://youtrack.jetbrains.com/issue/VIM-2678)
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
|
||||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
|
||||||
* [VIM-2930](https://youtrack.jetbrains.com/issue/VIM-2930) vim-multiple-cursors + ReplaceWithRegister issue
|
|
||||||
* [VIM-2945](https://youtrack.jetbrains.com/issue/VIM-2945) %-movement mismatches braces
|
|
||||||
* [VIM-2953](https://youtrack.jetbrains.com/issue/VIM-2953) The previous fix for :q command caused weird behavior of tab closing
|
|
||||||
* [VIM-2964](https://youtrack.jetbrains.com/issue/VIM-2964) Fix an issue with leaking caret instance
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [616](https://github.com/JetBrains/ideavim/pull/616) by [Matt Ellis](https://github.com/citizenmatt): Refactor/option delegated properties
|
|
||||||
* [626](https://github.com/JetBrains/ideavim/pull/626) by [Martin Yzeiri](https://github.com/myzeiri): Matchit bug fixes
|
|
||||||
* [619](https://github.com/JetBrains/ideavim/pull/619) by [Matt Ellis](https://github.com/citizenmatt): Fix some local options being used as global options
|
|
||||||
* [638](https://github.com/JetBrains/ideavim/pull/638) by [Sam Ng](https://github.com/samabcde): VIM-2615 add support to sort u command
|
|
||||||
* [646](https://github.com/JetBrains/ideavim/pull/646) by [Sam Ng](https://github.com/samabcde): VIM-1990 fix repeat delete find or till wrong MotionType
|
|
||||||
* [649](https://github.com/JetBrains/ideavim/pull/649) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for PHP
|
|
||||||
|
|
||||||
## 2.2.0, 2023-04-20
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Now every secondary caret has its own marks. You can use marks and `gv` in multiple-caret mode now.
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-1829](https://youtrack.jetbrains.com/issue/VIM-1829/key-combinations-are-not-working-in-visual-mode-IdeaVim) Fix marks when moving lines up/down
|
|
||||||
* [VIM-2130](https://youtrack.jetbrains.com/issue/VIM-2130/Vim-visual-mode-mapping-isnt-behaving-correctly-in-ideavim-it-leaves-visual-mode-after-its-executed) Fix marks when moving lines up/down
|
|
||||||
* [VIM-2428](https://youtrack.jetbrains.com/issue/VIM-2428/The-gv-command-doesnt-work) Fix marks when moving lines up/down
|
|
||||||
* [VIM-2686](https://youtrack.jetbrains.com/issue/VIM-2686/Multiple-caret-marks) Add individual mark storage for each secondary caret
|
|
||||||
* [VIM-2840](https://youtrack.jetbrains.com/issue/VIM-2840) Replace with register does not work with count
|
|
||||||
* [VIM-658](https://youtrack.jetbrains.com/issue/VIM-658) Stop macro on error
|
|
||||||
* [VIM-2787](https://youtrack.jetbrains.com/issue/VIM-2787) Save ideavimrc loading
|
|
||||||
* [VIM-2850](https://youtrack.jetbrains.com/issue/VIM-2850) Marks exception during IDE startup
|
|
||||||
* [VIM-2804](https://youtrack.jetbrains.com/issue/VIM-2804) IdeaVim multiple-cursors copy and paste issue when "set clipboard+=unnamed"
|
|
||||||
* [VIM-1768](https://youtrack.jetbrains.com/issue/VIM-1768) Delete surrounding character while in multiple cursors mode
|
|
||||||
* [VIM-282](https://youtrack.jetbrains.com/issue/VIM-282) Cursor line wrapping support (whichwrap)
|
|
||||||
* [VIM-2315](https://youtrack.jetbrains.com/issue/VIM-2315) Fix overlapping mappings execution
|
|
||||||
* [VIM-44](https://youtrack.jetbrains.com/issue/VIM-44) Unify navigation history between ideavim and idea
|
|
||||||
* [VIM-1735](https://youtrack.jetbrains.com/issue/VIM-1735) Fix enabling mulple carets after line selection
|
|
||||||
* [VIM-2881](https://youtrack.jetbrains.com/issue/VIM-2881) ReplaceRegister does no longer worker with MultiCursor
|
|
||||||
* [VIM-2244](https://youtrack.jetbrains.com/issue/VIM-2244) nnoremap mapping doesn't work correctly
|
|
||||||
* [VIM-2885](https://youtrack.jetbrains.com/issue/VIM-2885) "v:searchforward" does't work for IdeaVim
|
|
||||||
* [VIM-2733](https://youtrack.jetbrains.com/issue/VIM-2733) vim-surround emulation interacts incorrectly with unmatched quotes on previous lines
|
|
||||||
* [VIM-2884](https://youtrack.jetbrains.com/issue/VIM-2884) Moving multiple lines in visual mode is not working
|
|
||||||
* [VIM-2868](https://youtrack.jetbrains.com/issue/VIM-2868) Pasting in visual mode with P should not replace yank register like when pasting with p
|
|
||||||
* [VIM-2819](https://youtrack.jetbrains.com/issue/VIM-2819) Move command works incorrectly
|
|
||||||
* [VIM-795](https://youtrack.jetbrains.com/issue/VIM-795) Ctrl-w + h doesn't alway work (window navigation to the left window)
|
|
||||||
* [VIM-1551](https://youtrack.jetbrains.com/issue/VIM-1551) Surround: line surround not working
|
|
||||||
* [VIM-1746](https://youtrack.jetbrains.com/issue/VIM-1746) IdeaVim Surround removes unwanted characters
|
|
||||||
* [VIM-1750](https://youtrack.jetbrains.com/issue/VIM-1750) Surround with tag wrong position
|
|
||||||
* [VIM-2286](https://youtrack.jetbrains.com/issue/VIM-2286) Set surround not working for me as expected
|
|
||||||
* [VIM-2433](https://youtrack.jetbrains.com/issue/VIM-2433) Do not clear clipboard after inserting with ideaput
|
|
||||||
* [VIM-2896](https://youtrack.jetbrains.com/issue/VIM-2896) Correct ordering of handlers
|
|
||||||
* [VIM-2912](https://youtrack.jetbrains.com/issue/VIM-2912) Fix focus after :q
|
|
||||||
* [VIM-2909](https://youtrack.jetbrains.com/issue/VIM-2909) Fix incorrect file detection while closing diff window
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [589](https://github.com/JetBrains/ideavim/pull/589) by [Matt Ellis](https://github.com/citizenmatt): Refactor option usage and introduce accessor API
|
|
||||||
* [604](https://github.com/JetBrains/ideavim/pull/604) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Include empty lines in the selection when dragging backwards from EOL
|
|
||||||
* [603](https://github.com/JetBrains/ideavim/pull/603) by [Dominic Palmer](https://github.com/dominicpalmer): VIM-2773: Prevent viewport displacement on undo
|
|
||||||
* [602](https://github.com/JetBrains/ideavim/pull/602) by [Matt Ellis](https://github.com/citizenmatt): Refactor options service
|
|
||||||
* [612](https://github.com/JetBrains/ideavim/pull/612) by [Dani Sevastianov](https://github.com/danisevas): Fix quick-scope setup documentation
|
|
||||||
* [617](https://github.com/JetBrains/ideavim/pull/617) by [Silence Tai](https://github.com/Stzx): Fix dispose operation
|
|
||||||
|
|
||||||
## 2.1.0, 2023-01-10
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Add IdeaVim tutor. You can access it via the status bar icon.
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2797](https://youtrack.jetbrains.com/issue/VIM-2797) Introduce variable to mute default argtextobj mappings
|
|
||||||
* [VIM-758](https://youtrack.jetbrains.com/issue/VIM-758) Support d mappings
|
|
||||||
* [VIM-2577](https://youtrack.jetbrains.com/issue/VIM-2577) Fix paste at the end of notebook cell
|
|
||||||
* [VIM-2813](https://youtrack.jetbrains.com/issue/VIM-2813) Migrate update checker to VimStandalonePluginUpdateChecker
|
|
||||||
* [VIM-2833](https://youtrack.jetbrains.com/issue/VIM-2833) Fix rare deadlock during put in insert mode from clipboard
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [558](https://github.com/JetBrains/ideavim/pull/558) by [Matt Ellis](https://github.com/citizenmatt): Fix incorrect normalising for trailing inlay
|
|
||||||
* [554](https://github.com/JetBrains/ideavim/pull/554) by [Matt Ellis](https://github.com/citizenmatt): Refactor "last column" calculations
|
|
||||||
* [553](https://github.com/JetBrains/ideavim/pull/553) by [Matt Ellis](https://github.com/citizenmatt): Rearrange and rename some code in engine
|
|
||||||
* [560](https://github.com/JetBrains/ideavim/pull/560) by [Runinho](https://github.com/Runinho): Fix(VIM-2577) paste not working at end of notebook cell
|
|
||||||
* [571](https://github.com/JetBrains/ideavim/pull/571) by [Ada](https://github.com/adaext): Remove the redundant quotation mark at the end of "packadd matchit" command
|
|
||||||
* [561](https://github.com/JetBrains/ideavim/pull/561) by [Matt Ellis](https://github.com/citizenmatt): Fix incremental search not scrolling to current match
|
|
||||||
* [559](https://github.com/JetBrains/ideavim/pull/559) by [Runinho](https://github.com/Runinho): Fix(VIM-2760) notebookCommandMode detection
|
|
||||||
* [579](https://github.com/JetBrains/ideavim/pull/579) by [Martin Yzeiri](https://github.com/myzeiri): VIM-2799: Add Matchit support for cshtml files
|
|
||||||
* [580](https://github.com/JetBrains/ideavim/pull/580) by [Martin Yzeiri](https://github.com/myzeiri): Matchit: Add more Rider file types
|
|
||||||
* [583](https://github.com/JetBrains/ideavim/pull/583) by [Matt Ellis](https://github.com/citizenmatt): Introduce ScrollGroup
|
|
||||||
* [586](https://github.com/JetBrains/ideavim/pull/586) by [Patrick Elmquist](https://github.com/patrick-elmquist): Fixed number references in Tutor
|
|
||||||
|
|
||||||
## 2.0.0, 2022-11-01
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
* IdeaVim changes license from GPL-2.0 or later to MIT. [VIM-2782](https://youtrack.jetbrains.com/issue/VIM-2782)
|
|
||||||
|
|
||||||
## 1.12.0, 2022-11-01
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-1758](https://youtrack.jetbrains.com/issue/VIM-1758) Commentary plugin in rider
|
|
||||||
* [VIM-1903](https://youtrack.jetbrains.com/issue/VIM-1903) Autoindent now works in rider
|
|
||||||
* [VIM-2744](https://youtrack.jetbrains.com/issue/VIM-2744) Fix undo from ex line
|
|
||||||
* [VIM-2749](https://youtrack.jetbrains.com/issue/VIM-2749) Fix :tabn and :tabN commands
|
|
||||||
* [VIM-2718](https://youtrack.jetbrains.com/issue/VIM-2718) Fixed case where the primary caret was changed
|
|
||||||
* [VIM-2766](https://youtrack.jetbrains.com/issue/VIM-2766) Move NERDTree update to background thread
|
|
||||||
* [VIM-2768](https://youtrack.jetbrains.com/issue/VIM-2768) Refactor listeners
|
|
||||||
* [VIM-2776](https://youtrack.jetbrains.com/issue/VIM-2776) Use filename index for file search
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [550](https://github.com/JetBrains/ideavim/pull/550) by [Matt Ellis](https://github.com/citizenmatt): Fix(VIM-2778) Remove override of editor scroll setting
|
|
||||||
|
|
||||||
## 1.11.0, 2022-08-09
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Add `gcu` command for Commentary plugin
|
|
||||||
* Add `:Commentary` command, which works great for commands such as `:%g/fun/Commentary`
|
|
||||||
* Support `gc` – commentary text objects. E.g. `dgc`: delete commented text.
|
|
||||||
* Support `redo-register feature` | [VIM-2643](https://youtrack.jetbrains.com/issue/VIM-2643/Dot-operator-doesn-t-increment-number-register-after-pasting-fro) | [viminfo](http://vimdoc.sourceforge.net/htmldoc/undo.html#redo-register)
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
* Uses the same mappings as Commentary, so custom bindings for the Vim plugin will work with IdeaVim, too.
|
|
||||||
E.g. `<Plug>Commentary` instead of `<Plug>(CommentMotion)`. Old mappings are maintained for compatibility.
|
|
||||||
* If you open `~/.ideavimrc` in IDE, remove a mapping, and reload the config using the reload button,
|
|
||||||
the mapping will actually be unmapped.
|
|
||||||
* New vim (and IdeaVim) behaviour: `ci(`& friends searches for the brackets in the line.
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2587](https://youtrack.jetbrains.com/issue/VIM-2587) Use ctrl-6 as ctrl-^
|
|
||||||
* [VIM-2590](https://youtrack.jetbrains.com/issue/VIM-2590) Fix caret shape in PyCharm
|
|
||||||
* [VIM-2553](https://youtrack.jetbrains.com/issue/VIM-2553) Substitute consecutive matches
|
|
||||||
* [VIM-1687](https://youtrack.jetbrains.com/issue/VIM-1687) Support count for `gcc`
|
|
||||||
* [VIM-2381](https://youtrack.jetbrains.com/issue/VIM-2381) Fall back to line comment if block comment is not available
|
|
||||||
* [VIM-2589](https://youtrack.jetbrains.com/issue/VIM-2589) Add `gc` text object
|
|
||||||
* [VIM-2604](https://youtrack.jetbrains.com/issue/VIM-2604) Update action execution rules
|
|
||||||
* [VIM-2654](https://youtrack.jetbrains.com/issue/VIM-2654) Add support for `return` without expression
|
|
||||||
* [VIM-2630](https://youtrack.jetbrains.com/issue/VIM-2630/Please-fix-warning-Shall-not-be-called-on-a-template-presentatio) Fix IDE freeze
|
|
||||||
* [VIM-2661](https://youtrack.jetbrains.com/issue/VIM-2661/Spamming-does-not-work) Fix repeating the `@@` command
|
|
||||||
* [VIM-2668](https://youtrack.jetbrains.com/issue/VIM-2668/tabm-or-tabm-with-no-number-does-not-match-vim-behavior) Fix omitted numbers in `tabm` command
|
|
||||||
* [VIM-2595](https://youtrack.jetbrains.com/issue/VIM-2595) Support plugins in macro execution
|
|
||||||
* [VIM-2671](https://youtrack.jetbrains.com/issue/VIM-2671) Fix using plugins from mappings
|
|
||||||
* [VIM-2675](https://youtrack.jetbrains.com/issue/VIM-2675) Fix numbering register in visual mode
|
|
||||||
* [VIM-744](https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier) Add count to undo/redo
|
|
||||||
* [VIM-1862](https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history) Fix command history
|
|
||||||
* [VIM-2227](https://youtrack.jetbrains.com/issue/VIM-2227) Wrong behavior when deleting / changing surround with invalid character
|
|
||||||
* [VIM-2691](https://youtrack.jetbrains.com/issue/VIM-2691) Save file on :w
|
|
||||||
* [VIM-2710](https://youtrack.jetbrains.com/issue/VIM-2710) Show options value on `set opt`
|
|
||||||
* [VIM-913](https://youtrack.jetbrains.com/issue/VIM-913) Partially fix the issue with macros and autocompletion
|
|
||||||
* [VIM-2723](https://youtrack.jetbrains.com/issue/VIM-2723) Move focus to editor after :q
|
|
||||||
* [VIM-2728](https://youtrack.jetbrains.com/issue/VIM-2728) Give access to global variables
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext
|
|
||||||
* [483](https://github.com/JetBrains/ideavim/pull/483) by [Simon Rainer](https://github.com/Vvalter): Fix(VIM-2553): Substitute consecutive matches
|
|
||||||
* [488](https://github.com/JetBrains/ideavim/pull/488) by [Martin Yzeiri](https://github.com/myzeiri): Add Matchit support for the C family of languages
|
|
||||||
* [493](https://github.com/JetBrains/ideavim/pull/493) by [Matt Ellis](https://github.com/citizenmatt): Improvements to Commentary extension
|
|
||||||
* [494](https://github.com/JetBrains/ideavim/pull/494) by [Matt Ellis](https://github.com/citizenmatt): Cleanup pre-212 CaretVisualAttributes compatibility code
|
|
||||||
* [504](https://github.com/JetBrains/ideavim/pull/504) by [Matt Ellis](https://github.com/citizenmatt): Minor bug fixes
|
|
||||||
* [519](https://github.com/JetBrains/ideavim/pull/519) by [chylex](https://github.com/chylex): Fix(VIM-2227): Wrong behavior when deleting / changing surround with invalid character
|
|
||||||
* [525](https://github.com/JetBrains/ideavim/pull/525) by [Matt Ellis](https://github.com/citizenmatt): Improve handling of fractional width fonts
|
|
||||||
* [526](https://github.com/JetBrains/ideavim/pull/526) by [Alex Pláte](https://github.com/AlexPl292): Create gradle.properties
|
|
||||||
* [528](https://github.com/JetBrains/ideavim/pull/528) by [chylex](https://github.com/chylex): Implement partial code completion support in macros
|
|
||||||
* [531](https://github.com/JetBrains/ideavim/pull/531) by [Matt Ellis](https://github.com/citizenmatt): Consolidate doTest methods
|
|
||||||
|
|
||||||
## 1.10.0, 2022-02-17
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Add register support to let command | [VIM-749](https://youtrack.jetbrains.com/issue/VIM-749), [VIM-1783](https://youtrack.jetbrains.com/issue/VIM-1783)
|
|
||||||
* Add tabmove command | [VIM-1164](https://youtrack.jetbrains.com/issue/VIM-1164)
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2502](https://youtrack.jetbrains.com/issue/VIM-2502) Fix the shape of new carets
|
|
||||||
* [VIM-2499](https://youtrack.jetbrains.com/issue/VIM-2499) Fix mapping to esc
|
|
||||||
* [VIM-2500](https://youtrack.jetbrains.com/issue/VIM-2500) Fix esc for normal mode
|
|
||||||
* [VIM-2523](https://youtrack.jetbrains.com/issue/VIM-2523) `i` command for the folder in the project tree
|
|
||||||
* [VIM-2471](https://youtrack.jetbrains.com/issue/VIM-2471) Multiple [{ and ]} actions
|
|
||||||
* [VIM-2504](https://youtrack.jetbrains.com/issue/VIM-2504) Fix esc with using python notebooks
|
|
||||||
* [VIM-2540](https://youtrack.jetbrains.com/issue/VIM-2540) Fix option listeners
|
|
||||||
* [VIM-2548](https://youtrack.jetbrains.com/issue/VIM-2548) Fix paste
|
|
||||||
* [VIM-2470](https://youtrack.jetbrains.com/issue/VIM-2470) Fix incorrect reset of cursor shape
|
|
||||||
* [VIM-2223](https://youtrack.jetbrains.com/issue/VIM-2223), [VIM-1684](https://youtrack.jetbrains.com/issue/VIM-1684), [VIM-2491](https://youtrack.jetbrains.com/issue/VIM-2491) Fix `gv`
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [441](https://github.com/JetBrains/ideavim/pull/441) by [DanEEStar](https://github.com/DanEEStar): Add Matchit support for Vue.js files
|
|
||||||
* [440](https://github.com/JetBrains/ideavim/pull/440) by [Kevin Suen](https://github.com/ksrb): Add matchit support for handlebars
|
|
||||||
* [448](https://github.com/JetBrains/ideavim/pull/448) by [Michael Schertenleib](https://github.com/cravay): Support custom element names in vim-surround
|
|
||||||
* [435](https://github.com/JetBrains/ideavim/pull/435) by [Piotr Mikulski](https://github.com/pmnoxx): Print stderr when running a command just like vim does
|
|
||||||
* [449](https://github.com/JetBrains/ideavim/pull/449) by [Lonre Wang](https://github.com/lonre): Typo fix
|
|
||||||
* [453](https://github.com/JetBrains/ideavim/pull/453) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2470): Fix incorrect reset of cursor shape
|
|
||||||
* [461](https://github.com/JetBrains/ideavim/pull/461) by [David Dadon](https://github.com/ddadon10): Add shortcut to ideajoin example
|
|
||||||
|
|
||||||
## 1.9.0, 2021-12-10
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Make IdeaVim compatible with CodeWithMe | [VIM-2332](https://youtrack.jetbrains.com/issue/VIM-2332)
|
|
||||||
* expression register `<C-R>=` | [VIM-521](https://youtrack.jetbrains.com/issue/VIM-521)
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2442](https://youtrack.jetbrains.com/issue/VIM-2442) Fix `!` command
|
|
||||||
* [VIM-2255](https://youtrack.jetbrains.com/issue/VIM-2255) Fix reload icon on windows
|
|
||||||
* [VIM-2199](https://youtrack.jetbrains.com/issue/VIM-2199) Fix autocompletion for AppCode
|
|
||||||
* [VIM-2445](https://youtrack.jetbrains.com/issue/VIM-2445) Fix spaces in range
|
|
||||||
* [VIM-2450](https://youtrack.jetbrains.com/issue/VIM-2450) Fix set command
|
|
||||||
* [VIM-2451](https://youtrack.jetbrains.com/issue/VIM-2451) Fix comments
|
|
||||||
* [VIM-2452](https://youtrack.jetbrains.com/issue/VIM-2452) Fix augroup
|
|
||||||
* [VIM-2453](https://youtrack.jetbrains.com/issue/VIM-2453) Fix split command
|
|
||||||
* [VIM-2397](https://youtrack.jetbrains.com/issue/VIM-2397) Fix dollar motion as an operator
|
|
||||||
* [VIM-2432](https://youtrack.jetbrains.com/issue/VIM-2432) Fix ctrl-d and ctrl-u motions with scrolloff
|
|
||||||
* [VIM-2462](https://youtrack.jetbrains.com/issue/VIM-2462) Reset caret shape when disabling plugin
|
|
||||||
* [VIM-2449](https://youtrack.jetbrains.com/issue/VIM-2449) Fix `I` for one-line block selection
|
|
||||||
* [VIM-2213](https://youtrack.jetbrains.com/issue/VIM-2213) Close VCS change popup on esc
|
|
||||||
* [VIM-2435](https://youtrack.jetbrains.com/issue/VIM-2435) Close diff window on esc
|
|
||||||
* [VIM-2461](https://youtrack.jetbrains.com/issue/VIM-2461) Show action id before action execution
|
|
||||||
* [VIM-2026](https://youtrack.jetbrains.com/issue/VIM-2026) Keep global marks after restart
|
|
||||||
* [VIM-1691](https://youtrack.jetbrains.com/issue/VIM-1691) Fix default path for `!` command
|
|
||||||
* [VIM-2487](https://youtrack.jetbrains.com/issue/VIM-2487)
|
|
||||||
[VIM-2434](https://youtrack.jetbrains.com/issue/VIM-2434)
|
|
||||||
Fix IdeaVim in PyCharm notebooks
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [390](https://github.com/JetBrains/ideavim/pull/390) by [chylex](https://github.com/chylex): [VIM-2255] Missing reload icon in .ideavimrc on Windows
|
|
||||||
* [391](https://github.com/JetBrains/ideavim/pull/391) by [Matt Ellis](https://github.com/citizenmatt): fix(VIM-2432): handle scrolloff with <C-D> and <C-U>
|
|
||||||
* [401](https://github.com/JetBrains/ideavim/pull/401) by [Matt Ellis](https://github.com/citizenmatt): Reset caret shape when disabling plugin
|
|
||||||
* [407](https://github.com/JetBrains/ideavim/pull/407) by [eugene nizienko](https://github.com/nizienko): Video recording for ui tests
|
|
||||||
* [418](https://github.com/JetBrains/ideavim/pull/418) by [chylex](https://github.com/chylex): Fix compile errors in unit tests on Windows
|
|
||||||
|
|
||||||
## 1.8.0, 2021-10-27
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Support `matchit.vim` extension for Ruby and XML/HTML [VIM-539](https://youtrack.jetbrains.com/issue/VIM-539) | [matchit.vim](https://github.com/chrisbra/matchit)
|
|
||||||
* IDE-specific configuration [VIM-1573](https://youtrack.jetbrains.com/issue/VIM-1573)
|
|
||||||
* Call command [VIM-2416](https://youtrack.jetbrains.com/issue/VIM-2416)
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2417](https://youtrack.jetbrains.com/issue/VIM-2417) Fix bars in substitute command
|
|
||||||
* [VIM-2425](https://youtrack.jetbrains.com/issue/VIM-2425) Fix reload button
|
|
||||||
* [VIM-2422](https://youtrack.jetbrains.com/issue/VIM-2422) Fix freeze
|
|
||||||
* [VIM-2420](https://youtrack.jetbrains.com/issue/VIM-2420) Fix freeze
|
|
||||||
* [VIM-2359](https://youtrack.jetbrains.com/issue/VIM-2359) Fix selection with VimExchange
|
|
||||||
* [VIM-2426](https://youtrack.jetbrains.com/issue/VIM-2426) Fix marks in commands
|
|
||||||
* [VIM-2438](https://youtrack.jetbrains.com/issue/VIM-2438) Fix marks in commands
|
|
||||||
* [DISCUSSION-386](https://github.com/JetBrains/ideavim/discussions/386) Fixed command with no spaces before argument
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [337](https://github.com/JetBrains/ideavim/pull/337) by [Matt Ellis](https://github.com/citizenmatt): guicursor!
|
|
||||||
* [343](https://github.com/JetBrains/ideavim/pull/343) by [Martin Yzeiri](https://github.com/myzeiri): Emulate matchit.vim
|
|
||||||
* [387](https://github.com/JetBrains/ideavim/pull/387) by [Petar Guglev](https://github.com/wrightwriter): Update README.md link
|
|
||||||
|
|
||||||
## 1.7.2, 2021-09-30
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2405](https://youtrack.jetbrains.com/issue/VIM-2405) ExExceptions during `map <expr>` execution are now displayed in status bar
|
|
||||||
* [VIM-2406](https://youtrack.jetbrains.com/issue/VIM-2406) Fix go to line command
|
|
||||||
* [VIM-2408](https://youtrack.jetbrains.com/issue/VIM-2408) Fix vim script parser
|
|
||||||
* [VIM-2409](https://youtrack.jetbrains.com/issue/VIM-2409) Fix substitute command
|
|
||||||
* [VIM-2411](https://youtrack.jetbrains.com/issue/VIM-2411) Fix vim script parser
|
|
||||||
|
|
||||||
## 1.7.1, 2021-09-20
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2400](https://youtrack.jetbrains.com/issue/VIM-2400) Fix vim script parser
|
|
||||||
* [VIM-2401](https://youtrack.jetbrains.com/issue/VIM-2401) Exceptions occurred during execution of `map<expr>` are now shown in status bar
|
|
||||||
* [VIM-2404](https://youtrack.jetbrains.com/issue/VIM-2404) Fix multiple pastes from unnamed clipboard
|
|
||||||
|
|
||||||
## 1.7.0, 2021-09-16
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* New engine for Vim Script execution. Check out the [GitHub Discussion](https://jb.gg/vim-script-discussion).
|
|
||||||
* Mapping keys to expressions (map \<expr>). See `:h map-expression`.
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2368](https://youtrack.jetbrains.com/issue/VIM-2368) Do not remove selection on right click
|
|
||||||
* [VIM-2392](https://youtrack.jetbrains.com/issue/VIM-2392) Fix possible out of bounds exception
|
|
||||||
* [VIM-2387](https://youtrack.jetbrains.com/issue/VIM-2387) Fix coping with unnamed and ideaput
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
* New versioning scheme. Current version is `1.7.0` instead of `0.70`.
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [349](https://github.com/JetBrains/ideavim/pull/349) by [eugene nizienko](https://github.com/nizienko): Run UI test ci
|
|
||||||
|
|
||||||
## 0.69, 2021-07-20
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Support several buffer management commands [VIM-1062](https://youtrack.jetbrains.com/issue/VIM-1062), [VIM-2335](https://youtrack.jetbrains.com/issue/VIM-2335)
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2317](https://youtrack.jetbrains.com/issue/VIM-2317) Fix memory leak
|
|
||||||
* [VIM-1357](https://youtrack.jetbrains.com/issue/VIM-1357)
|
|
||||||
[VIM-1566](https://youtrack.jetbrains.com/issue/VIM-1566) Fix external filters
|
|
||||||
* [VIM-2336](https://youtrack.jetbrains.com/issue/VIM-2336) Fix repeat for the `T` movement
|
|
||||||
* [VIM-1192](https://youtrack.jetbrains.com/issue/VIM-1192) Fix dollar motion from single command
|
|
||||||
* [VIM-1672](https://youtrack.jetbrains.com/issue/VIM-1672) IdeaVim correctly populates clipboard history
|
|
||||||
* [VIM-2351](https://youtrack.jetbrains.com/issue/VIM-2351) Correctly select last character when selecting with mouse
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [332](https://github.com/JetBrains/ideavim/pull/332) by [Matt Ellis](https://github.com/citizenmatt): VIM-1357+VIM-1566: Use OS shell to run filter command
|
|
||||||
* [333](https://github.com/JetBrains/ideavim/pull/333) by [Michal Placek](https://github.com/MichalPlacek): VIM-1062
|
|
||||||
* [334](https://github.com/JetBrains/ideavim/pull/334) by [Michal Placek](https://github.com/MichalPlacek): vim-2335 Support for navigation to previous buffer with :b#
|
|
||||||
|
|
||||||
## 0.68, 2021-06-22
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Support `:global` and `:vglobal` commands [VIM-831](https://youtrack.jetbrains.com/issue/VIM-831), [VIM-832](https://youtrack.jetbrains.com/issue/VIM-832)
|
|
||||||
* Support `vim-indent-object` extension [VIM-1151](https://youtrack.jetbrains.com/issue/VIM-1151) | [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object)
|
|
||||||
* Support `:print` command
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2308](https://youtrack.jetbrains.com/issue/VIM-2308) Go to next tab doesn't move scrolling
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [261](https://github.com/JetBrains/ideavim/pull/261) by [Shrikant Sharat Kandula](https://github.com/sharat87): New extension: Indentation based text objects
|
|
||||||
* [308](https://github.com/JetBrains/ideavim/pull/308) by [Matt Ellis](https://github.com/citizenmatt): Fix unnecessary caret movement when switching tabs
|
|
||||||
|
|
||||||
## 0.67, 2021-05-20
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Support `sethandler` command to configure shortcuts conflicts via `~/.ideavimrc` file. See [docs](https://jb.gg/vim-sethandler).
|
|
||||||
* Support `vim-paragraph-motion` extension [VIM-2290](https://youtrack.jetbrains.com/issue/VIM-2290) | [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion)
|
|
||||||
* Add "Reset Handlers" button for "Conflicting Shortcuts" setting table
|
|
||||||
|
|
||||||
### Changes:
|
|
||||||
* Rename "Vim Emulation" in settings to "Vim"
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2230](https://youtrack.jetbrains.com/issue/VIM-2230) Tweak caret position with inline rename options inlay
|
|
||||||
* [VIM-2177](https://youtrack.jetbrains.com/issue/VIM-2177) Fix scrolling issues near bottom of file
|
|
||||||
* [VIM-2276](https://youtrack.jetbrains.com/issue/VIM-2276) `:ls` returns correct path for files on Microsoft Windows.
|
|
||||||
* [VIM-1953](https://youtrack.jetbrains.com/issue/VIM-1953) Execute live testing for `:w` command
|
|
||||||
* [VIM-2284](https://youtrack.jetbrains.com/issue/VIM-2284) Values are not duplicated in set command
|
|
||||||
* [VIM-2289](https://youtrack.jetbrains.com/issue/VIM-2289) Fix `<End>` command behaviour
|
|
||||||
* [VIM-1476](https://youtrack.jetbrains.com/issue/VIM-1476) Last inserted text is stored in `.` register
|
|
||||||
* [VIM-2295](https://youtrack.jetbrains.com/issue/VIM-2295) Fix `<S-Space>` in insert mode with an existing mapping
|
|
||||||
* [VIM-1401](https://youtrack.jetbrains.com/issue/VIM-1401) IdeaVim triggers readonly handler
|
|
||||||
* [VIM-1856](https://youtrack.jetbrains.com/issue/VIM-1856) Support defining shortcuts in .ideavimrc
|
|
||||||
* [VIM-1523](https://youtrack.jetbrains.com/issue/VIM-1523) Allow different shortcut handlers in different modes
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [280](https://github.com/JetBrains/ideavim/pull/280) by [Matt Ellis](https://github.com/citizenmatt): Caret position and view scrolling fixes
|
|
||||||
* [289](https://github.com/JetBrains/ideavim/pull/289) by [MichalPlacek](https://github.com/MichalPlacek): VIM-2276 ls returns "absolute path" for files on Microsoft Windows.
|
|
||||||
* [295](https://github.com/JetBrains/ideavim/pull/295) by [MichalPlacek](https://github.com/MichalPlacek): VIM-1476
|
|
||||||
|
|
||||||
## 0.66, 2021-04-09
|
|
||||||
|
|
||||||
Not a lot of changes for this release. Focused on internal improvements.
|
|
||||||
|
|
||||||
### Features:
|
|
||||||
* Support `startofline` option
|
|
||||||
|
|
||||||
### Fixes:
|
|
||||||
* [VIM-2238](https://youtrack.jetbrains.com/issue/VIM-2238) Fix `M` command for small files
|
|
||||||
|
|
||||||
### Merged PRs:
|
|
||||||
* [275](https://github.com/JetBrains/ideavim/pull/275) by [Matt Ellis](https://github.com/citizenmatt): Fix edge cases for H, L and M and introduce 'startofline' option
|
|
||||||
* [276](https://github.com/JetBrains/ideavim/pull/276) by [Matt Ellis](https://github.com/citizenmatt): More refactoring of SearchGroup
|
|
||||||
|
|
||||||
## 0.65, 2021-02-17
|
|
||||||
|
|
||||||
### Features:
|
### Features:
|
||||||
* Support `NERDTree` extension [VIM-1042](https://youtrack.jetbrains.com/issue/VIM-1042) | [NERDTree](https://github.com/preservim/nerdtree)
|
* Support `NERDTree` extension [VIM-1042](https://youtrack.jetbrains.com/issue/VIM-1042) | [NERDTree](https://github.com/preservim/nerdtree)
|
||||||
|
|
||||||
* <details>
|
|
||||||
<summary><strong>Click to see details</strong></summary>
|
|
||||||
<img src="assets/changes/0.65/nerdtree.gif" alt="NERDTree example"/>
|
|
||||||
</details>
|
|
||||||
* Support `maxmapdepth` option to define the maximum depth of mappings
|
* Support `maxmapdepth` option to define the maximum depth of mappings
|
||||||
|
|
||||||
### Fixes:
|
### Fixes:
|
||||||
@@ -513,7 +36,6 @@ Not a lot of changes for this release. Focused on internal improvements.
|
|||||||
* [VIM-2218](https://youtrack.jetbrains.com/issue/VIM-2218) Fix some shortcuts for 2021.+
|
* [VIM-2218](https://youtrack.jetbrains.com/issue/VIM-2218) Fix some shortcuts for 2021.+
|
||||||
* [VIM-2217](https://youtrack.jetbrains.com/issue/VIM-2217) Fix adding new line at the end of the file for the AppCode
|
* [VIM-2217](https://youtrack.jetbrains.com/issue/VIM-2217) Fix adding new line at the end of the file for the AppCode
|
||||||
* [VIM-2220](https://youtrack.jetbrains.com/issue/VIM-2220) Do not try to get a commandState for null editor
|
* [VIM-2220](https://youtrack.jetbrains.com/issue/VIM-2220) Do not try to get a commandState for null editor
|
||||||
* [VIM-2153](https://youtrack.jetbrains.com/issue/VIM-2153) Fix storing special characters after IDE closing
|
|
||||||
|
|
||||||
### Merged PRs:
|
### Merged PRs:
|
||||||
* [269](https://github.com/JetBrains/ideavim/pull/269) by [大牙(Henry Zhu)](https://github.com/daya0576): fix invalid link of submodule docs
|
* [269](https://github.com/JetBrains/ideavim/pull/269) by [大牙(Henry Zhu)](https://github.com/daya0576): fix invalid link of submodule docs
|
||||||
@@ -634,7 +156,7 @@ Use `set ideavimsupport=` to disable IdeaVim in dialog editors.
|
|||||||
|
|
||||||
* <details>
|
* <details>
|
||||||
<summary><strong>Click to see details</strong></summary>
|
<summary><strong>Click to see details</strong></summary>
|
||||||
<img src="assets/changes/0.59/highlight_yank.gif" alt="highlight yank"/>
|
<img src="resources/changes/0.59/highlight_yank.gif" alt="highlight yank"/>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* [VIM-2068](https://youtrack.jetbrains.com/issue/VIM-2068) `:tabclose` command
|
* [VIM-2068](https://youtrack.jetbrains.com/issue/VIM-2068) `:tabclose` command
|
||||||
@@ -659,7 +181,7 @@ Use `set ideavimsupport=` to disable IdeaVim in dialog editors.
|
|||||||
|
|
||||||
* <details>
|
* <details>
|
||||||
<summary><strong>Click to see details</strong></summary>
|
<summary><strong>Click to see details</strong></summary>
|
||||||
<img src="assets/changes/0.58/reload_ideavimrc.png" alt="IdeaVimRc reload"/>
|
<img src="resources/changes/0.58/reload_ideavimrc.png" alt="IdeaVimRc reload"/>
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
* Add `:buffer` command.
|
* Add `:buffer` command.
|
||||||
|
@@ -1,12 +1,9 @@
|
|||||||
[![TeamCity Build][teamcity-build-status-svg]][teamcity-build-status]
|
[![TeamCity Build][teamcity-build-status-svg]][teamcity-build-status]
|
||||||
|
|
||||||
IdeaVim is an open source project created by 80+ contributors. Would you like to make it even better? That’s wonderful!
|
IdeaVim is an open source project created by 60+ contributors. Would you like to make it even better? That’s wonderful!
|
||||||
|
|
||||||
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
This page is created to help you start contributing. And who knows, maybe in a few days this project will be brighter than ever!
|
||||||
|
|
||||||
:warning: The plugin is currently under a huge refactoring aiming to split into vim-engine and IdeaVim in order to
|
|
||||||
support the new [Fleet IDE](https://www.jetbrains.com/fleet/). Please see [Fleet refactoring](#Fleet-refactoring).
|
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
- The project is written in Kotlin and Java. Choose whichever language you feel more comfortable with,
|
||||||
@@ -32,11 +29,7 @@ OK, ready to do some coding?
|
|||||||
Yoo hoo! You’re all set to begin contributing.
|
Yoo hoo! You’re all set to begin contributing.
|
||||||
We've prepared some useful configurations for you:
|
We've prepared some useful configurations for you:
|
||||||
|
|
||||||
- `Start IJ with IdeaVim`
|

|
||||||
- `IdeaVim tests`
|
|
||||||
- `IdeaVim full verification`
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
And here are useful gradle commands:
|
And here are useful gradle commands:
|
||||||
|
|
||||||
@@ -68,9 +61,7 @@ If you are looking for:
|
|||||||
|
|
||||||
- Ex commands (`:set`, `:s`, `:nohlsearch`):
|
- Ex commands (`:set`, `:s`, `:nohlsearch`):
|
||||||
- Any particular ex command: package `com.maddyhome.idea.vim.ex.handler`.
|
- Any particular ex command: package `com.maddyhome.idea.vim.ex.handler`.
|
||||||
- Vim script grammar: `Vimscript.g4`.
|
- Ex command executor: `CommandHandler`.
|
||||||
- Vim script parsing: package `com.maddyhome.idea.vim.vimscript.parser`.
|
|
||||||
- Vim script executor: `Executor`.
|
|
||||||
|
|
||||||
- Extensions:
|
- Extensions:
|
||||||
- Extensions handler: `VimExtensionHandler`.
|
- Extensions handler: `VimExtensionHandler`.
|
||||||
@@ -78,7 +69,7 @@ If you are looking for:
|
|||||||
|
|
||||||
- Common features:
|
- Common features:
|
||||||
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
- State machine. How every particular keystroke is parsed in IdeaVim: `KeyHandler.handleKey()`.
|
||||||
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionServiceImpl`.
|
- Options (`incsearch`, `iskeyword`, `relativenumber`): `OptionsManager`.
|
||||||
- Plugin startup: `PluginStartup`.
|
- Plugin startup: `PluginStartup`.
|
||||||
- Notifications: `NotificationService`.
|
- Notifications: `NotificationService`.
|
||||||
- Status bar icon: `StatusBar.kt`.
|
- Status bar icon: `StatusBar.kt`.
|
||||||
@@ -91,16 +82,9 @@ Here are some guides for testing:
|
|||||||
|
|
||||||
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
|
1. Read the javadoc for the `@VimBehaviorDiffers` annotation in the source code.
|
||||||
|
|
||||||
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Use a few lines of code or
|
2. Please avoid senseless text like "dhjkwaldjwa", "asdasdasd", "123 123 123 123", etc. Try to choose an example
|
||||||
the following template:
|
text that is easy to read and understand what is wrong if the test fails. For example, take a few lines from your
|
||||||
```text
|
favorite poem, or use Vladimir Nabokov’s “A Discovery" if you don't have one.
|
||||||
Lorem Ipsum
|
|
||||||
|
|
||||||
Lorem ipsum dolor sit amet,
|
|
||||||
consectetur adipiscing elit
|
|
||||||
Sed in orci mauris.
|
|
||||||
Cras id tellus in ex imperdiet egestas.
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
|
3. Don't forget to test your functionality with line start, line end, file start, file end, empty line, multiple
|
||||||
carets, dollar motion, etc.
|
carets, dollar motion, etc.
|
||||||
@@ -131,17 +115,6 @@ so you can reuse your `.vimrc` settings.
|
|||||||
We also support proper command mappings (functions are mapped to `<Plug>...`), the operator function (`OperatorFunction`), and so on.
|
We also support proper command mappings (functions are mapped to `<Plug>...`), the operator function (`OperatorFunction`), and so on.
|
||||||
- Magic is supported as well. See `Magic`.
|
- Magic is supported as well. See `Magic`.
|
||||||
|
|
||||||
|
|
||||||
## Fleet refactoring
|
|
||||||
At the moment, IdeaVim is under an active refactoring aiming to split IdeaVim into two modules: vim-engine and IdeaVim.
|
|
||||||
|
|
||||||
If you develop a plugin that depends on IdeaVim: We have an instrument to check that our changes don't affect
|
|
||||||
the plugins in the marketplace. Also, we commit to support currently used API at least till the end of 2022.
|
|
||||||
If you still encounter any issues with the newer versions of IdeaVim, please [contact maintainers](https://github.com/JetBrains/ideavim#contact-maintainers).
|
|
||||||
We kindly ask you not to use anything from the new API (like `VimEditor`, `injector`) because at the moment we don't
|
|
||||||
guarantee the compatibility of this API in the future versions.
|
|
||||||
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
### I read the whole page but something is still unclear.
|
### I read the whole page but something is still unclear.
|
||||||
@@ -160,13 +133,13 @@ This is just terrible. [You know what to do](https://github.com/JetBrains/ideavi
|
|||||||
|
|
||||||
### Resources:
|
### Resources:
|
||||||
|
|
||||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||||
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
||||||
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
|
* [Unofficial discord server](https://jb.gg/bi6zp7)
|
||||||
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||||
* [Changelog](CHANGES.md)
|
* [Changelog](CHANGES.md)
|
||||||
* [Contributors listing](AUTHORS.md)
|
* [Contributors listing](AUTHORS.md)
|
||||||
|
|
||||||
[teamcity-build-status]: https://ideavim.teamcity.com/viewType.html?buildTypeId=Ideavim_IdeaVimTests_Latest_EAP&guest=1
|
[teamcity-build-status]: https://teamcity.jetbrains.com/viewType.html?buildTypeId=IdeaVim_TestsForIntelliJEAP&guest=1
|
||||||
[teamcity-build-status-svg]: https://ideavim.teamcity.com/app/rest/builds/buildType:(id:Ideavim_IdeaVimTests_Latest_EAP)/statusIcon.svg?guest=1
|
[teamcity-build-status-svg]: https://teamcity.jetbrains.com/app/rest/builds/buildType:(id:IdeaVim_TestsForIntelliJEAP)/statusIcon.svg?guest=1
|
||||||
|
352
LICENSE.txt
352
LICENSE.txt
@@ -1,21 +1,339 @@
|
|||||||
MIT License
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (c) 2003-present The IdeaVim authors
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Preamble
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The licenses for most software are designed to take away your
|
||||||
copies or substantial portions of the Software.
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
When we speak of free software, we are referring to freedom, not
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
have the freedom to distribute copies of free software (and charge for
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
this service if you wish), that you receive source code or can get it
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
if you want it, that you can change the software or use pieces of it
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
in new free programs; and that you know you can do these things.
|
||||||
SOFTWARE.
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
165
README.md
165
README.md
@@ -1,4 +1,4 @@
|
|||||||
<img src="src/main/resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/>
|
<img src="resources/META-INF/pluginIcon.svg" width="80" height="80" alt="icon" align="left"/>
|
||||||
|
|
||||||
IdeaVim
|
IdeaVim
|
||||||
===
|
===
|
||||||
@@ -9,23 +9,21 @@ IdeaVim
|
|||||||
[![Rating][plugin-rating-svg]][plugin-repo]
|
[![Rating][plugin-rating-svg]][plugin-repo]
|
||||||
[![Version][plugin-version-svg]][plugin-repo]
|
[![Version][plugin-version-svg]][plugin-repo]
|
||||||
[![Gitter][gitter-svg]][gitter]
|
[![Gitter][gitter-svg]][gitter]
|
||||||
[](https://codecov.io/gh/JetBrains/ideavim)
|
|
||||||
[![Twitter][twitter-svg]][twitter]
|
[![Twitter][twitter-svg]][twitter]
|
||||||
|
|
||||||
IdeaVim is a Vim engine for JetBrains IDEs.
|
IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.
|
||||||
|
|
||||||
##### Contact maintainers:
|
##### Contact maintainers:
|
||||||
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)
|
||||||
* [@IdeaVim](https://twitter.com/ideavim) on Twitter
|
* [@IdeaVim](https://twitter.com/ideavim) on Twitter
|
||||||
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
* [Chat on gitter](https://gitter.im/JetBrains/ideavim)
|
||||||
* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)
|
* [Unofficial discord server](https://jb.gg/bi6zp7)
|
||||||
|
|
||||||
##### Resources:
|
##### Resources:
|
||||||
|
|
||||||
* [Plugin homepage](https://lp.jetbrains.com/ideavim/)
|
* [Plugin homepage](https://plugins.jetbrains.com/plugin/164-ideavim)
|
||||||
* [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim)
|
|
||||||
* [Changelog](CHANGES.md)
|
* [Changelog](CHANGES.md)
|
||||||
* [Continuous integration builds](https://ideavim.teamcity.com/)
|
* [Continuous integration builds](https://teamcity.jetbrains.com/project.html?projectId=IdeaVim&guest=1)
|
||||||
|
|
||||||
#### Compatibility
|
#### Compatibility
|
||||||
|
|
||||||
@@ -38,13 +36,13 @@ Setup
|
|||||||
- IdeaVim can be installed via `Settings | Plugins`.
|
- IdeaVim can be installed via `Settings | Plugins`.
|
||||||
See the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#).
|
See the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#).
|
||||||
|
|
||||||
- Use `Tools | Vim` in the menu to enable or disable vim.
|
- Use `Tools | Vim Emulator` to enable or disable emulation.
|
||||||
|
|
||||||
- Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well.
|
- Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well.
|
||||||
|
|
||||||
- Shortcut conflicts can be resolved by using:
|
- Shortcut conflicts can be resolved by using:
|
||||||
- On Linux & Windows: `File | Settings | Editor | Vim` & `File | Settings | Keymap`,
|
- On Linux & Windows: `File | Settings | Editor | Vim Emulation` & `File | Settings | Keymap`,
|
||||||
- On macOS: `Preferences | Editor | Vim` & `Preferences | Keymap`,
|
- On macOS: `Preferences | Editor | Vim Emulation` & `Preferences | Keymap`,
|
||||||
- Regular Vim mappings in the `~/.ideavimrc` file.
|
- Regular Vim mappings in the `~/.ideavimrc` file.
|
||||||
|
|
||||||
Get Early Access
|
Get Early Access
|
||||||
@@ -53,17 +51,15 @@ Get Early Access
|
|||||||
Would you like to try new features and fixes? Join the Early Access Program and
|
Would you like to try new features and fixes? Join the Early Access Program and
|
||||||
receive EAP builds as updates!
|
receive EAP builds as updates!
|
||||||
|
|
||||||
1. Click the IdeaVim icon <img src="src/main/resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
|
1. Click the IdeaVim icon <img src="resources/META-INF/pluginIcon_noBorders.svg" width="16" height="16" alt="icon"/>
|
||||||
in the status bar | `Early Access Program` | `Subscribe to EAP`
|
in the status bar | `EAP` | `Get Early Access...`
|
||||||
|
|
||||||
|
|
||||||
Or subscribe to EAP updates manually:
|
Or subscribe to EAP updates manually:
|
||||||
|
|
||||||
1. Open `Settings | Plugins`
|
1. Open `Settings | Plugins`
|
||||||
2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url:
|
2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url:
|
||||||
```
|
`https://plugins.jetbrains.com/plugins/eap/ideavim`
|
||||||
https://plugins.jetbrains.com/plugins/eap/ideavim
|
|
||||||
```
|
|
||||||
|
|
||||||
See [the changelog](CHANGES.md) for the list of unreleased features.
|
See [the changelog](CHANGES.md) for the list of unreleased features.
|
||||||
|
|
||||||
@@ -90,10 +86,9 @@ Here are some examples of supported vim features and commands:
|
|||||||
* Vim web help
|
* Vim web help
|
||||||
* `~/.ideavimrc` configuration file
|
* `~/.ideavimrc` configuration file
|
||||||
|
|
||||||
[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins):
|
[Emulated Vim plugins](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins):
|
||||||
|
|
||||||
* vim-easymotion
|
* vim-easymotion
|
||||||
* NERDTree
|
|
||||||
* vim-surround
|
* vim-surround
|
||||||
* vim-multiple-cursors
|
* vim-multiple-cursors
|
||||||
* vim-commentary
|
* vim-commentary
|
||||||
@@ -102,17 +97,12 @@ Here are some examples of supported vim features and commands:
|
|||||||
* ReplaceWithRegister
|
* ReplaceWithRegister
|
||||||
* vim-exchange
|
* vim-exchange
|
||||||
* vim-highlightedyank
|
* vim-highlightedyank
|
||||||
* vim-paragraph-motion
|
|
||||||
* vim-indent-object
|
|
||||||
* match.it
|
|
||||||
etc
|
|
||||||
|
|
||||||
See also:
|
See also:
|
||||||
|
|
||||||
* [The list of all supported commands](src/main/java/com/maddyhome/idea/vim/package-info.java)
|
* [The list of all supported commands](src/com/maddyhome/idea/vim/package-info.java)
|
||||||
* [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
|
* [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)
|
||||||
* [Vimscript support roadmap](vimscript-info/VIMSCRIPT_ROADMAP.md)
|
|
||||||
* [List of supported in-build functions](vimscript-info/FUNCTIONS_INFO.MD)
|
|
||||||
|
|
||||||
Files
|
Files
|
||||||
-----
|
-----
|
||||||
@@ -175,11 +165,11 @@ map <leader>o <Action>(FileStructurePopup)
|
|||||||
Here is also a list of the suggested options from [defaults.vim](https://github.com/vim/vim/blob/master/runtime/defaults.vim)
|
Here is also a list of the suggested options from [defaults.vim](https://github.com/vim/vim/blob/master/runtime/defaults.vim)
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
" Show a few lines of context around the cursor. Note that this makes the
|
" Show a few lines of context around the cursor. Note that this makes the
|
||||||
" text scroll if you mouse-click near the start or end of the window.
|
" text scroll if you mouse-click near the start or end of the window.
|
||||||
set scrolloff=5
|
set scrolloff=5
|
||||||
|
|
||||||
" Do incremental searching.
|
" Do incremental searching
|
||||||
set incsearch
|
set incsearch
|
||||||
|
|
||||||
" Don't use Ex mode, use Q for formatting.
|
" Don't use Ex mode, use Q for formatting.
|
||||||
@@ -192,6 +182,10 @@ You can read your `~/.vimrc` file from `~/.ideavimrc` with this command:
|
|||||||
|
|
||||||
source ~/.vimrc
|
source ~/.vimrc
|
||||||
|
|
||||||
|
> :warning: Please note that IdeaVim currently parses `~/.ideavimrc` & `~/.vimrc` files via simple pattern-matching.
|
||||||
|
See [VIM-669](https://youtrack.jetbrains.com/issue/VIM-669) for proper parsing
|
||||||
|
of VimL files.
|
||||||
|
|
||||||
Also note that if you have overridden the `user.home` JVM option, this
|
Also note that if you have overridden the `user.home` JVM option, this
|
||||||
will affect where IdeaVim looks for your `.ideavimrc` file. For example, if you
|
will affect where IdeaVim looks for your `.ideavimrc` file. For example, if you
|
||||||
have `-Duser.home=/my/alternate/home` then IdeaVim will source
|
have `-Duser.home=/my/alternate/home` then IdeaVim will source
|
||||||
@@ -201,10 +195,10 @@ Alternatively, you can set up initialization commands using [XDG](https://specif
|
|||||||
Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
|
Put your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.
|
||||||
|
|
||||||
|
|
||||||
IdeaVim Plugins
|
Emulated Vim Plugins
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
See [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)
|
See [doc/emulated-plugins.md](https://github.com/JetBrains/ideavim/wiki/Emulated-plugins)
|
||||||
|
|
||||||
Executing IDE Actions
|
Executing IDE Actions
|
||||||
---------------------
|
---------------------
|
||||||
@@ -212,34 +206,25 @@ Executing IDE Actions
|
|||||||
IdeaVim adds various commands for listing and executing arbitrary IDE actions as
|
IdeaVim adds various commands for listing and executing arbitrary IDE actions as
|
||||||
Ex commands or via `:map` command mappings:
|
Ex commands or via `:map` command mappings:
|
||||||
|
|
||||||
### Executing actions:
|
**Executing actions:**
|
||||||
* `<Action>({action_id})`
|
|
||||||
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
|
||||||
* E.g. `map gh <Action>(ShowErrorDescription)` <- execute hover on `gh`.
|
|
||||||
* :warning: Mappings to `<Action>` don't work with `noremap`.
|
|
||||||
If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).
|
|
||||||
* `:action {action_id}`
|
* `:action {action_id}`
|
||||||
* Execute an action by `{action_id}`. Works from Ex command line.
|
* Execute an action by id. Works from Ex command line.
|
||||||
* Please don't use `:action` in mappings. Use `<Action>` instead.
|
* `<Action>(*action_id*)`
|
||||||
|
* For the mappings you can use a special `<Action>` keyword. Don't forget the parentheses.
|
||||||
### Finding action IDs:
|
|
||||||
|
|
||||||
* IJ provides `IdeaVim: track action IDs` command to show the id of the executed actions.
|
|
||||||
This command can be found in "Search everywhere" (double `shift`).
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><strong>"Track action IDs" Details</strong> (click to see)</summary>
|
|
||||||
<picture>
|
|
||||||
<source media="(prefers-color-scheme: dark)" srcset="assets/readme/track_action_dark.gif">
|
|
||||||
<img src="assets/readme/track_action_light.gif" alt="track action ids"/>
|
|
||||||
</picture>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
|
**Finding actions:**
|
||||||
* `:actionlist [pattern]`
|
* `:actionlist [pattern]`
|
||||||
* Find IDE actions by id or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`)
|
* Find IDE actions by id or keymap pattern (E.g. `:actionlist extract`, `:actionlist <C-D`)
|
||||||
|
|
||||||
|
* In addition to `:actionlist` command, IdeaVim provides `IdeaVim: track action Ids` option to
|
||||||
|
extract the ids of executed command. This option can be found in "Search everywhere" (double `shift`).
|
||||||
|
|
||||||
##### Examples:
|
<details>
|
||||||
|
<summary><strong>"Track action Ids" Details</strong> (click to see)</summary>
|
||||||
|
<img src="resources/readme/track_action_id.gif" alt="track action ids"/>
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
```vim
|
```vim
|
||||||
" Map \r to the Reformat Code action
|
" Map \r to the Reformat Code action
|
||||||
@@ -252,59 +237,6 @@ Ex commands or via `:map` command mappings:
|
|||||||
:map \b <Action>(ToggleLineBreakpoint)
|
:map \b <Action>(ToggleLineBreakpoint)
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Some popular actions:
|
|
||||||
|
|
||||||
```
|
|
||||||
ShowHoverInfo - Quick Documentation and Error Description
|
|
||||||
QuickImplementations - Quick Definition
|
|
||||||
```
|
|
||||||
|
|
||||||
Vim Script
|
|
||||||
------------
|
|
||||||
|
|
||||||
IdeaVim can execute custom scripts that are written with Vim Script.
|
|
||||||
At the moment we support all language features, but not all of the built-in functions and options are supported.
|
|
||||||
|
|
||||||
Additionally, you may be interested in the
|
|
||||||
[Vim Script Discussion](https://github.com/JetBrains/ideavim/discussions/357) or
|
|
||||||
[Vim Script Roadmap](https://github.com/JetBrains/ideavim/blob/master/vimscript-info/VIMSCRIPT_ROADMAP.md).
|
|
||||||
|
|
||||||
|
|
||||||
### IDE specific options
|
|
||||||
|
|
||||||
You can evaluate the `has('ide')` function call and get `1` if it was called with IdeaVim or `0` if the function was called from Vim/NeoVim.
|
|
||||||
The option `&ide` contains the name and edition of your IDE, for example, "IntelliJ IDEA Ultimate Edition".
|
|
||||||
To see its value for the current IDE you are using, execute the `:echo &ide` command.
|
|
||||||
To write an IDE-specific configuration, use Vim's regexp match operators `=~?` (case-insensitive) / `=~#` (case-sensitive)
|
|
||||||
|
|
||||||
**Example config:**
|
|
||||||
|
|
||||||
```vim
|
|
||||||
" options and mappings that are supported by both Vim and IdeaVim
|
|
||||||
set nu
|
|
||||||
set relativenumber
|
|
||||||
|
|
||||||
if has('ide')
|
|
||||||
" mappings and options that exist only in IdeaVim
|
|
||||||
map <leader>f <Action>(GotoFile)
|
|
||||||
map <leader>g <Action>(FindInPath)
|
|
||||||
map <leader>b <Action>(Switcher)
|
|
||||||
|
|
||||||
if &ide =~? 'intellij idea'
|
|
||||||
if &ide =~? 'community'
|
|
||||||
" some mappings and options for IntelliJ IDEA Community Edition
|
|
||||||
elseif &ide =~? 'ultimate'
|
|
||||||
" some mappings and options for IntelliJ IDEA Ultimate Edition
|
|
||||||
endif
|
|
||||||
elseif &ide =~? 'pycharm'
|
|
||||||
" PyCharm specific mappings and options
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
" some mappings for Vim/Neovim
|
|
||||||
nnoremap <leader>f <cmd>Telescope find_files<cr>
|
|
||||||
endif
|
|
||||||
```
|
|
||||||
|
|
||||||
:gem: Contributing
|
:gem: Contributing
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -324,10 +256,14 @@ IdeaVim tips and tricks
|
|||||||
- Use the power of IJ and Vim:
|
- Use the power of IJ and Vim:
|
||||||
- `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).
|
- `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).
|
||||||
- Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.
|
- Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.
|
||||||
- Sync IJ bookmarks and IdeaVim global marks: `set ideamarks` (works for marks with capital letters only)
|
- Sync IJ bookmarks and Vim marks: `set ideamarks`
|
||||||
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
- Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||||
|
|
||||||
- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.
|
- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.
|
||||||
|
> :warning: Please note that IdeaVim currently parses `~/.ideavimrc` & `~/.vimrc` files via simple pattern-matching.
|
||||||
|
See [VIM-669](https://youtrack.jetbrains.com/issue/VIM-669) for proper parsing
|
||||||
|
of VimL files.
|
||||||
|
|
||||||
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||||
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/%22set%22-commands).
|
||||||
|
|
||||||
@@ -352,12 +288,9 @@ is the source of this knowledge.
|
|||||||
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
|
[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)
|
||||||
is the full list of synonyms.
|
is the full list of synonyms.
|
||||||
|
|
||||||
- You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim.
|
|
||||||
|
|
||||||
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
|
- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).
|
||||||
|
|
||||||
- A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
- A lot of variables that refers to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).
|
||||||
As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11.
|
|
||||||
|
|
||||||
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
|
- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:
|
||||||
* ":3" jumps to line 3
|
* ":3" jumps to line 3
|
||||||
@@ -366,21 +299,11 @@ is the full list of synonyms.
|
|||||||
|
|
||||||
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
|
- Vim script doesn't skip white space before comma. `F(a ,b)` => E475.
|
||||||
|
|
||||||
- Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27):
|
|
||||||
> The local value is set to -123456 when the global value is to be used.
|
|
||||||
|
|
||||||
- Vi (not Vim) is a POSIX standard, and [has a spec](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html)! Vim is mostly POSIX compliant when Vi compatibility is selected with the `'compatible'` option, but there are still some differences that can be changed with `'copoptions'`. The spec is interesting because it documents the behaviour of different commands in a stricter style than the user documentation, describing the current line and column after the command, for example. [More details can be found by reading `:help posix`](https://vimhelp.org/vi_diff.txt.html#posix).
|
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
||||||
IdeaVim is licensed under the MIT license.
|
IdeaVim is licensed under the terms of the GNU Public License version 2
|
||||||
|
or any later version.
|
||||||
Third-party components and licenses are listed in [ThirdPartyLicenses.md](ThirdPartyLicenses.md).
|
|
||||||
|
|
||||||
All releases before 2.0.0 were licensed under terms of GPL-2.0 or later.
|
|
||||||
The last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5.
|
|
||||||
You can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Badges -->
|
<!-- Badges -->
|
||||||
|
@@ -1,90 +0,0 @@
|
|||||||
IdeaVim project is licensed under MIT license except the following parts of it:
|
|
||||||
|
|
||||||
* File [ScrollViewHelper.kt](com/maddyhome/idea/vim/helper/ScrollViewHelper.kt) is licensed under Vim License.
|
|
||||||
* File [Tutor.kt](src/main/java/com/maddyhome/idea/vim/ui/Tutor.kt) is licensed under Vim License.
|
|
||||||
|
|
||||||
```
|
|
||||||
VIM LICENSE
|
|
||||||
|
|
||||||
I) There are no restrictions on distributing unmodified copies of Vim except
|
|
||||||
that they must include this license text. You can also distribute
|
|
||||||
unmodified parts of Vim, likewise unrestricted except that they must
|
|
||||||
include this license text. You are also allowed to include executables
|
|
||||||
that you made from the unmodified Vim sources, plus your own usage
|
|
||||||
examples and Vim scripts.
|
|
||||||
|
|
||||||
II) It is allowed to distribute a modified (or extended) version of Vim,
|
|
||||||
including executables and/or source code, when the following four
|
|
||||||
conditions are met:
|
|
||||||
1) This license text must be included unmodified.
|
|
||||||
2) The modified Vim must be distributed in one of the following five ways:
|
|
||||||
a) If you make changes to Vim yourself, you must clearly describe in
|
|
||||||
the distribution how to contact you. When the maintainer asks you
|
|
||||||
(in any way) for a copy of the modified Vim you distributed, you
|
|
||||||
must make your changes, including source code, available to the
|
|
||||||
maintainer without fee. The maintainer reserves the right to
|
|
||||||
include your changes in the official version of Vim. What the
|
|
||||||
maintainer will do with your changes and under what license they
|
|
||||||
will be distributed is negotiable. If there has been no negotiation
|
|
||||||
then this license, or a later version, also applies to your changes.
|
|
||||||
The current maintainers are listed here: https://github.com/orgs/vim/people.
|
|
||||||
If this changes it will be announced in appropriate places (most likely
|
|
||||||
vim.sf.net, www.vim.org and/or comp.editors). When it is completely
|
|
||||||
impossible to contact the maintainer, the obligation to send him
|
|
||||||
your changes ceases. Once the maintainer has confirmed that he has
|
|
||||||
received your changes they will not have to be sent again.
|
|
||||||
b) If you have received a modified Vim that was distributed as
|
|
||||||
mentioned under a) you are allowed to further distribute it
|
|
||||||
unmodified, as mentioned at I). If you make additional changes the
|
|
||||||
text under a) applies to those changes.
|
|
||||||
c) Provide all the changes, including source code, with every copy of
|
|
||||||
the modified Vim you distribute. This may be done in the form of a
|
|
||||||
context diff. You can choose what license to use for new code you
|
|
||||||
add. The changes and their license must not restrict others from
|
|
||||||
making their own changes to the official version of Vim.
|
|
||||||
d) When you have a modified Vim which includes changes as mentioned
|
|
||||||
under c), you can distribute it without the source code for the
|
|
||||||
changes if the following three conditions are met:
|
|
||||||
- The license that applies to the changes permits you to distribute
|
|
||||||
the changes to the Vim maintainer without fee or restriction, and
|
|
||||||
permits the Vim maintainer to include the changes in the official
|
|
||||||
version of Vim without fee or restriction.
|
|
||||||
- You keep the changes for at least three years after last
|
|
||||||
distributing the corresponding modified Vim. When the maintainer
|
|
||||||
or someone who you distributed the modified Vim to asks you (in
|
|
||||||
any way) for the changes within this period, you must make them
|
|
||||||
available to him.
|
|
||||||
- You clearly describe in the distribution how to contact you. This
|
|
||||||
contact information must remain valid for at least three years
|
|
||||||
after last distributing the corresponding modified Vim, or as long
|
|
||||||
as possible.
|
|
||||||
e) When the GNU General Public License (GPL) applies to the changes,
|
|
||||||
you can distribute the modified Vim under the GNU GPL version 2 or
|
|
||||||
any later version.
|
|
||||||
3) A message must be added, at least in the output of the ":version"
|
|
||||||
command and in the intro screen, such that the user of the modified Vim
|
|
||||||
is able to see that it was modified. When distributing as mentioned
|
|
||||||
under 2)e) adding the message is only required for as far as this does
|
|
||||||
not conflict with the license used for the changes.
|
|
||||||
4) The contact information as required under 2)a) and 2)d) must not be
|
|
||||||
removed or changed, except that the person himself can make
|
|
||||||
corrections.
|
|
||||||
|
|
||||||
III) If you distribute a modified version of Vim, you are encouraged to use
|
|
||||||
the Vim license for your changes and make them available to the
|
|
||||||
maintainer, including the source code. The preferred way to do this is
|
|
||||||
by e-mail or by uploading the files to a server and e-mailing the URL.
|
|
||||||
If the number of changes is small (e.g., a modified Makefile) e-mailing a
|
|
||||||
context diff will do. The e-mail address to be used is
|
|
||||||
<maintainer@vim.org>
|
|
||||||
|
|
||||||
IV) It is not allowed to remove this license from the distribution of the Vim
|
|
||||||
sources, parts of it or from a modified version. You may use this
|
|
||||||
license for previous Vim releases instead of the license that they came
|
|
||||||
with, at your option.
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
File [sneakIcon.png](doc/images/sneakIcon.svg), which is originally an icon of the ideavim-sneak plugin,
|
|
||||||
is merged icons of IdeaVim plugin and a random sneaker by FreePic from flaticon.com.
|
|
42
annotation-processors/.gitignore
vendored
42
annotation-processors/.gitignore
vendored
@@ -1,42 +0,0 @@
|
|||||||
.gradle
|
|
||||||
build/
|
|
||||||
!gradle/wrapper/gradle-wrapper.jar
|
|
||||||
!**/src/main/**/build/
|
|
||||||
!**/src/test/**/build/
|
|
||||||
|
|
||||||
### IntelliJ IDEA ###
|
|
||||||
.idea/modules.xml
|
|
||||||
.idea/jarRepositories.xml
|
|
||||||
.idea/compiler.xml
|
|
||||||
.idea/libraries/
|
|
||||||
*.iws
|
|
||||||
*.iml
|
|
||||||
*.ipr
|
|
||||||
out/
|
|
||||||
!**/src/main/**/out/
|
|
||||||
!**/src/test/**/out/
|
|
||||||
|
|
||||||
### Eclipse ###
|
|
||||||
.apt_generated
|
|
||||||
.classpath
|
|
||||||
.factorypath
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
.springBeans
|
|
||||||
.sts4-cache
|
|
||||||
bin/
|
|
||||||
!**/src/main/**/bin/
|
|
||||||
!**/src/test/**/bin/
|
|
||||||
|
|
||||||
### NetBeans ###
|
|
||||||
/nbproject/private/
|
|
||||||
/nbbuild/
|
|
||||||
/dist/
|
|
||||||
/nbdist/
|
|
||||||
/.nb-gradle/
|
|
||||||
|
|
||||||
### VS Code ###
|
|
||||||
.vscode/
|
|
||||||
|
|
||||||
### Mac OS ###
|
|
||||||
.DS_Store
|
|
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
kotlin("jvm")
|
|
||||||
kotlin("plugin.serialization") version "2.0.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
val kotlinxSerializationVersion: String by project
|
|
||||||
|
|
||||||
group = "com.intellij"
|
|
||||||
version = "SNAPSHOT"
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly("com.google.devtools.ksp:symbol-processing-api:2.0.0-1.0.24")
|
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:$kotlinxSerializationVersion") {
|
|
||||||
// kotlin stdlib is provided by IJ, so there is no need to include it into the distribution
|
|
||||||
exclude("org.jetbrains.kotlin", "kotlin-stdlib")
|
|
||||||
exclude("org.jetbrains.kotlin", "kotlin-stdlib-common")
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.annotations
|
|
||||||
|
|
||||||
// TODO support numpad keys parsing, see :keycodes
|
|
||||||
/**
|
|
||||||
* It's not necessary a Vim command
|
|
||||||
* This annotation may be used for:
|
|
||||||
* - commands
|
|
||||||
* - motions
|
|
||||||
*/
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.SOURCE)
|
|
||||||
annotation class CommandOrMotion(val keys: Array<String>, vararg val modes: Mode)
|
|
||||||
|
|
||||||
annotation class TextObject(val keys: String)
|
|
||||||
|
|
||||||
|
|
||||||
enum class Mode(val abbrev: Char) {
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Normal mode
|
|
||||||
*/
|
|
||||||
NORMAL('N'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Visual mode
|
|
||||||
*/
|
|
||||||
VISUAL('X'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Select mode
|
|
||||||
*/
|
|
||||||
SELECT('S'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Operator Pending mode
|
|
||||||
*/
|
|
||||||
OP_PENDING('O'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Insert or Replace modes
|
|
||||||
*/
|
|
||||||
INSERT('I'),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates this key mapping applies to Command Line mode
|
|
||||||
*/
|
|
||||||
CMD_LINE('C'),
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.annotations
|
|
||||||
|
|
||||||
/**
|
|
||||||
* [command] is formatted the same way it is formatted in Vim (with optional part in square brackets).
|
|
||||||
*/
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.SOURCE)
|
|
||||||
annotation class ExCommand(val command: String)
|
|
@@ -1,13 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.annotations
|
|
||||||
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.SOURCE)
|
|
||||||
annotation class VimscriptFunction(val name: String)
|
|
@@ -1,14 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.processors
|
|
||||||
|
|
||||||
import kotlinx.serialization.Serializable
|
|
||||||
|
|
||||||
@Serializable
|
|
||||||
data class CommandBean(val keys: String, val `class`: String, val modes: String)
|
|
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.processors
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.KspExperimental
|
|
||||||
import com.google.devtools.ksp.getAnnotationsByType
|
|
||||||
import com.google.devtools.ksp.processing.Resolver
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
|
||||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
|
||||||
import com.google.devtools.ksp.symbol.KSFile
|
|
||||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
|
||||||
import com.intellij.vim.annotations.CommandOrMotion
|
|
||||||
import kotlinx.serialization.encodeToString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import java.nio.file.Files
|
|
||||||
import kotlin.io.path.Path
|
|
||||||
import kotlin.io.path.writeText
|
|
||||||
|
|
||||||
class CommandOrMotionProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
|
|
||||||
private val visitor = CommandOrMotionVisitor()
|
|
||||||
private val commands = mutableListOf<CommandBean>()
|
|
||||||
|
|
||||||
private val json = Json { prettyPrint = true }
|
|
||||||
|
|
||||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
|
||||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
|
||||||
|
|
||||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
|
||||||
Files.createDirectories(generatedDirPath)
|
|
||||||
|
|
||||||
val filePath = generatedDirPath.resolve(environment.options["commands_file"]!!)
|
|
||||||
val fileContent = json.encodeToString(commands)
|
|
||||||
filePath.writeText(fileContent)
|
|
||||||
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class CommandOrMotionVisitor : KSVisitorVoid() {
|
|
||||||
@OptIn(KspExperimental::class)
|
|
||||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
|
||||||
val commandAnnotation = classDeclaration.getAnnotationsByType(CommandOrMotion::class).firstOrNull() ?: return
|
|
||||||
for (key in commandAnnotation.keys) {
|
|
||||||
commands.add(
|
|
||||||
CommandBean(key, classDeclaration.qualifiedName!!.asString(), commandAnnotation.modes.map { it.abbrev }.joinToString(separator = ""))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitFile(file: KSFile, data: Unit) {
|
|
||||||
file.declarations.forEach { it.accept(this, Unit) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.processors
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.KspExperimental
|
|
||||||
import com.google.devtools.ksp.getAnnotationsByType
|
|
||||||
import com.google.devtools.ksp.processing.Resolver
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
|
||||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
|
||||||
import com.google.devtools.ksp.symbol.KSFile
|
|
||||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
|
||||||
import com.intellij.vim.annotations.ExCommand
|
|
||||||
import kotlinx.serialization.encodeToString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import java.nio.file.Files
|
|
||||||
import kotlin.io.path.Path
|
|
||||||
import kotlin.io.path.writeText
|
|
||||||
|
|
||||||
class ExCommandProcessor(private val environment: SymbolProcessorEnvironment): SymbolProcessor {
|
|
||||||
private val visitor = EXCommandVisitor()
|
|
||||||
private val commandToClass = mutableMapOf<String, String>()
|
|
||||||
|
|
||||||
private val json = Json { prettyPrint = true }
|
|
||||||
|
|
||||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
|
||||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
|
||||||
|
|
||||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
|
||||||
Files.createDirectories(generatedDirPath)
|
|
||||||
|
|
||||||
val filePath = generatedDirPath.resolve(environment.options["ex_commands_file"]!!)
|
|
||||||
val fileContent = json.encodeToString(commandToClass)
|
|
||||||
filePath.writeText(fileContent)
|
|
||||||
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
|
|
||||||
private inner class EXCommandVisitor : KSVisitorVoid() {
|
|
||||||
@OptIn(KspExperimental::class)
|
|
||||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
|
||||||
val exCommandAnnotation = classDeclaration.getAnnotationsByType(ExCommand::class).firstOrNull() ?: return
|
|
||||||
val commands = exCommandAnnotation.command.split(",")
|
|
||||||
for (command in commands) {
|
|
||||||
commandToClass[command] = classDeclaration.qualifiedName!!.asString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitFile(file: KSFile, data: Unit) {
|
|
||||||
file.declarations.forEach { it.accept(this, Unit) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.processors
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.KspExperimental
|
|
||||||
import com.google.devtools.ksp.getAnnotationsByType
|
|
||||||
import com.google.devtools.ksp.processing.Resolver
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.symbol.KSAnnotated
|
|
||||||
import com.google.devtools.ksp.symbol.KSClassDeclaration
|
|
||||||
import com.google.devtools.ksp.symbol.KSFile
|
|
||||||
import com.google.devtools.ksp.symbol.KSVisitorVoid
|
|
||||||
import com.intellij.vim.annotations.VimscriptFunction
|
|
||||||
import kotlinx.serialization.encodeToString
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import java.nio.file.Files
|
|
||||||
import kotlin.io.path.Path
|
|
||||||
import kotlin.io.path.writeText
|
|
||||||
|
|
||||||
class VimscriptFunctionProcessor(private val environment: SymbolProcessorEnvironment) : SymbolProcessor {
|
|
||||||
private val visitor = VimscriptFunctionVisitor()
|
|
||||||
private val nameToClass = mutableMapOf<String, String>()
|
|
||||||
|
|
||||||
private val json = Json { prettyPrint = true }
|
|
||||||
|
|
||||||
override fun process(resolver: Resolver): List<KSAnnotated> {
|
|
||||||
resolver.getAllFiles().forEach { it.accept(visitor, Unit) }
|
|
||||||
|
|
||||||
val generatedDirPath = Path(environment.options["generated_directory"]!!)
|
|
||||||
Files.createDirectories(generatedDirPath)
|
|
||||||
|
|
||||||
val filePath = generatedDirPath.resolve(environment.options["vimscript_functions_file"]!!)
|
|
||||||
val fileContent = json.encodeToString(nameToClass)
|
|
||||||
filePath.writeText(fileContent)
|
|
||||||
|
|
||||||
return emptyList()
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo inspection that annotation is properly used on proper classes
|
|
||||||
private inner class VimscriptFunctionVisitor : KSVisitorVoid() {
|
|
||||||
@OptIn(KspExperimental::class)
|
|
||||||
override fun visitClassDeclaration(classDeclaration: KSClassDeclaration, data: Unit) {
|
|
||||||
val vimscriptFunctionAnnotation = classDeclaration.getAnnotationsByType(VimscriptFunction::class).firstOrNull() ?: return
|
|
||||||
val functionName = vimscriptFunctionAnnotation.name
|
|
||||||
nameToClass[functionName] = classDeclaration.qualifiedName!!.asString()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitFile(file: KSFile, data: Unit) {
|
|
||||||
file.declarations.forEach { it.accept(this, Unit) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.providers
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
|
||||||
import com.intellij.vim.processors.CommandOrMotionProcessor
|
|
||||||
|
|
||||||
class CommandOrMotionProcessorProvider : SymbolProcessorProvider {
|
|
||||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
|
||||||
return CommandOrMotionProcessor(environment)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.providers
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
|
||||||
import com.intellij.vim.processors.ExCommandProcessor
|
|
||||||
|
|
||||||
class ExCommandProcessorProvider : SymbolProcessorProvider {
|
|
||||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
|
||||||
return ExCommandProcessor(environment)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,20 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.intellij.vim.providers
|
|
||||||
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessor
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
|
|
||||||
import com.google.devtools.ksp.processing.SymbolProcessorProvider
|
|
||||||
import com.intellij.vim.processors.VimscriptFunctionProcessor
|
|
||||||
|
|
||||||
class VimscriptFunctionProcessorProvider : SymbolProcessorProvider {
|
|
||||||
override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
|
|
||||||
return VimscriptFunctionProcessor(environment)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,3 +0,0 @@
|
|||||||
com.intellij.vim.providers.CommandOrMotionProcessorProvider
|
|
||||||
com.intellij.vim.providers.ExCommandProcessorProvider
|
|
||||||
com.intellij.vim.providers.VimscriptFunctionProcessorProvider
|
|
Binary file not shown.
Before Width: | Height: | Size: 32 MiB |
Binary file not shown.
Before Width: | Height: | Size: 27 KiB |
Binary file not shown.
Before Width: | Height: | Size: 31 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.0 MiB |
Binary file not shown.
Before Width: | Height: | Size: 981 KiB |
181
build.gradle
Normal file
181
build.gradle
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
import dev.feedforward.markdownto.DownParser
|
||||||
|
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven { url 'https://jitpack.io' }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
||||||
|
classpath "com.github.AlexPl292:mark-down-to-slack:1.1.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id 'org.jetbrains.intellij' version '0.6.5'
|
||||||
|
id 'io.gitlab.arturbosch.detekt' version '1.15.0'
|
||||||
|
id "org.jetbrains.changelog" version "1.0.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'java'
|
||||||
|
apply plugin: 'kotlin'
|
||||||
|
|
||||||
|
sourceCompatibility = javaVersion
|
||||||
|
targetCompatibility = javaVersion
|
||||||
|
|
||||||
|
tasks.withType(JavaCompile) { options.encoding = 'UTF-8' }
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
java.srcDir 'src'
|
||||||
|
resources.srcDir 'resources'
|
||||||
|
}
|
||||||
|
test {
|
||||||
|
java.srcDir 'test'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
intellij {
|
||||||
|
version ideaVersion
|
||||||
|
pluginName 'IdeaVim'
|
||||||
|
updateSinceUntilBuild false
|
||||||
|
downloadSources Boolean.valueOf(downloadIdeaSources)
|
||||||
|
instrumentCode Boolean.valueOf(instrumentPluginCode)
|
||||||
|
intellijRepo = "https://www.jetbrains.com/intellij-repository"
|
||||||
|
plugins = ['java']
|
||||||
|
|
||||||
|
downloadRobotServerPlugin.version = "0.10.0"
|
||||||
|
|
||||||
|
publishPlugin {
|
||||||
|
channels publishChannels.split(',')
|
||||||
|
username publishUsername
|
||||||
|
token publishToken
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
runIdeForUiTests {
|
||||||
|
systemProperty "robot-server.port", "8082"
|
||||||
|
}
|
||||||
|
|
||||||
|
runPluginVerifier {
|
||||||
|
ideVersions = ["IC-2020.2.3", "IC-2020.3.2"]
|
||||||
|
downloadDirectory = "${project.buildDir}/pluginVerifier/ides"
|
||||||
|
teamCityOutputFormat = true
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
jcenter()
|
||||||
|
maven { url = "https://jetbrains.bintray.com/intellij-third-party-dependencies" }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
|
||||||
|
compileOnly "org.jetbrains:annotations:20.1.0"
|
||||||
|
|
||||||
|
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
|
||||||
|
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.0")
|
||||||
|
testImplementation 'com.ensarsarajcic.neovim.java:core-rpc:0.2.0'
|
||||||
|
|
||||||
|
testImplementation("com.intellij.remoterobot:remote-robot:0.10.3")
|
||||||
|
testImplementation("com.intellij.remoterobot:remote-fixtures:1.1.18")
|
||||||
|
}
|
||||||
|
|
||||||
|
compileKotlin {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = javaVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileTestKotlin {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = javaVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
detekt {
|
||||||
|
config = files("${rootProject.projectDir}/.detekt/config.yaml")
|
||||||
|
baseline = file("${rootProject.projectDir}/.detekt/baseline.xml")
|
||||||
|
input = files("src")
|
||||||
|
|
||||||
|
buildUponDefaultConfig = true
|
||||||
|
|
||||||
|
reports {
|
||||||
|
html.enabled = false
|
||||||
|
xml.enabled = false
|
||||||
|
txt.enabled = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.detekt.jvmTarget = javaVersion
|
||||||
|
|
||||||
|
task testWithNeovim(type: Test) {
|
||||||
|
group = "verification"
|
||||||
|
systemProperty "ideavim.nvim.test", 'true'
|
||||||
|
exclude '/ui/**'
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
exclude '**/propertybased/**'
|
||||||
|
exclude '/ui/**'
|
||||||
|
}
|
||||||
|
|
||||||
|
task testPropertyBased(type: Test) {
|
||||||
|
group = "verification"
|
||||||
|
include '**/propertybased/**'
|
||||||
|
}
|
||||||
|
|
||||||
|
task testUi(type: Test) {
|
||||||
|
group = "verification"
|
||||||
|
include '/ui/**'
|
||||||
|
}
|
||||||
|
|
||||||
|
changelog {
|
||||||
|
groups = ["Features:", "Changes:", "Deprecations:", "Fixes:", "Merged PRs:"]
|
||||||
|
itemPrefix = "*"
|
||||||
|
path = "${project.projectDir}/CHANGES.md"
|
||||||
|
unreleasedTerm = "To Be Released"
|
||||||
|
headerParserRegex = /0\.\d{2}(.\d+)?/
|
||||||
|
// header = { "${project.version}" }
|
||||||
|
// version = "0.60"
|
||||||
|
}
|
||||||
|
|
||||||
|
task getUnreleasedChangelog() {
|
||||||
|
group = "changelog"
|
||||||
|
doLast {
|
||||||
|
def log = changelog.getUnreleased().toHTML()
|
||||||
|
println log
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.register("slackEapNotification") {
|
||||||
|
doLast {
|
||||||
|
if (!slackUrl) return
|
||||||
|
def post = new URL(slackUrl).openConnection()
|
||||||
|
def changeLog = changelog.getUnreleased().toText()
|
||||||
|
def slackDown = new DownParser(changeLog, true).toSlack().toString()
|
||||||
|
def message = """
|
||||||
|
{
|
||||||
|
"text": "New version of IdeaVim",
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"type": "section",
|
||||||
|
"text": {
|
||||||
|
"type": "mrkdwn",
|
||||||
|
"text": "IdeaVim EAP $version has been released\\n$slackDown"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
post.setRequestMethod("POST")
|
||||||
|
post.setDoOutput(true)
|
||||||
|
post.setRequestProperty("Content-Type", "application/json")
|
||||||
|
post.getOutputStream().write(message.getBytes("UTF-8"))
|
||||||
|
def postRC = post.getResponseCode()
|
||||||
|
println(postRC)
|
||||||
|
if (postRC == 200) {
|
||||||
|
println(post.getInputStream().getText())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
993
build.gradle.kts
993
build.gradle.kts
@@ -1,993 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2003-2023 The IdeaVim authors
|
|
||||||
*
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE.txt file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import dev.feedforward.markdownto.DownParser
|
|
||||||
import io.ktor.client.*
|
|
||||||
import io.ktor.client.call.*
|
|
||||||
import io.ktor.client.engine.cio.*
|
|
||||||
import io.ktor.client.plugins.auth.*
|
|
||||||
import io.ktor.client.plugins.auth.providers.*
|
|
||||||
import io.ktor.client.plugins.contentnegotiation.*
|
|
||||||
import io.ktor.client.request.*
|
|
||||||
import io.ktor.http.*
|
|
||||||
import io.ktor.serialization.kotlinx.json.*
|
|
||||||
import kotlinx.coroutines.runBlocking
|
|
||||||
import kotlinx.serialization.json.Json
|
|
||||||
import kotlinx.serialization.json.JsonArray
|
|
||||||
import kotlinx.serialization.json.JsonObject
|
|
||||||
import kotlinx.serialization.json.addJsonObject
|
|
||||||
import kotlinx.serialization.json.buildJsonObject
|
|
||||||
import kotlinx.serialization.json.jsonArray
|
|
||||||
import kotlinx.serialization.json.jsonObject
|
|
||||||
import kotlinx.serialization.json.jsonPrimitive
|
|
||||||
import kotlinx.serialization.json.put
|
|
||||||
import kotlinx.serialization.json.putJsonArray
|
|
||||||
import kotlinx.serialization.json.putJsonObject
|
|
||||||
import org.eclipse.jgit.api.Git
|
|
||||||
import org.eclipse.jgit.lib.RepositoryBuilder
|
|
||||||
import org.intellij.markdown.ast.getTextInNode
|
|
||||||
import org.jetbrains.changelog.Changelog
|
|
||||||
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
|
|
||||||
import org.jetbrains.intellij.platform.gradle.tasks.aware.SplitModeAware
|
|
||||||
import org.kohsuke.github.GHUser
|
|
||||||
import java.net.HttpURLConnection
|
|
||||||
import java.net.URL
|
|
||||||
|
|
||||||
buildscript {
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
maven { url = uri("https://jitpack.io") }
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0")
|
|
||||||
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
|
|
||||||
classpath("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
|
|
||||||
|
|
||||||
// This is needed for jgit to connect to ssh
|
|
||||||
classpath("org.eclipse.jgit:org.eclipse.jgit.ssh.apache:6.10.0.202406032230-r")
|
|
||||||
classpath("org.kohsuke:github-api:1.305")
|
|
||||||
|
|
||||||
classpath("io.ktor:ktor-client-core:2.3.12")
|
|
||||||
classpath("io.ktor:ktor-client-cio:2.3.10")
|
|
||||||
classpath("io.ktor:ktor-client-auth:2.3.12")
|
|
||||||
classpath("io.ktor:ktor-client-content-negotiation:2.3.10")
|
|
||||||
classpath("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
|
|
||||||
|
|
||||||
// This comes from the changelog plugin
|
|
||||||
// classpath("org.jetbrains:markdown:0.3.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
java
|
|
||||||
kotlin("jvm") version "2.0.0"
|
|
||||||
application
|
|
||||||
id("java-test-fixtures")
|
|
||||||
id("org.jetbrains.intellij.platform") version "2.0.0-rc2"
|
|
||||||
id("org.jetbrains.changelog") version "2.2.1"
|
|
||||||
id("org.jetbrains.kotlinx.kover") version "0.6.1"
|
|
||||||
id("com.dorongold.task-tree") version "4.0.0"
|
|
||||||
id("com.google.devtools.ksp") version "2.0.0-1.0.23"
|
|
||||||
}
|
|
||||||
|
|
||||||
val moduleSources by configurations.registering
|
|
||||||
|
|
||||||
// Import variables from gradle.properties file
|
|
||||||
val javaVersion: String by project
|
|
||||||
val kotlinVersion: String by project
|
|
||||||
val ideaVersion: String by project
|
|
||||||
val ideaType: String by project
|
|
||||||
val instrumentPluginCode: String by project
|
|
||||||
val remoteRobotVersion: String by project
|
|
||||||
val splitModeVersion: String by project
|
|
||||||
|
|
||||||
val publishChannels: String by project
|
|
||||||
val publishToken: String by project
|
|
||||||
|
|
||||||
val slackUrl: String by project
|
|
||||||
val youtrackToken: String by project
|
|
||||||
|
|
||||||
val releaseType: String? by project
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
intellijPlatform {
|
|
||||||
defaultRepositories()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
api(project(":vim-engine"))
|
|
||||||
ksp(project(":annotation-processors"))
|
|
||||||
compileOnly(project(":annotation-processors"))
|
|
||||||
|
|
||||||
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
|
|
||||||
compileOnly("org.jetbrains:annotations:24.1.0")
|
|
||||||
|
|
||||||
intellijPlatform {
|
|
||||||
// Note that it is also possible to use local("...") to compile against a locally installed IDE
|
|
||||||
// E.g. local("/Users/{user}/Applications/IntelliJ IDEA Ultimate.app")
|
|
||||||
// Or something like: intellijIdeaUltimate(ideaVersion)
|
|
||||||
create(ideaType, ideaVersion)
|
|
||||||
|
|
||||||
pluginVerifier()
|
|
||||||
zipSigner()
|
|
||||||
instrumentationTools()
|
|
||||||
|
|
||||||
testFramework(TestFrameworkType.Platform)
|
|
||||||
testFramework(TestFrameworkType.JUnit5)
|
|
||||||
|
|
||||||
// AceJump is an optional dependency. We use their SessionManager class to check if it's active
|
|
||||||
plugin("AceJump", "3.8.19")
|
|
||||||
}
|
|
||||||
|
|
||||||
moduleSources(project(":vim-engine", "sourcesJarArtifacts"))
|
|
||||||
|
|
||||||
// --------- Test dependencies ----------
|
|
||||||
|
|
||||||
testApi("com.squareup.okhttp3:okhttp:4.12.0")
|
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/com.ensarsarajcic.neovim.java/neovim-api
|
|
||||||
testImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
|
||||||
testImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
|
|
||||||
testFixturesImplementation("com.ensarsarajcic.neovim.java:neovim-api:0.2.3")
|
|
||||||
testFixturesImplementation("com.ensarsarajcic.neovim.java:core-rpc:0.2.3")
|
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-test
|
|
||||||
testImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
|
|
||||||
testFixturesImplementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion")
|
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/org.mockito.kotlin/mockito-kotlin
|
|
||||||
testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0")
|
|
||||||
|
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.3")
|
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.3")
|
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter-params:5.10.3")
|
|
||||||
testFixturesImplementation("org.junit.jupiter:junit-jupiter-api:5.10.3")
|
|
||||||
testFixturesImplementation("org.junit.jupiter:junit-jupiter-engine:5.10.3")
|
|
||||||
testFixturesImplementation("org.junit.jupiter:junit-jupiter-params:5.10.3")
|
|
||||||
|
|
||||||
// Temp workaround suggested in https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-faq.html#junit5-test-framework-refers-to-junit4
|
|
||||||
// Can be removed when IJPL-159134 is fixed
|
|
||||||
// testRuntimeOnly("junit:junit:4.13.2")
|
|
||||||
testImplementation("org.junit.vintage:junit-vintage-engine:5.10.3")
|
|
||||||
// testFixturesImplementation("org.junit.vintage:junit-vintage-engine:5.10.3")
|
|
||||||
}
|
|
||||||
|
|
||||||
configurations {
|
|
||||||
runtimeClasspath {
|
|
||||||
exclude(group = "org.antlr", module = "antlr4")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks {
|
|
||||||
test {
|
|
||||||
useJUnitPlatform()
|
|
||||||
|
|
||||||
// Set teamcity env variable locally to run additional tests for leaks.
|
|
||||||
// By default, this test runs on TC only, but this test doesn't take a lot of time,
|
|
||||||
// so we can turn it on for local development
|
|
||||||
if (environment["TEAMCITY_VERSION"] == null) {
|
|
||||||
println("Set env TEAMCITY_VERSION to X to enable project leak checks from the platform")
|
|
||||||
environment("TEAMCITY_VERSION" to "X")
|
|
||||||
}
|
|
||||||
|
|
||||||
systemProperty("ideavim.nvim.test", System.getProperty("nvim") ?: false)
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava {
|
|
||||||
// CodeQL can't resolve the 'by project' property, so we need to give it a hint. This is the minimum version we need
|
|
||||||
// so doesn't have to match exactly
|
|
||||||
// Hint for the CodeQL autobuilder: sourceCompatibility = 17
|
|
||||||
sourceCompatibility = javaVersion
|
|
||||||
targetCompatibility = javaVersion
|
|
||||||
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
compileKotlin {
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = javaVersion
|
|
||||||
// See https://plugins.jetbrains.com/docs/intellij/using-kotlin.html#kotlin-standard-library
|
|
||||||
// For the list of bundled versions
|
|
||||||
apiVersion = "1.9"
|
|
||||||
freeCompilerArgs = listOf(
|
|
||||||
"-Xjvm-default=all-compatibility",
|
|
||||||
|
|
||||||
// Needed to compile the AceJump which uses kotlin beta
|
|
||||||
// Without these two option compilation fails
|
|
||||||
"-Xskip-prerelease-check",
|
|
||||||
"-Xallow-unstable-dependencies",
|
|
||||||
)
|
|
||||||
// allWarningsAsErrors = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileTestKotlin {
|
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = javaVersion
|
|
||||||
apiVersion = "1.9"
|
|
||||||
|
|
||||||
// Needed to compile the AceJump which uses kotlin beta
|
|
||||||
// Without these two option compilation fails
|
|
||||||
freeCompilerArgs += listOf("-Xskip-prerelease-check", "-Xallow-unstable-dependencies")
|
|
||||||
// allWarningsAsErrors = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note that this will run the plugin installed in the IDE specified in dependencies. To run in a different IDE, use
|
|
||||||
// a custom task (see below)
|
|
||||||
runIde {
|
|
||||||
systemProperty("octopus.handler", System.getProperty("octopus.handler") ?: true)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uncomment to run the plugin in a custom IDE, rather than the IDE specified as a compile target in dependencies
|
|
||||||
// Note that the version must be greater than the plugin's target version, for obvious reasons
|
|
||||||
// val runIdeCustom by intellijPlatformTesting.runIde.registering {
|
|
||||||
// type = IntelliJPlatformType.Rider
|
|
||||||
// version = "2024.1.2"
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Uncomment to run the plugin in a locally installed IDE
|
|
||||||
// val runIdeLocal by intellijPlatformTesting.runIde.registering {
|
|
||||||
// localPath = file("/Users/{user}/Applications/WebStorm.app")
|
|
||||||
// }
|
|
||||||
|
|
||||||
val runIdeForUiTests by intellijPlatformTesting.runIde.registering {
|
|
||||||
task {
|
|
||||||
jvmArgumentProviders += CommandLineArgumentProvider {
|
|
||||||
listOf(
|
|
||||||
"-Drobot-server.port=8082",
|
|
||||||
"-Dide.mac.message.dialogs.as.sheets=false",
|
|
||||||
"-Djb.privacy.policy.text=<!--999.999-->",
|
|
||||||
"-Djb.consents.confirmation.enabled=false",
|
|
||||||
"-Dide.show.tips.on.startup.default.value=false",
|
|
||||||
"-Doctopus.handler=" + (System.getProperty("octopus.handler") ?: true),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
plugins {
|
|
||||||
robotServerPlugin(remoteRobotVersion)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val runIdeSplitMode by intellijPlatformTesting.runIde.registering {
|
|
||||||
splitMode = true
|
|
||||||
splitModeTarget = SplitModeAware.SplitModeTarget.FRONTEND
|
|
||||||
|
|
||||||
// Frontend split mode support requires 242+
|
|
||||||
// TODO: Remove this once IdeaVim targets 242, as the task will naturally use the target version to run
|
|
||||||
version.set(splitModeVersion)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add plugin open API sources to the plugin ZIP
|
|
||||||
val sourcesJar by registering(Jar::class) {
|
|
||||||
dependsOn(moduleSources)
|
|
||||||
destinationDirectory.set(layout.buildDirectory.dir("libs"))
|
|
||||||
archiveClassifier.set(DocsType.SOURCES)
|
|
||||||
from(sourceSets.main.map { it.kotlin })
|
|
||||||
from(provider {
|
|
||||||
moduleSources.map {
|
|
||||||
it.map { jarFile -> zipTree(jarFile) }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
buildPlugin {
|
|
||||||
dependsOn(sourcesJar)
|
|
||||||
from(sourcesJar) { into("lib/src") }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain {
|
|
||||||
languageVersion.set(JavaLanguageVersion.of(javaVersion))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
jvmToolchain {
|
|
||||||
languageVersion.set(JavaLanguageVersion.of(javaVersion))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gradle.projectsEvaluated {
|
|
||||||
tasks.compileJava {
|
|
||||||
// options.compilerArgs.add("-Werror")
|
|
||||||
options.compilerArgs.add("-Xlint:deprecation")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Intellij plugin
|
|
||||||
|
|
||||||
intellijPlatform {
|
|
||||||
pluginConfiguration {
|
|
||||||
name = "IdeaVim"
|
|
||||||
changeNotes.set(
|
|
||||||
"""
|
|
||||||
Undo in IdeaVim now works like in Vim<br/>
|
|
||||||
Caret movement is no longer a separate undo step, and full insert is undoable in one step.<br/>
|
|
||||||
<a href="https://youtrack.jetbrains.com/issue/VIM-547/Undo-splits-Insert-mode-edits-into-separate-undo-chunks">Share Feedback</a>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="https://youtrack.jetbrains.com/issues/VIM?q=State:%20Fixed%20Fix%20versions:%20${version.get()}">Changelog</a>
|
|
||||||
""".trimIndent()
|
|
||||||
)
|
|
||||||
|
|
||||||
ideaVersion {
|
|
||||||
// Let the Gradle plugin set the since-build version. It defaults to the version of the IDE we're building against
|
|
||||||
// specified as two components, `{branch}.{build}` (e.g., "241.15989"). There is no third component specified.
|
|
||||||
// The until-build version defaults to `{branch}.*`, but we want to support _all_ future versions, so we set it
|
|
||||||
// with a null provider (the provider is important).
|
|
||||||
// By letting the Gradle plugin handle this, the Plugin DevKit IntelliJ plugin cannot help us with the "Usage of
|
|
||||||
// IntelliJ API not available in older IDEs" inspection. However, since our since-build is the version we compile
|
|
||||||
// against, we can never get an API that's newer - it would be an unresolved symbol.
|
|
||||||
untilBuild.set(provider { null })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishing {
|
|
||||||
channels.set(publishChannels.split(","))
|
|
||||||
token.set(publishToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
signing {
|
|
||||||
certificateChain.set(providers.environmentVariable("CERTIFICATE_CHAIN"))
|
|
||||||
privateKey.set(providers.environmentVariable("PRIVATE_KEY"))
|
|
||||||
password.set(providers.environmentVariable("PRIVATE_KEY_PASSWORD"))
|
|
||||||
}
|
|
||||||
|
|
||||||
verifyPlugin {
|
|
||||||
teamCityOutputFormat = true
|
|
||||||
ides {
|
|
||||||
recommended()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
instrumentCode.set(instrumentPluginCode.toBoolean())
|
|
||||||
}
|
|
||||||
|
|
||||||
ksp {
|
|
||||||
arg("generated_directory", "$projectDir/src/main/resources/ksp-generated")
|
|
||||||
arg("vimscript_functions_file", "intellij_vimscript_functions.json")
|
|
||||||
arg("ex_commands_file", "intellij_ex_commands.json")
|
|
||||||
arg("commands_file", "intellij_commands.json")
|
|
||||||
}
|
|
||||||
|
|
||||||
afterEvaluate {
|
|
||||||
// tasks.named("kspKotlin").configure { dependsOn("clean") }
|
|
||||||
tasks.named("kspTestFixturesKotlin").configure { enabled = false }
|
|
||||||
tasks.named("kspTestFixturesKotlin").configure { enabled = false }
|
|
||||||
tasks.named("kspTestKotlin").configure { enabled = false }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// --- Changelog
|
|
||||||
|
|
||||||
changelog {
|
|
||||||
groups.set(listOf("Features:", "Changes:", "Deprecations:", "Fixes:", "Merged PRs:"))
|
|
||||||
itemPrefix.set("*")
|
|
||||||
path.set("${project.projectDir}/CHANGES.md")
|
|
||||||
unreleasedTerm.set("To Be Released")
|
|
||||||
headerParserRegex.set("(\\d\\.\\d+(.\\d+)?)".toRegex())
|
|
||||||
// header = { "${project.version}" }
|
|
||||||
// version = "0.60"
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Kover
|
|
||||||
|
|
||||||
koverMerged {
|
|
||||||
enable()
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- Slack notification
|
|
||||||
|
|
||||||
tasks.register("slackNotification") {
|
|
||||||
doLast {
|
|
||||||
if (version.toString().last() != '0') return@doLast
|
|
||||||
if (slackUrl.isBlank()) {
|
|
||||||
println("Slack Url is not defined")
|
|
||||||
return@doLast
|
|
||||||
}
|
|
||||||
|
|
||||||
val changeLog = changelog.renderItem(changelog.getLatest(), Changelog.OutputType.PLAIN_TEXT)
|
|
||||||
val slackDown = DownParser(changeLog, true).toSlack().toString()
|
|
||||||
|
|
||||||
//language=JSON
|
|
||||||
val message = """
|
|
||||||
{
|
|
||||||
"text": "New version of IdeaVim",
|
|
||||||
"blocks": [
|
|
||||||
{
|
|
||||||
"type": "section",
|
|
||||||
"text": {
|
|
||||||
"type": "mrkdwn",
|
|
||||||
"text": "IdeaVim $version has been released\n$slackDown"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
""".trimIndent()
|
|
||||||
|
|
||||||
println("Parsed data: $slackDown")
|
|
||||||
val post = URL(slackUrl)
|
|
||||||
with(post.openConnection() as HttpURLConnection) {
|
|
||||||
requestMethod = "POST"
|
|
||||||
doOutput = true
|
|
||||||
setRequestProperty("Content-Type", "application/json")
|
|
||||||
|
|
||||||
outputStream.write(message.toByteArray())
|
|
||||||
|
|
||||||
val postRc = responseCode
|
|
||||||
println("Response code: $postRc")
|
|
||||||
if (postRc == 200) {
|
|
||||||
println(inputStream.bufferedReader().use { it.readText() })
|
|
||||||
} else {
|
|
||||||
println(errorStream.bufferedReader().use { it.readText() })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uncomment to enable FUS testing mode
|
|
||||||
// tasks {
|
|
||||||
// withType<org.jetbrains.intellij.tasks.RunIdeTask> {
|
|
||||||
// jvmArgs("-Didea.is.internal=true")
|
|
||||||
// jvmArgs("-Dfus.internal.test.mode=true")
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// --- Update authors
|
|
||||||
tasks.register("updateAuthors") {
|
|
||||||
doLast {
|
|
||||||
val uncheckedEmails = setOf(
|
|
||||||
"aleksei.plate@jetbrains.com",
|
|
||||||
"aleksei.plate@teamcity",
|
|
||||||
"aleksei.plate@TeamCity",
|
|
||||||
"alex.plate@192.168.0.109",
|
|
||||||
"nikita.koshcheev@TeamCity",
|
|
||||||
"TeamCity@TeamCity",
|
|
||||||
)
|
|
||||||
updateAuthors(uncheckedEmails)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val prId: String by project
|
|
||||||
|
|
||||||
tasks.register("updateMergedPr") {
|
|
||||||
doLast {
|
|
||||||
val x = changelog.getUnreleased()
|
|
||||||
println("x")
|
|
||||||
// if (project.hasProperty("prId")) {
|
|
||||||
// println("Got pr id: $prId")
|
|
||||||
// updateMergedPr(prId.toInt())
|
|
||||||
// } else {
|
|
||||||
// error("Cannot get prId")
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("updateChangelog") {
|
|
||||||
doLast {
|
|
||||||
updateChangelog()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("updateYoutrackOnCommit") {
|
|
||||||
doLast {
|
|
||||||
updateYoutrackOnCommit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val vimProjectId = "22-43"
|
|
||||||
val fixVersionsFieldId = "123-285"
|
|
||||||
val fixVersionsFieldType = "VersionProjectCustomField"
|
|
||||||
val fixVersionsElementType = "VersionBundleElement"
|
|
||||||
|
|
||||||
tasks.register("releaseActions") {
|
|
||||||
group = "other"
|
|
||||||
doLast {
|
|
||||||
if (releaseType == "patch") return@doLast
|
|
||||||
|
|
||||||
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D%20and%20tag:%20%7BIdeaVim%20Released%20In%20EAP%7D%20")
|
|
||||||
if (tickets.isNotEmpty()) {
|
|
||||||
println("Updating statuses for tickets: $tickets")
|
|
||||||
setYoutrackStatus(tickets, "Fixed")
|
|
||||||
println("Checking if version $version exists...")
|
|
||||||
val versionId = getVersionIdByName(version.toString())
|
|
||||||
if (versionId == null) {
|
|
||||||
addReleaseToYoutrack(version.toString())
|
|
||||||
} else {
|
|
||||||
println("Version $version already exists in YouTrack. Version id: $versionId")
|
|
||||||
}
|
|
||||||
setYoutrackFixVersion(tickets, version.toString())
|
|
||||||
} else {
|
|
||||||
println("No tickets to update statuses")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("integrationsTest") {
|
|
||||||
group = "other"
|
|
||||||
doLast {
|
|
||||||
val testTicketId = "VIM-2784"
|
|
||||||
|
|
||||||
// YouTrack set to Ready To Release on Fix commit
|
|
||||||
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
|
|
||||||
if ("Ready To Release" != getYoutrackStatus(testTicketId)) {
|
|
||||||
error("Ticket status was not updated")
|
|
||||||
}
|
|
||||||
setYoutrackStatus(listOf(testTicketId), "Open")
|
|
||||||
|
|
||||||
// Check YouTrack requests
|
|
||||||
val prevStatus = getYoutrackStatus(testTicketId)
|
|
||||||
setYoutrackStatus(listOf(testTicketId), "Ready To Release")
|
|
||||||
val tickets = getYoutrackTicketsByQuery("%23%7BReady+To+Release%7D")
|
|
||||||
if (testTicketId !in tickets) {
|
|
||||||
error("Test ticket is not found in request")
|
|
||||||
}
|
|
||||||
setYoutrackStatus(listOf(testTicketId), prevStatus)
|
|
||||||
|
|
||||||
// Check adding and removing release
|
|
||||||
val existingVersionId = getVersionIdByName("TEST_VERSION")
|
|
||||||
if (existingVersionId != null) {
|
|
||||||
deleteVersionById(existingVersionId)
|
|
||||||
}
|
|
||||||
val versionId = addReleaseToYoutrack("TEST_VERSION")
|
|
||||||
guard(getVersionIdByName("TEST_VERSION") != null) { "Test version isn't created" }
|
|
||||||
setYoutrackStatus(listOf(testTicketId), "Fixed")
|
|
||||||
setYoutrackFixVersion(listOf(testTicketId), "TEST_VERSION")
|
|
||||||
deleteVersionById(versionId)
|
|
||||||
setYoutrackStatus(listOf(testTicketId), "Open")
|
|
||||||
guard(getVersionIdByName("TEST_VERSION") == null) { "Test version isn't deleted" }
|
|
||||||
|
|
||||||
updateMergedPr(525)
|
|
||||||
// TODO: test Ticket parsing
|
|
||||||
// TODO: test Update CHANGES
|
|
||||||
// TODO: test Update AUTHORS
|
|
||||||
// TODO: test Slack notification
|
|
||||||
// TODO: Add a comment on EAP release
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun guard(check: Boolean, ifWrong: () -> String) {
|
|
||||||
if (!check) {
|
|
||||||
error(ifWrong())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("testUpdateChangelog") {
|
|
||||||
group = "verification"
|
|
||||||
description = "This is a task to manually assert the correctness of the update tasks"
|
|
||||||
doLast {
|
|
||||||
val changesFile = File("$projectDir/CHANGES.md")
|
|
||||||
val changes = changesFile.readText()
|
|
||||||
|
|
||||||
val changesBuilder = StringBuilder(changes)
|
|
||||||
val insertOffset = setupSection(changes, changesBuilder, "### Changes:")
|
|
||||||
|
|
||||||
changesBuilder.insert(insertOffset, "--Hello--\n")
|
|
||||||
|
|
||||||
changesFile.writeText(changesBuilder.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addReleaseToYoutrack(name: String): String {
|
|
||||||
val client = httpClient()
|
|
||||||
println("Creating new release version in YouTrack: $name")
|
|
||||||
|
|
||||||
return runBlocking {
|
|
||||||
val response =
|
|
||||||
client.post("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name") {
|
|
||||||
contentType(ContentType.Application.Json)
|
|
||||||
accept(ContentType.Application.Json)
|
|
||||||
val request = buildJsonObject {
|
|
||||||
put("name", name)
|
|
||||||
put("\$type", fixVersionsElementType)
|
|
||||||
}
|
|
||||||
setBody(request)
|
|
||||||
}
|
|
||||||
response.body<JsonObject>().getValue("id").jsonPrimitive.content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getVersionIdByName(name: String): String? {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
return runBlocking {
|
|
||||||
val response =
|
|
||||||
client.get("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values?fields=id,name&query=$name")
|
|
||||||
response.body<JsonArray>().singleOrNull()?.jsonObject?.get("id")?.jsonPrimitive?.content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun deleteVersionById(id: String) {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
runBlocking {
|
|
||||||
client.delete("https://youtrack.jetbrains.com/api/admin/projects/$vimProjectId/customFields/$fixVersionsFieldId/bundle/values/$id")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateYoutrackOnCommit() {
|
|
||||||
println("Start updating youtrack")
|
|
||||||
println(projectDir)
|
|
||||||
|
|
||||||
val newFixes = changes()
|
|
||||||
val newTickets = newFixes.map { it.id }
|
|
||||||
println("Set new status for $newTickets")
|
|
||||||
setYoutrackStatus(newTickets, "Ready To Release")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getYoutrackTicketsByQuery(query: String): Set<String> {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
return runBlocking {
|
|
||||||
val response = client.get("https://youtrack.jetbrains.com/api/issues/?fields=idReadable&query=project:VIM+$query")
|
|
||||||
response.body<JsonArray>().mapTo(HashSet()) { it.jsonObject.getValue("idReadable").jsonPrimitive.content }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setYoutrackStatus(tickets: Collection<String>, status: String) {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
runBlocking {
|
|
||||||
for (ticket in tickets) {
|
|
||||||
println("Try to set $ticket to $status")
|
|
||||||
val response =
|
|
||||||
client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
|
|
||||||
contentType(ContentType.Application.Json)
|
|
||||||
accept(ContentType.Application.Json)
|
|
||||||
val request = buildJsonObject {
|
|
||||||
putJsonArray("customFields") {
|
|
||||||
addJsonObject {
|
|
||||||
put("name", "State")
|
|
||||||
put("\$type", "SingleEnumIssueCustomField")
|
|
||||||
putJsonObject("value") {
|
|
||||||
put("name", status)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setBody(request)
|
|
||||||
}
|
|
||||||
println(response)
|
|
||||||
println(response.body<String>())
|
|
||||||
if (!response.status.isSuccess()) {
|
|
||||||
error("Request failed. $ticket, ${response.body<String>()}")
|
|
||||||
}
|
|
||||||
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
|
|
||||||
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "State" }
|
|
||||||
.jsonObject["value"]!!
|
|
||||||
.jsonObject["name"]!!
|
|
||||||
.jsonPrimitive.content
|
|
||||||
if (finalState != status) {
|
|
||||||
error("Ticket $ticket is not updated! Expected status $status, but actually $finalState")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setYoutrackFixVersion(tickets: Collection<String>, version: String) {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
runBlocking {
|
|
||||||
for (ticket in tickets) {
|
|
||||||
println("Try to set fix version $version for $ticket")
|
|
||||||
val response =
|
|
||||||
client.post("https://youtrack.jetbrains.com/api/issues/$ticket?fields=customFields(id,name,value(id,name))") {
|
|
||||||
contentType(ContentType.Application.Json)
|
|
||||||
accept(ContentType.Application.Json)
|
|
||||||
val request = buildJsonObject {
|
|
||||||
putJsonArray("customFields") {
|
|
||||||
addJsonObject {
|
|
||||||
put("name", "Fix versions")
|
|
||||||
put("\$type", "MultiVersionIssueCustomField")
|
|
||||||
putJsonArray("value") {
|
|
||||||
addJsonObject { put("name", version) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
setBody(request)
|
|
||||||
}
|
|
||||||
println(response)
|
|
||||||
println(response.body<String>())
|
|
||||||
if (!response.status.isSuccess()) {
|
|
||||||
error("Request failed. $ticket, ${response.body<String>()}")
|
|
||||||
}
|
|
||||||
val finalState = response.body<JsonObject>()["customFields"]!!.jsonArray
|
|
||||||
.single { it.jsonObject["name"]!!.jsonPrimitive.content == "Fix versions" }
|
|
||||||
.jsonObject["value"]!!
|
|
||||||
.jsonArray[0]
|
|
||||||
.jsonObject["name"]!!
|
|
||||||
.jsonPrimitive.content
|
|
||||||
if (finalState != version) {
|
|
||||||
error("Ticket $ticket is not updated! Expected fix version $version, but actually $finalState")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getYoutrackStatus(ticket: String): String {
|
|
||||||
val client = httpClient()
|
|
||||||
|
|
||||||
return runBlocking {
|
|
||||||
val response =
|
|
||||||
client.get("https://youtrack.jetbrains.com/api/issues/$ticket/customFields/123-129?fields=value(name)")
|
|
||||||
response.body<JsonObject>()["value"]!!.jsonObject.getValue("name").jsonPrimitive.content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateChangelog() {
|
|
||||||
println("Start update authors")
|
|
||||||
println(projectDir)
|
|
||||||
val newFixes = changes()
|
|
||||||
|
|
||||||
// Update changes file
|
|
||||||
val changesFile = File("$projectDir/CHANGES.md")
|
|
||||||
val changes = changesFile.readText()
|
|
||||||
|
|
||||||
val changesBuilder = StringBuilder(changes)
|
|
||||||
val insertOffset = setupSection(changes, changesBuilder, "### Fixes:")
|
|
||||||
|
|
||||||
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
|
|
||||||
|
|
||||||
val firstPartOfChanges = changes.take(insertOffset)
|
|
||||||
val actualFixes = newFixes
|
|
||||||
.filterNot { it.id in firstPartOfChanges }
|
|
||||||
val newUpdates = actualFixes
|
|
||||||
.joinToString("") { "* [${it.id}](https://youtrack.jetbrains.com/issue/${it.id}) ${it.text}\n" }
|
|
||||||
|
|
||||||
changesBuilder.insert(insertOffset, newUpdates)
|
|
||||||
if (actualFixes.isNotEmpty()) {
|
|
||||||
changesFile.writeText(changesBuilder.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun updateAuthors(uncheckedEmails: Set<String>) {
|
|
||||||
println("Start update authors")
|
|
||||||
println(projectDir)
|
|
||||||
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
|
||||||
val git = Git(repository)
|
|
||||||
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
|
||||||
val hashesAndEmailes = git.log().call()
|
|
||||||
.takeWhile {
|
|
||||||
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
|
|
||||||
}
|
|
||||||
.associate { it.authorIdent.emailAddress to it.name }
|
|
||||||
|
|
||||||
println("Last successful commit: $lastSuccessfulCommit")
|
|
||||||
println("Amount of commits: ${hashesAndEmailes.size}")
|
|
||||||
println("Emails: ${hashesAndEmailes.keys}")
|
|
||||||
val gitHub = org.kohsuke.github.GitHub.connect()
|
|
||||||
val ghRepository = gitHub.getRepository("JetBrains/ideavim")
|
|
||||||
val users = mutableSetOf<Author>()
|
|
||||||
println("Start emails processing")
|
|
||||||
for ((email, hash) in hashesAndEmailes) {
|
|
||||||
println("Processing '$email'...")
|
|
||||||
if (email in uncheckedEmails) {
|
|
||||||
println("Email '$email' is in unchecked emails. Skip it")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if ("dependabot[bot]@users.noreply.github.com" in email) {
|
|
||||||
println("Email '$email' is from dependabot. Skip it")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if ("tcuser" in email) {
|
|
||||||
println("Email '$email' is from teamcity. Skip it")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
val user: GHUser? = ghRepository.getCommit(hash).author
|
|
||||||
if (user == null) {
|
|
||||||
println("Cant get the commit author. Email: $email. Commit: $hash")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
val htmlUrl = user.htmlUrl.toString()
|
|
||||||
val name = user.name ?: user.login
|
|
||||||
users.add(Author(name, htmlUrl, email))
|
|
||||||
}
|
|
||||||
|
|
||||||
println("Emails processed")
|
|
||||||
val authorsFile = File("$projectDir/AUTHORS.md")
|
|
||||||
val authors = authorsFile.readText()
|
|
||||||
val parser =
|
|
||||||
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
|
|
||||||
val tree = parser.buildMarkdownTreeFromString(authors)
|
|
||||||
|
|
||||||
val contributorsSection = tree.children[24]
|
|
||||||
val existingEmails = mutableSetOf<String>()
|
|
||||||
for (child in contributorsSection.children) {
|
|
||||||
if (child.children.size > 1) {
|
|
||||||
existingEmails.add(
|
|
||||||
child.children[1].children[0].children[2].children[2].getTextInNode(authors).toString(),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val newAuthors = users.filterNot { it.mail in existingEmails }
|
|
||||||
if (newAuthors.isEmpty()) return
|
|
||||||
|
|
||||||
val authorNames = newAuthors.joinToString(", ") { it.name }
|
|
||||||
println("::set-output name=authors::$authorNames")
|
|
||||||
|
|
||||||
val insertionString = newAuthors.toMdString()
|
|
||||||
val resultingString = StringBuffer(authors).insert(contributorsSection.endOffset, insertionString).toString()
|
|
||||||
|
|
||||||
authorsFile.writeText(resultingString)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun List<Author>.toMdString(): String {
|
|
||||||
return this.joinToString {
|
|
||||||
"""
|
|
||||||
|
|
|
||||||
|* [![icon][mail]](mailto:${it.mail})
|
|
||||||
| [![icon][github]](${it.url})
|
|
||||||
|
|
|
||||||
| ${it.name}
|
|
||||||
""".trimMargin()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class Author(val name: String, val url: String, val mail: String)
|
|
||||||
data class Change(val id: String, val text: String)
|
|
||||||
|
|
||||||
fun updateMergedPr(number: Int) {
|
|
||||||
val token = System.getenv("GITHUB_OAUTH")
|
|
||||||
println("Token size: ${token.length}")
|
|
||||||
val gitHub = org.kohsuke.github.GitHubBuilder().withOAuthToken(token).build()
|
|
||||||
println("Connecting to the repo...")
|
|
||||||
val repository = gitHub.getRepository("JetBrains/ideavim")
|
|
||||||
println("Getting pull requests...")
|
|
||||||
val pullRequest = repository.getPullRequest(number)
|
|
||||||
if (pullRequest.user.login == "dependabot[bot]") return
|
|
||||||
|
|
||||||
val changesFile = File("$projectDir/CHANGES.md")
|
|
||||||
val changes = changesFile.readText()
|
|
||||||
|
|
||||||
val changesBuilder = StringBuilder(changes)
|
|
||||||
val insertOffset = setupSection(changes, changesBuilder, "### Merged PRs:")
|
|
||||||
|
|
||||||
if (insertOffset < 50) error("Incorrect offset: $insertOffset")
|
|
||||||
if (pullRequest.user.login == "dependabot[bot]") return
|
|
||||||
|
|
||||||
val prNumber = pullRequest.number
|
|
||||||
val userName = pullRequest.user.name ?: pullRequest.user.login
|
|
||||||
val login = pullRequest.user.login
|
|
||||||
val title = pullRequest.title
|
|
||||||
val section =
|
|
||||||
"* [$prNumber](https://github.com/JetBrains/ideavim/pull/$prNumber) by [$userName](https://github.com/$login): $title\n"
|
|
||||||
changesBuilder.insert(insertOffset, section)
|
|
||||||
|
|
||||||
changesFile.writeText(changesBuilder.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setupSection(
|
|
||||||
changes: String,
|
|
||||||
authorsBuilder: StringBuilder,
|
|
||||||
sectionName: String,
|
|
||||||
): Int {
|
|
||||||
val parser =
|
|
||||||
org.intellij.markdown.parser.MarkdownParser(org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor())
|
|
||||||
val tree = parser.buildMarkdownTreeFromString(changes)
|
|
||||||
|
|
||||||
var idx = -1
|
|
||||||
for (index in tree.children.indices) {
|
|
||||||
if (tree.children[index].getTextInNode(changes).startsWith("## ")) {
|
|
||||||
idx = index
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val hasToBeReleased = tree.children[idx].getTextInNode(changes).contains("To Be Released")
|
|
||||||
return if (hasToBeReleased) {
|
|
||||||
var mrgIdx = -1
|
|
||||||
for (index in (idx + 1) until tree.children.lastIndex) {
|
|
||||||
val textInNode = tree.children[index].getTextInNode(changes)
|
|
||||||
val foundIndex = textInNode.startsWith(sectionName)
|
|
||||||
if (foundIndex) {
|
|
||||||
var filledPr = index + 2
|
|
||||||
while (tree.children[filledPr].getTextInNode(changes).startsWith("*")) {
|
|
||||||
filledPr++
|
|
||||||
}
|
|
||||||
mrgIdx = tree.children[filledPr].startOffset + 1
|
|
||||||
break
|
|
||||||
} else {
|
|
||||||
val currentSectionIndex = sections.indexOf(sectionName)
|
|
||||||
val insertHere = textInNode.startsWith("## ") ||
|
|
||||||
textInNode.startsWith("### ") &&
|
|
||||||
sections.indexOfFirst { textInNode.startsWith(it) }
|
|
||||||
.let { if (it < 0) false else it > currentSectionIndex }
|
|
||||||
if (insertHere) {
|
|
||||||
val section = """
|
|
||||||
$sectionName
|
|
||||||
|
|
||||||
|
|
||||||
""".trimIndent()
|
|
||||||
authorsBuilder.insert(tree.children[index].startOffset, section)
|
|
||||||
mrgIdx = tree.children[index].startOffset + (section.length - 1)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mrgIdx
|
|
||||||
} else {
|
|
||||||
val section = """
|
|
||||||
## To Be Released
|
|
||||||
|
|
||||||
$sectionName
|
|
||||||
|
|
||||||
|
|
||||||
""".trimIndent()
|
|
||||||
authorsBuilder.insert(tree.children[idx].startOffset, section)
|
|
||||||
tree.children[idx].startOffset + (section.length - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val sections = listOf(
|
|
||||||
"### Features:",
|
|
||||||
"### Changes:",
|
|
||||||
"### Fixes:",
|
|
||||||
"### Merged PRs:",
|
|
||||||
)
|
|
||||||
|
|
||||||
fun changes(): List<Change> {
|
|
||||||
val repository = RepositoryBuilder().setGitDir(File("$projectDir/.git")).build()
|
|
||||||
val git = Git(repository)
|
|
||||||
val lastSuccessfulCommit = System.getenv("SUCCESS_COMMIT")!!
|
|
||||||
val messages = git.log().call()
|
|
||||||
.takeWhile {
|
|
||||||
!it.id.name.equals(lastSuccessfulCommit, ignoreCase = true)
|
|
||||||
}
|
|
||||||
.map { it.shortMessage }
|
|
||||||
|
|
||||||
// Collect fixes
|
|
||||||
val newFixes = mutableListOf<Change>()
|
|
||||||
println("Last successful commit: $lastSuccessfulCommit")
|
|
||||||
println("Amount of commits: ${messages.size}")
|
|
||||||
println("Start changes processing")
|
|
||||||
for (message in messages) {
|
|
||||||
println("Processing '$message'...")
|
|
||||||
val lowercaseMessage = message.lowercase()
|
|
||||||
val regex = "^fix\\((vim-\\d+)\\):".toRegex()
|
|
||||||
val findResult = regex.find(lowercaseMessage)
|
|
||||||
if (findResult != null) {
|
|
||||||
println("Message matches")
|
|
||||||
val value = findResult.groups[1]!!.value.uppercase()
|
|
||||||
val shortMessage = message.drop(findResult.range.last + 1).trim()
|
|
||||||
newFixes += Change(value, shortMessage)
|
|
||||||
} else {
|
|
||||||
println("Message doesn't match")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newFixes
|
|
||||||
}
|
|
||||||
|
|
||||||
fun httpClient(): HttpClient {
|
|
||||||
return HttpClient(CIO) {
|
|
||||||
expectSuccess = true
|
|
||||||
install(Auth) {
|
|
||||||
bearer {
|
|
||||||
loadTokens {
|
|
||||||
val accessToken = youtrackToken.ifBlank { System.getenv("YOUTRACK_TOKEN")!! }
|
|
||||||
BearerTokens(accessToken, "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
install(ContentNegotiation) {
|
|
||||||
json(
|
|
||||||
Json {
|
|
||||||
prettyPrint = true
|
|
||||||
isLenient = true
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
1
doc
Submodule
1
doc
Submodule
Submodule doc added at 44ef1a858b
@@ -1,6 +0,0 @@
|
|||||||
Welcome to the IdeaVim wiki!
|
|
||||||
|
|
||||||
- List of IdeaVim plugins: [plugins](IdeaVim%20Plugins.md)
|
|
||||||
- Examples of `ideajoin` option (also known as "smart join"): ["ideajoin" examples](ideajoin-examples.md)
|
|
||||||
- List of "set" commands: ["set" commands](set-commands.md)
|
|
||||||
- Docs about "select" mode in vim: [select mode](Select-mode.md)
|
|
@@ -1,437 +0,0 @@
|
|||||||
IdeaVim Plugins
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
IdeaVim plugins work like the original Vim plugins. If you want to turn any of them on, you have to enable it via this command in your `~/.ideavimrc`:
|
|
||||||
|
|
||||||
```
|
|
||||||
Plug '<plugin-github-reference>'
|
|
||||||
```
|
|
||||||
|
|
||||||
If you reuse your existing `.vimrc` file using `source ~/.vimrc`, IdeaVim can parse and enable plugins that are defined
|
|
||||||
using [vim-plug](https://github.com/junegunn/vim-plug) or [vundle](https://github.com/VundleVim/Vundle.vim).
|
|
||||||
No additional set commands in `~/.ideavimrc` are required.
|
|
||||||
If you'd like to disable some plugin that's enabled in `.vimrc`, you can use `set no<extension-name>`
|
|
||||||
in `~/.ideavimrc`. E.g. `set nosurround`.
|
|
||||||
|
|
||||||
Available plugins:
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>easymotion</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [vim-easymotion](https://github.com/easymotion/vim-easymotion).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Install [IdeaVim-EasyMotion](https://plugins.jetbrains.com/plugin/13360-ideavim-easymotion/)
|
|
||||||
and [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump/) plugins.
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'easymotion/vim-easymotion'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'easymotion/vim-easymotion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/easymotion/vim-easymotion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-easymotion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set easymotion</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
All commands with the mappings are supported. See the [full list of supported commands](https://github.com/AlexPl292/IdeaVim-EasyMotion#supported-commands).
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>sneak</h2></summary>
|
|
||||||
|
|
||||||
<img src="images/sneakIcon.svg" width="80" height="80" alt="icon"/>
|
|
||||||
|
|
||||||
By [Mikhail Levchenko](https://github.com/Mishkun)
|
|
||||||
Original repository with the plugin: https://github.com/Mishkun/ideavim-sneak
|
|
||||||
Original plugin: [vim-sneak](https://github.com/justinmk/vim-sneak).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'justinmk/vim-sneak'`
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
* Type `s` and two chars to start sneaking in forward direction
|
|
||||||
* Type `S` and two chars to start sneaking in backward direction
|
|
||||||
* Type `;` or `,` to proceed with sneaking just as if you were using `f` or `t` commands
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>NERDTree</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [NERDTree](https://github.com/preservim/nerdtree).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'preservim/nerdtree'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'preservim/nerdtree'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/preservim/nerdtree'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'nerdtree'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set NERDTree</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
[See here](NERDTree-support.md).
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>surround</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [vim-surround](https://github.com/tpope/vim-surround).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-surround'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'tpope/vim-surround'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=1697'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-surround'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set surround</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/tpope/vim-surround/blob/master/doc/surround.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>multiple-cursors</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'terryma/vim-multiple-cursors'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'terryma/vim-multiple-cursors'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/terryma/vim-multiple-cursors'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-multiple-cursors'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set multiple-cursors</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
At the moment, the default key binds for this plugin do not get mapped correctly in IdeaVim (see [VIM-2178](https://youtrack.jetbrains.com/issue/VIM-2178)). To enable the default key binds, add the following to your `.ideavimrc` file...
|
|
||||||
|
|
||||||
```
|
|
||||||
" Remap multiple-cursors shortcuts to match terryma/vim-multiple-cursors
|
|
||||||
nmap <C-n> <Plug>NextWholeOccurrence
|
|
||||||
xmap <C-n> <Plug>NextWholeOccurrence
|
|
||||||
nmap g<C-n> <Plug>NextOccurrence
|
|
||||||
xmap g<C-n> <Plug>NextOccurrence
|
|
||||||
xmap <C-x> <Plug>SkipOccurrence
|
|
||||||
xmap <C-p> <Plug>RemoveOccurrence
|
|
||||||
|
|
||||||
" Note that the default <A-n> and g<A-n> shortcuts don't work on Mac due to dead keys.
|
|
||||||
" <A-n> is used to enter accented text e.g. ñ
|
|
||||||
" Feel free to pick your own mappings that are not affected. I like to use <leader>
|
|
||||||
nmap <leader><C-n> <Plug>AllWholeOccurrences
|
|
||||||
xmap <leader><C-n> <Plug>AllWholeOccurrences
|
|
||||||
nmap <leader>g<C-n> <Plug>AllOccurrences
|
|
||||||
xmap <leader>g<C-n> <Plug>AllOccurrences
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>commentary</h2></summary>
|
|
||||||
|
|
||||||
By [Daniel Leong](https://github.com/dhleong)
|
|
||||||
Original plugin: [commentary.vim](https://github.com/tpope/vim-commentary).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'tpope/vim-commentary'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'tpope/vim-commentary'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/tpope/vim-commentary'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-commentary'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'tcomment_vim'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set commentary</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>ReplaceWithRegister</h2></summary>
|
|
||||||
|
|
||||||
By [igrekster](https://github.com/igrekster)
|
|
||||||
Original plugin: [ReplaceWithRegister](https://github.com/vim-scripts/ReplaceWithRegister).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/ReplaceWithRegister'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'vim-scripts/ReplaceWithRegister'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'ReplaceWithRegister'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/inkarkat/vim-ReplaceWithRegister'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'inkarkat/vim-ReplaceWithRegister'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-ReplaceWithRegister'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2703'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set ReplaceWithRegister</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/vim-scripts/ReplaceWithRegister/blob/master/doc/ReplaceWithRegister.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>argtextobj</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [argtextobj.vim](https://www.vim.org/scripts/script.php?script_id=2699).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'vim-scripts/argtextobj.vim'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'vim-scripts/argtextobj.vim'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/vim-scripts/argtextobj.vim'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'argtextobj.vim'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2699'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set argtextobj</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
By default, only the arguments inside parenthesis are considered. To extend the functionality
|
|
||||||
to other types of brackets, set `g:argtextobj_pairs` variable to a comma-separated
|
|
||||||
list of colon-separated pairs (same as VIM's `matchpairs` option), like
|
|
||||||
`let g:argtextobj_pairs="(:),{:},<:>"`. The order of pairs matters when
|
|
||||||
handling symbols that can also be operators: `func(x << 5, 20) >> 17`. To handle
|
|
||||||
this syntax parenthesis, must come before angle brackets in the list.
|
|
||||||
|
|
||||||
https://www.vim.org/scripts/script.php?script_id=2699
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>exchange</h2></summary>
|
|
||||||
|
|
||||||
By [fan-tom](https://github.com/fan-tom)
|
|
||||||
Original plugin: [vim-exchange](https://github.com/tommcdo/vim-exchange).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'tommcdo/vim-exchange'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'tommcdo/vim-exchange'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/tommcdo/vim-exchange'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-exchange'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set exchange</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/tommcdo/vim-exchange/blob/master/doc/exchange.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>textobj-entire</h2></summary>
|
|
||||||
|
|
||||||
By [Alexandre Grison](https://github.com/agrison)
|
|
||||||
Original plugin: [vim-textobj-entire](https://github.com/kana/vim-textobj-entire).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'kana/vim-textobj-entire'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'kana/vim-textobj-entire'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-textobj-entire'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://www.vim.org/scripts/script.php?script_id=2610'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set textobj-entire</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/kana/vim-textobj-entire/blob/master/doc/textobj-entire.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>highlightedyank</h2></summary>
|
|
||||||
|
|
||||||
By [KostkaBrukowa](https://github.com/KostkaBrukowa)
|
|
||||||
Original plugin: [vim-highlightedyank](https://github.com/machakann/vim-highlightedyank).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'machakann/vim-highlightedyank'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'machakann/vim-highlightedyank'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/machakann/vim-highlightedyank'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-highlightedyank'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set highlightedyank</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
If you want to optimize highlight duration, assign a time in milliseconds:
|
|
||||||
`let g:highlightedyank_highlight_duration = "1000"`
|
|
||||||
A negative number makes the highlight persistent.
|
|
||||||
|
|
||||||
If you want to change background color of highlight you can provide the rgba of the color you want e.g.
|
|
||||||
`let g:highlightedyank_highlight_color = "rgba(160, 160, 160, 155)"`
|
|
||||||
|
|
||||||
https://github.com/machakann/vim-highlightedyank/blob/master/doc/highlightedyank.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>vim-paragraph-motion</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [vim-paragraph-motion](https://github.com/dbakker/vim-paragraph-motion).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'dbakker/vim-paragraph-motion'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'dbakker/vim-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/dbakker/vim-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/vim-scripts/Improved-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-scripts/Improved-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'Improved-paragraph-motion'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set vim-paragraph-motion</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/dbakker/vim-paragraph-motion#vim-paragraph-motion
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>vim-indent-object</h2></summary>
|
|
||||||
|
|
||||||
By [Shrikant Sharat Kandula](https://github.com/sharat87)
|
|
||||||
Original plugin: [vim-indent-object](https://github.com/michaeljsmith/vim-indent-object).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `Plug 'michaeljsmith/vim-indent-object'`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plugin 'michaeljsmith/vim-indent-object'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'https://github.com/michaeljsmith/vim-indent-object'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'vim-indent-object'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set textobj-indent</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/michaeljsmith/vim-indent-object/blob/master/doc/indent-object.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>matchit.vim</h2></summary>
|
|
||||||
|
|
||||||
By [Martin Yzeiri](https://github.com/myzeiri)
|
|
||||||
Original plugin: [matchit.vim](https://github.com/chrisbra/matchit).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Add the following command to `~/.ideavimrc`: `packadd matchit`
|
|
||||||
<details>
|
|
||||||
<summary>Alternative syntax</summary>
|
|
||||||
<code>Plug 'vim-matchit'</code>
|
|
||||||
<br/>
|
|
||||||
<code>Plug 'chrisbra/matchit'</code>
|
|
||||||
<br/>
|
|
||||||
<code>set matchit</code>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/adelarsq/vim-matchit/blob/master/doc/matchit.txt
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>IdeaVim-Quickscope</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [quick-scope](https://github.com/unblevable/quick-scope).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Install [IdeaVim-Quickscope](https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope) plugin.
|
|
||||||
- Add the following command to `~/.ideavimrc`: `set quickscope`
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://plugins.jetbrains.com/plugin/19417-ideavim-quickscope
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary><h2>Which-Key</h2></summary>
|
|
||||||
|
|
||||||
Original plugin: [vim-which-key](https://github.com/liuchengxu/vim-which-key).
|
|
||||||
|
|
||||||
### Setup:
|
|
||||||
- Install [Which-Key](https://plugins.jetbrains.com/plugin/15976-which-key) plugin.
|
|
||||||
- Add the following command to `~/.ideavimrc`: `set which-key`
|
|
||||||
|
|
||||||
### Instructions
|
|
||||||
|
|
||||||
https://github.com/TheBlob42/idea-which-key?tab=readme-ov-file#installation
|
|
||||||
|
|
||||||
</details>
|
|
@@ -1,76 +0,0 @@
|
|||||||
# NERDTree
|
|
||||||
|
|
||||||
IdeaVim supports the NERDTree plugin. Update your `~/.ideavimrc` to turn it on:
|
|
||||||
```vim
|
|
||||||
Plug 'preservim/nerdtree'
|
|
||||||
```
|
|
||||||
or
|
|
||||||
```vim
|
|
||||||
set NERDTree
|
|
||||||
```
|
|
||||||
Use `set noNERDTree` to disable this extension.
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Full list of aliases</summary>
|
|
||||||
|
|
||||||
```vim
|
|
||||||
set NERDTree
|
|
||||||
Plug 'preservim/nerdtree'
|
|
||||||
Plug 'https://github.com/preservim/nerdtree'
|
|
||||||
Plug 'https://github.com/scrooloose/nerdtree'
|
|
||||||
Plug 'scrooloose/nerdtree'
|
|
||||||
Plug 'nerdtree'
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
### Preview
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Click for the preview</summary>
|
|
||||||
<img src="images/nerdtree.gif" alt="NERDTree example"/>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### Supported commands
|
|
||||||
|
|
||||||
- `:NERDTree`
|
|
||||||
- `:NERDTreeFocus`
|
|
||||||
- `:NERDTreeToggle`
|
|
||||||
- `:NERDTreeClose`
|
|
||||||
- `:NERDTreeFind`
|
|
||||||
- `:NERDTreeRefreshRoot`
|
|
||||||
|
|
||||||
| Key | Description | Map Setting |
|
|
||||||
|---------|--------------------------------------------------------|--------------------------------|
|
|
||||||
| `o` | Open files, directories and bookmarks | `g:NERDTreeMapActivateNode` |
|
|
||||||
| `go` | Open selected file, but leave cursor in the NERDTree | `g:NERDTreeMapPreview` |
|
|
||||||
| `t` | Open selected node/bookmark in a new tab | `g:NERDTreeMapOpenInTab` |
|
|
||||||
| `T` | Same as 't' but keep the focus on the current tab | `g:NERDTreeMapOpenInTabSilent` |
|
|
||||||
| `i` | Open selected file in a split window | `g:NERDTreeMapOpenSplit` |
|
|
||||||
| `gi` | Same as i, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewSplit` |
|
|
||||||
| `s` | Open selected file in a new vsplit | `g:NERDTreeMapOpenVSplit` |
|
|
||||||
| `gs` | Same as s, but leave the cursor on the NERDTree | `g:NERDTreeMapPreviewVSplit` |
|
|
||||||
| `O` | Recursively open the selected directory | `g:NERDTreeMapOpenRecursively` |
|
|
||||||
| `x` | Close the current nodes parent | `g:NERDTreeMapCloseDir` |
|
|
||||||
| `X` | Recursively close all children of the current node | `g:NERDTreeMapCloseChildren` |
|
|
||||||
| `P` | Jump to the root node | `g:NERDTreeMapJumpRoot` |
|
|
||||||
| `p` | Jump to current nodes parent | `g:NERDTreeMapJumpParent` |
|
|
||||||
| `K` | Jump up inside directories at the current tree depth | `g:NERDTreeMapJumpFirstChild` |
|
|
||||||
| `J` | Jump down inside directories at the current tree depth | `g:NERDTreeMapJumpLastChild` |
|
|
||||||
| `<C-J>` | Jump down to next sibling of the current directory | `g:NERDTreeMapJumpNextSibling` |
|
|
||||||
| `<C-K>` | Jump up to previous sibling of the current directory | `g:NERDTreeMapJumpPrevSibling` |
|
|
||||||
| `r` | Recursively refresh the current directory | `g:NERDTreeMapRefresh` |
|
|
||||||
| `R` | Recursively refresh the current root | `g:NERDTreeMapRefreshRoot` |
|
|
||||||
| `m` | Display the NERDTree menu | `g:NERDTreeMapMenu` |
|
|
||||||
| `q` | Close the NERDTree window | `g:NERDTreeMapQuit` |
|
|
||||||
| `A` | Zoom (maximize/minimize) the NERDTree window | `g:NERDTreeMapToggleZoom` |
|
|
||||||
| `d` | Delete file or directory | `g:NERDTreeMapDelete` |
|
|
||||||
| `n` | Create File | `g:NERDTreeMapNewFile` |
|
|
||||||
| `N` | Create Directory | `g:NERDTreeMapNewDir` |
|
|
||||||
|
|
||||||
### Troubleshooting
|
|
||||||
|
|
||||||
If you see the the file is opened automatically on every movement in the Project View (`j`, `k`, etc.)
|
|
||||||
please make sure that you have "Open Files with Single click" disabled.
|
|
||||||
|
|
||||||
<img src="images/disable-one-click.png" alt="Disable one click"/>
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user