1
0
mirror of https://github.com/chylex/IntelliJ-Rainbow-Brackets.git synced 2025-01-30 22:46:00 +01:00

Compare commits

...

1 Commits

Author SHA1 Message Date
201b6e1f3a
Fork Rainbow Brackets 6.26 2024-11-30 16:50:15 +01:00
116 changed files with 4625 additions and 7179 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
* text=auto eol=lf

View File

@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@ -1,69 +0,0 @@
## Contribute
NOTE: To view the PSI tree and explore the internal PSI structure of source code, you need to set up your IDE by following [this](https://www.jetbrains.com/help/idea/psi-viewer.html).
For the Rider IDE, please follow: [this](https://rider-support.jetbrains.com/hc/en-us/articles/207327910-How-to-run-JetBrains-Rider-in-Internal-Mode)
For small changes, [Gitpod](https://gitpod.io/#https://github.com/izhangzhihao/intellij-rainbow-brackets) is recommended. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/izhangzhihao/intellij-rainbow-brackets)
* `gradle test`
* `gradle runIde`
* `gradle buildPlugin`
## Support Us
You can support us by the following actions:
* Star this project
* Share this plugin with your friends
* Rate this plugin on [JetBrains plugin repository](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets)
* Make pull requests
* Report bugs
* Tell us your ideas
* Become a sponsor by donating on [Open Collective](https://opencollective.com/intellij-rainbow-brackets)
* Become a sponsor by donating with AliPay or WeChatPay
* Don't want to use AliPay's mobile App? If you could read Chinese, please use [the official website](https://shenghuo.alipay.com/send/payment/fill.htm) to transfer your donation to my Alipay account(izhangzhihao@hotmail.com). Otherwise, you can try [the English version of Alipay](https://global.alipay.com/) to transfer your donation.
<table>
<tr>
<th width="33%">Open Collective</th>
<th width="33%">AliPay</th>
<th width="33%">WeChatPay</th>
</tr>
<tr></tr>
<tr align="center">
<td>
<a href="https://opencollective.com/intellij-rainbow-brackets" target="_blank">
<img src="https://cdn.jsdelivr.net/gh/YiiGuxing/TranslationPlugin@master/images/open-collective.svg" width="171px" alt="OpenCollective">
</a>
</td>
<td><img src="https://user-images.githubusercontent.com/12044174/85197261-77dd5a80-b312-11ea-9630-51caf7d634f2.jpg"></td>
<td><img src="https://user-images.githubusercontent.com/12044174/85197263-7b70e180-b312-11ea-917a-35eab2ea08ae.jpg"></td>
</tr>
</table>
## Backers
Thank you to all our backers! ❤️ [[Become a backer](https://opencollective.com/intellij-rainbow-brackets#backer)]
<a href="https://opencollective.com/intellij-rainbow-brackets#backers" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/backers.svg?width=890"></a>
## Sponsors
Support this project by becoming a sponsor! 🌈 Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/intellij-rainbow-brackets#sponsor)]
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/0/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/1/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/2/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/3/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/4/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/5/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/6/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/7/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/8/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/9/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/10/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/10/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/11/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/11/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/12/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/12/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/13/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/13/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/14/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/14/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/15/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/15/avatar.svg"></a>

2
.github/FUNDING.yml vendored
View File

@ -1,2 +0,0 @@
open_collective: intellij-rainbow-brackets
custom: https://github.com/izhangzhihao/intellij-rainbow-brackets#support-us

View File

@ -1,57 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug?
assignees: ''
---
Your issue may already be reported!
Please search on the [issues](https://github.com/izhangzhihao/intellij-rainbow-brackets/issues) and the [document](https://github.com/izhangzhihao/intellij-rainbow-brackets/blob/2020.3/README.md) before creating one.
## Please check
- [ ] I already support this project.
- [ ] If you are submitting a feature request, please do consider donating us on [Open Collective](https://opencollective.com/intellij-rainbow-brackets) Or by AliPay/WeChatPay.
- [ ] This issue/feature request is not reported before.
## Your programming languages
## Expected Behavior
* If you're describing a bug, tell us what should happen
* If you're suggesting a change/improvement, tell us how it should work
## Current Behavior
* If describing a bug, tell us what happens instead of the expected behavior
* If suggesting a change/improvement, explain the difference from current behavior
## Possible Solution
Not obligatory, but suggest a fix/reason for the bug, or ideas how to implement the addition or change.
Or what have you tried to resolve this issue.
## Code snippet for reproduce (for bugs)
Please provide code snippet for reproduce bugs.
## Your Environment
* Plugin version:
* IDE & Operating System version, comment your env as below(go to "About IntelliJ IDEA" -> click the "copy" icon):
* NOTE: If you are going to report a bug but WITHOUT your env information, your issue might be closed directly.
```
IntelliJ IDEA 2021.2 (Ultimate Edition)
Build #IU-212.4746.92, built on July 27, 2021
Licensed to IntelliJ Rainbow Brackets / Zhang Zhihao
Subscription is active until February 3, 2022.
For non-commercial open source development only.
Runtime version: 11.0.11+9-b1504.13 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 11.4
GC: G1 Young Generation, G1 Old Generation
Memory: 4096M
Cores: 16
Registry: ide.tooltip.initialDelay=900, ide.balloon.shadow.size=0, scala.erase.compiler.process.jdk.once=false
Non-Bundled Plugins: com.intellij.properties.bundle.editor (212.4746.57), com.markskelton.one-dark-theme (5.3.0), lermitage.intellij.extra.icons (1.59.0.203), org.nik.presentation-assistant (1.0.9), kotest-plugin-intellij (1.1.36-IC-2021.1), Pythonid (212.4746.96), org.intellij.scala (2021.2.15), izhangzhihao.rainbow.brackets (6.19), com.intellij.bigdatatools (212.4037.55)
Kotlin: 212-1.5.10-release-IJ4746.92
```

View File

@ -1,24 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature request
assignees: ''
---
**Please [support us](https://github.com/izhangzhihao/intellij-rainbow-brackets#support-us) before creating a feature request, thanks for your support 😁**
## Please check
- [ ] I already support this project.
- [ ] If you are submitting a feature request, please do consider donating us on [Open Collective](https://opencollective.com/intellij-rainbow-brackets) Or by AliPay/WeChatPay.
- [ ] This issue/feature request is not reported before.
## Your programming languages
## Expected Behavior
* tell us how it will works
## Current Behavior
* explain the difference from current behavior

View File

@ -1,13 +0,0 @@
collective: intellij-rainbow-brackets
tiers:
- tiers: "*"
labels: ["backer"]
message: "Hey <author> , thanks for supporting us on Open Collective :heart::heart::heart: We'll give a special attention to this issue!"
invitation: |
Hey <author> :wave:,
Thank you for opening an issue/feature request. We will get back to you as soon as we can.
Also, check out our <link> and consider backing us - every little helps!
PS.: We offer `priority` support for all backers. Don't forget to
add `priority` label when you start backing us :smile:

View File

@ -1,75 +0,0 @@
name: Build
on:
push:
branches:
- '2020.3'
pull_request:
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
# Setup Java 11 environment for the next steps
- name: Setup Java
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: 11
# Check out current repository
- name: Fetch Sources
uses: actions/checkout@v2.3.4
# Cache Gradle dependencies
- name: Setup Gradle Dependencies Cache
uses: actions/cache@v2.1.6
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts') }}
# Cache Gradle Wrapper
- name: Setup Gradle Wrapper Cache
uses: actions/cache@v2.1.6
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
# Run detekt, ktlint and tests
- name: Run Linters and Test
run: ./gradlew check
# Run verifyPlugin Gradle task
- name: Verify Plugin
run: ./gradlew verifyPlugin
# Set environment variables
- name: Export Properties
id: properties
shell: bash
run: |
PROPERTIES="$(./gradlew properties --console=plain -q)"
IDE_VERSIONS="$(echo "$PROPERTIES" | grep "^pluginVerifierIdeVersions:" | base64)"
VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')"
NAME="intellij-rainbow-brackets"
ARTIFACT="${NAME}-${VERSION}.zip"
echo "::set-output name=ideVersions::$IDE_VERSIONS"
echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier"
echo "::set-output name=artifact::$ARTIFACT"
# Cache Plugin Verifier IDEs
- name: Setup Plugin Verifier IDEs Cache
uses: actions/cache@v2.1.6
with:
path: ${{ steps.properties.outputs.pluginVerifierHomeDir }}/ides
key: ${{ runner.os }}-plugin-verifier-${{ steps.properties.outputs.ideVersions }}
# Run IntelliJ Plugin Verifier action using GitHub Action
- name: Verify Plugin
run: ./gradlew runPluginVerifier -Pplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }}
- name: Upload artifact
uses: actions/upload-artifact@v2.2.3
with:
name: UnZipMe
path: ./build/distributions/${{ steps.properties.outputs.artifact }}

View File

@ -1,27 +0,0 @@
name: "Label and close wontfix issues"
on:
issues:
types: [opened]
jobs:
Label:
runs-on: ubuntu-latest
steps:
- uses: Naturalclar/issue-action@v2.0.2
with:
title-or-body: "both"
parameters: '[ {"keywords": ["RainbowHighlightVisitor.kt:35", "RainbowHighlightVisitor.kt:68", "RainbowHighlightVisitor.analyze"], "labels": ["invalid"]} ]'
github-token: "${{ secrets.GITHUB_TOKEN }}"
Close:
needs: [Label]
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3.0.14
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 0
days-before-close: 0
stale-issue-message: "This auto generated issue has been automatically marked as wontfix because nothing it's wrong here. If you think there are something really wrong, please reply this issue. Thanks for your cooperation."
stale-issue-label: "wontfix"
only-labels: "invalid"

View File

@ -1,46 +0,0 @@
# GitHub Actions Workflow created for handling the release process based on the draft release prepared
# with the Build workflow. Running the publishPlugin task requires the PUBLISH_TOKEN secret provided.
name: Release
on:
release:
types: [prereleased, released]
jobs:
# Prepare and publish the plugin to the Marketplace repository
release:
name: Publish Plugin
runs-on: ubuntu-latest
steps:
# Setup Java 11 environment for the next steps
- name: Setup Java
uses: actions/setup-java@v2
with:
distribution: "adopt"
java-version: 11
# Check out current repository
- name: Fetch Sources
uses: actions/checkout@v2.3.4
with:
ref: ${{ github.event.release.tag_name }}
# Cache Gradle dependencies
- name: Setup Gradle Dependencies Cache
uses: actions/cache@v2.1.6
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts') }}
# Cache Gradle Wrapper
- name: Setup Gradle Wrapper Cache
uses: actions/cache@v2.1.6
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }}
# Publish the plugin to the Marketplace
- name: Publish Plugin
env:
token: ${{ secrets.PUBLISH_TOKEN }}
run: ./gradlew publishPlugin

View File

@ -1,19 +0,0 @@
name: 'Stale handler'
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@main
id: stale
with:
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days'
days-before-stale: 30
days-before-close: 5
only-labels: 'PR welcome'
- name: Print outputs
run: echo ${{ join(steps.stale.outputs.*, ',') }}

13
.gitignore vendored
View File

@ -1,10 +1,5 @@
/.idea/*
!/.idea/icon.png
!/.idea/icon_dark.png
!/.idea/vcs.xml
.sandbox/
.gradle/
build/
*.iml
.DS_Store
out
!/.idea/runConfigurations
/.gradle/
/build/

5
.gitpod.Dockerfile vendored
View File

@ -1,5 +0,0 @@
FROM gitpod/workspace-full
USER gitpod
RUN brew install kotlin

View File

@ -1,4 +0,0 @@
image:
file: .gitpod.Dockerfile
tasks:
- init: gradle compileKotlin

View File

@ -1 +0,0 @@
11

View File

@ -1,15 +0,0 @@
pull_request_rules:
- name: Automatic merge on approval
conditions:
- "#approved-reviews-by>=1"
- status-success=Test
actions:
merge:
method: merge
- name: automatically merge dependabot's PRs
conditions:
- author~=^dependabot(|-preview)\[bot\]$
- status-success=Test
actions:
merge:
method: merge

View File

@ -1,742 +0,0 @@
## Change log
<p>2022.3.1</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2529">#2529: [paid][C#] fix:
compatibility issues with Rider 2022.3.</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2533">#2533: [paid][C#] fix:
colours incorrect when using "Cycle count on all brackets".</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2354">#2354: [paid][C#] fix:
colours incorrect when using "Cycle count on all brackets".</a></li>
<li>Fix many compatibility issues with IntelliJ platform 2022.3.</li>
</ul>
<br />
<p>6.26</p>
<ul>
<li>Bump dependencies.</li>
</ul>
<br />
<p>6.25</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/2484">#2484 Add configurable threshold
for number of lines for big files.</a></li>
</ul>
<br />
<p>6.24</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2478">#2478 Scope highlighting not
working with Hiberbee Theme(and other themes).</a></li>
</ul>
<br />
<p>6.23</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2465">#2465 Improved performance of
`annotateUtil`.</a></li>
</ul>
<br />
<p>6.22</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2408">#2408 Support Code With Me
client(Doesn't even need to be installed on the client side)</a></li>
</ul>
<br />
<p>6.21</p>
<ul>
<li>Handle exceptions in `RainbowHighlightVisitor.analyze()`</a></li>
<li>Cleanup 201.* stuff</a></li>
<li>Refactoring</a></li>
<li>Mirror changes from https://github.com/JetBrains/intellij-community</a></li>
<li>Using textMatches instead of text to avoid expensive traverses the whole PSI tree & format code</a></li>
<li>Add support for rainbowify Python keywords</li>
<li>Compatible with DataSpell</li>
</ul>
<br />
<p>6.20</p>
<ul>
<li>Handle exceptions in `RainbowHighlightVisitor.analyze()`</a></li>
<li>Cleanup 201.* stuff</a></li>
<li>Refactoring</a></li>
<li>Mirror changes from https://github.com/JetBrains/intellij-community</a></li>
<li>Using textMatches instead of text to avoid expensive traverses the whole PSI tree & format code</a></li>
<li>Add support for rainbowify Python keywords</li>
<li>Compatible with DataSpell</li>
</ul>
<br />
<p>6.19</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2280">#2280: [SQL] the END keyword
is improperly detected as closing a BEGIN scope when the END actually closes a CASE.</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1993">#1993: Change the default
color schema in light theme.</a></li>
<li>Nashorn Engine removed, compatible with JDK15+, tested with OpenJDK 17-ea+24 on MacBook Pro (16-inch, 2019) &
IntelliJ IDEA 2021.2 Build #IU-212.4638.7</li>
<li>Compatible with HUAWEI DevEco Studio</li>
</ul>
<br />
<p>6.18</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2037">#2037: Wrong coloring in
generic `<` after comparison operator `<`.</a>
</li>
<li>Error report removed.</li>
</ul>
<br />
<p>6.17</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/1068">#1068: @keeganwitt Add
language exclusions to settings (closes #1046) (#1068) </a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1067">#1067: Don't rainbowify big
files notification annoying</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1057">#1057: Wrong coloring in
lambda expressions with braces</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/497">#497: Add `<` & `>` support
for C# </a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/191">#191: C# Razor Pages
(.cshtml) Support </a></li>
<li>Deprecated API usage removed.</li>
</ul>
<br />
<p>6.16</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/458">#458: Color Parentheses
In Go Template</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/988">#988: (@Grandmother) minor:
fix mispell in notification message</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/973">#973: File text mismatch</a>
</li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/497">#497: C# in Rider - only
squiggly brackets are rainbowified </a></li>
</ul>
<br />
<p>6.15</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/897">#897: Initial support for
Pug/Jade Language</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/830">#830: New option "Do NOT
rainbowify template string"</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/784">#784: Disable rainbowify
on big files(>1000 lines for now)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/851">#851: Rainbowify tag name
doesn't works in JSX</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/875">#875: cannot create
configurable component</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/799">#799 #817: Wrong element
created by ASTFactory</a></li>
</ul>
<br />
<p>6.13</p>
<ul>
<li>Make as a non-dynamic plugin, so it now requires restart.</li>
</ul>
<br />
<p>6.12.1</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/516">#516: Add option to raibowify
tag name of XML/HTML(disabled by default)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/279">#279: Hide update
notification on any click & Disable update notification support</a></li>
<li>Feature: Rainbowify XML/HTML tag name.</li>
<li>Feature: Upgrade to kotlin 1.4.10.</li>
</ul>
<br />
<p>6.12</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/279">#279: Hide update
notification on any click & Disable update notification support</a></li>
<li>Feature: Rainbowify XML/HTML tag name.</li>
<li>Feature: Upgrade to kotlin 1.4.10.</li>
</ul>
<br />
<p>6.11</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/481">#481: rainbow-brackets does
not support bash shell properly(for BashSupport Pro and Shell Script)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/485">#485: Incorrect coloriziong
after lambda in C#</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/242">#242: Colorization is applied
only to left parenthesis in for loop(C#) </a></li>
<li>Feature: C# support switch to new implementation.</li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/476">#476: Cannot create class
com.github.izhangzhihao.rainbow.brackets.provider.SqlProvider</a></li>
</ul>
<br />
<p>6.10</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/480">#480: Plugin Incompatibility:
Android Studio 4.2 Alpha 8</a></li>
</ul>
<br />
<p>6.9.1</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/445">#445: No working on Android
Studio canary 4.2</a></li>
<li>Some bug fixs and code refactorings</li>
</ul>
<br />
<p>6.7</p>
<ul>
<li>Fix NPE</li>
</ul>
<br />
<p>6.6</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/436">#436: Duplicated indent
guides in 2020.2 EAP</a></li>
</ul>
<br />
<p>6.5</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/410">#410:
ArrayIndexOutOfBoundsException</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/429">#429:
NullPointerException</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/427">#427: Colorizing angle
brackets for Typescript generics</a></li>
<li>Some refactoring!</li>
</ul>
<br />
<p>6.4</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/420">#420: Exceptions in random
color generator</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/423">#423: Don't rainbow php and
echo tag</a></li>
<li>Fix anonymous feedback</li>
<li>Some refactoring!</li>
</ul>
<br />
<p>6.3</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/417">#417: Disable Rainbow
Indents in Zen mode</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/227">#227: Coloring for angle
bracket for C++ code</a></li>
<li>Fix some exceptions and refactoring!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/214">#214: New color generator
to generate your color schema</a></li>
</ul>
<br />
<p>6.2</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/410">#410:
ArrayIndexOutOfBoundsException when number of colors to less than 5</a></li>
</ul>
<br />
<p>6.1</p>
<ul>
<li>First release of 2020.1 and Java 11!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/235">#235: support SQL begin
end colorization</a></li>
<li>Notification improved</li>
<li>Error report improved</li>
<li>Deprecated API usage removed</li>
<li>Initial support for <a
href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/dynamic_plugins.html">dynamic
plugin</a></li>
</ul>
<br />
<p>6.0</p>
<ul>
<li>First release of 2020.1 and Java 11!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/235">#235: support SQL begin
end colorization</a></li>
<li>Notification improved</li>
<li>Error report improved</li>
<li>Deprecated API usage removed</li>
<li>Initial support for <a
href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/dynamic_plugins.html">dynamic
plugin</a></li>
</ul>
<br />
<p>5.35</p>
<ul>
<li>Final release of 2017.2 and Java 8! start from the next release, we will build against with 2020.1 and Java 11
</li>
</ul>
<br />
<p>5.34</p>
<ul>
<li>Compatible with Material Theme UI Plugin</li>
<li>Fix typo</li>
</ul>
<br />
<p>5.33</p>
<ul>
<li>Fix ArrayIndexOutOfBoundsException</li>
</ul>
<br />
<p>5.32</p>
<ul>
<li>Feature #391: Support cycle color on all bracket types(new option `Cycle count on all bracket types`)</li>
<li>Fix ArrayIndexOutOfBoundsException</li>
</ul>
<br />
<p>5.31</p>
<ul>
<li>#187 Feature: Ability to increase the number of colours in the IDE</li>
<li>#247 Feature: Add a button to apply the color code to all kind of brackets</li>
<li>#374 Feature: Add support for IntelliJ-Haskell</li>
<li>Fix #54: Disable rainbow for mxml files</li>
<li>Fix typo</li>
</ul>
<br />
<p>5.30</p>
<ul>
<li>Rollback indent guides</li>
</ul>
<br />
<p>5.29</p>
<ul>
<li>Compatible color schema with the latest version of material-theme-jetbrains</li>
<li>Fix some errors</li>
</ul>
<br />
<p>5.28</p>
<ul>
<li>Improve error report</li>
<li>Fix some errors with Nginx plugin</li>
</ul>
<br />
<p>5.27</p>
<ul>
<li>Improve rainbow indent guide lines</li>
</ul>
<br />
<p>5.26</p>
<ul>
<li>Improve error report.</li>
</ul>
<br />
<p>5.25</p>
<ul>
<li>Fix #259 Runtime error in rainbow indent guide lines.</li>
</ul>
<br />
<p>5.24</p>
<ul>
<li>Fix #252 Runtime error in rainbow indent guide lines.</li>
<li>Fix #254 Nginx support is been disabled from now on.</li>
<li>Re-enable anonymous feedback</li>
</ul>
<br />
<p>5.23</p>
<ul>
<li>#164 #251 New feature: Rainbow indent guide lines(experimental), Thanks https://github.com/YiiGuxing !</li>
</ul>
<br />
<p>5.22</p>
<ul>
<li>Fix #243 #180, allow users custom matched brace by setting `overrideMatchedBraceAttributes = false`</li>
</ul>
<br />
<p>5.21</p>
<ul>
<li>#65 [Scope Highlighting] now the effects will not been removed after shortcut released, users could press the
key `ESC` to do this. There also have an option `Press any key to remove the highlighting effects`</li>
<li>Refactoring & Remove dead code</li>
</ul>
<br />
<p>5.20</p>
<ul>
<li>#233 Option to not rainbowify brackets of the first level</li>
<li>#234 Color is displayed with wrong order in C# code</li>
</ul>
<br />
<p>5.19</p>
<ul>
<li>Fix notification.</li>
</ul>
<br />
<p>5.18</p>
<ul>
<li>Add notification for custom your own rainbow colors.</li>
</ul>
<br />
<p>5.17</p>
<ul>
<li>More color options for squiggly brackets before cycle(#215).</li>
<li>NullPointerException in while analyse code(#216).</li>
</ul>
<br />
<p>5.16</p>
<ul>
<li>Add shiny new icon.</li>
</ul>
<br />
<p>5.15</p>
<ul>
<li>Fix support for kotlin scheme attribute "KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW".</li>
</ul>
<br />
<p>5.14</p>
<ul>
<li>Remove deprecated API usages.</li>
<li>Refactoring.</li>
<li>Added Dart to the supported languages list(#205).</li>
</ul>
<br />
<p>5.13</p>
<ul>
<li>Fix macro support of Clang(#198)</li>
<li>Remove red-variation colors from default configuration(#192)</li>
</ul>
<br />
<p>5.12</p>
<ul>
<li>Intellij-rainbow-brackets now support C# language(#6)!</li>
</ul>
<br />
<p>5.11</p>
<ul>
<li>Now you could disable rainbow brackets for specific languages, see more info <a
href="https://github.com/izhangzhihao/intellij-rainbow-brackets#disable-rainbow-brackets-for-specific-languages">here</a>.
</li>
</ul>
<br />
<p>5.10</p>
<ul>
<li>New color settings page!!! Thanks this PR(#179) from https://github.com/YiiGuxing.</li>
<li>See the new settings page in Settings/Preferences > Editor > Color Scheme > Rainbow Brackets.</li>
</ul>
<br />
<p>5.9.1</p>
<ul>
<li>Fix wrong background color on a light theme of "MATCHED_BRACE_ATTRIBUTES"(#155).</li>
</ul>
<br />
<p>5.9</p>
<ul>
<li>Rainbow Kotlin lambda expression arrow(#142).</li>
<li>Experimental feature: Highlight Kotlin label(#143).</li>
<li>Override "MATCHED_BRACE_ATTRIBUTES".</li>
<li>Improve configs & docs.</li>
<li>Cleanup temp code & deprecated code.</li>
<li>Remove anonymous feedback.</li>
</ul>
<br />
<p>5.8.3</p>
<ul>
<li>Improve anonymous feedback</li>
</ul>
<br />
<p>5.8.2</p>
<ul>
<li>Override kotlin plugin setting `KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW` to empty so that we could
rainbowify multiple level lambda expressions.
</li>
</ul>
<br />
<p>5.8.1</p>
<ul>
<li>Fix #67: Can't find resource for bundle java.util.PropertyResourceBundle, key version</li>
<li>Improve anonymous feedback</li>
</ul>
<br />
<p>5.8</p>
<ul>
<li>Feature #52 Flat out all text other than brackets on key (Alt + Button3) press. (via pull request#63)
</li>
<li>Feature #61 Change Highlight Current Scope Keymap to Ctrl + Button3 (Windows & Linux) or Meta+ Button3
(Mac) (via pull request#63)
</li>
<li>Add anonymous feedback support</li>
</ul>
<br />
<p>5.7.1</p>
<ul>
<li>Fix #60 :Exception in v5.7</li>
<li>Experimental feature: Highlight current scope when Ctrl(Windows & Linux)/Meta(Mac) key pressed (feature
#37 / pull request#59)
</li>
</ul>
<br />
<p>5.7</p>
<ul>
<li>Experimental feature: Highlight current scope when Ctrl(Windows & Linux)/Meta(Mac) key pressed (feature
#37 / pull request#59)
</li>
</ul>
<br />
<p>5.6</p>
<ul>
<li>Performance improvement</li>
</ul>
<br />
<p>5.5</p>
<ul>
<li>Fix #53 The closing brackets or keywords are not highlighted (Ruby & PHP)</li>
</ul>
<br />
<p>5.4</p>
<ul>
<li>Fix #53 The closing brackets or keywords are not highlighted (Ruby & PHP)</li>
</ul>
<br />
<p>5.3</p>
<ul>
<li>Improve angle bracket support for Groovy</li>
</ul>
<br />
<p>5.2</p>
<ul>
<li>#48 Performance improvement</li>
<li>#49 Fix images size</li>
</ul>
<br />
<p>5.1</p>
<ul>
<li>#39 Enable rainbow html in js</li>
</ul>
<br />
<p>5.0</p>
<ul>
<li>Finally, intellij-rainbow-brackets released version 5.0 with all RC features & bug fix</li>
<li><b>Thanks for https://github.com/YiiGuxing, which helps move this plugin from `Annotator` to
`HighlightVisitor`!</b></li>
<li>Check more info at <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/25">here</a>
</li>
<li>From 5.x series we didn't need specific implementations like java/scala/kotlin specific implementations
in 3.x series anymore!
</li>
<br />
<li>#13 Add test for dart support & add `DartAngleBracketProvider` for support dart angle brackets</li>
<li>#18 where to customize brackets color? See the config guide in <a
href="https://github.com/izhangzhihao/intellij-rainbow-brackets#Config-brackets-colors">here</a>
</li>
<li>Add test for #39</li>
<li>#38 Add support for JSX (React)</li>
<li>Fix #27 Settings no longer works</li>
<li>#30 Adjust color: remove red, purple from color palettes, add some material design color to color
palettes.
</li>
<li>#32 Add version info in setting page</li>
<li>#31 Fix 'Enablement of round brackets enables all but angle brackets'</li>
<li>#10 #2 Add setting to disable rainbow-ify brackets without content</li>
<li>Show update notification after plugin updated</li>
<li>Add a lot of tests</li>
<li>Convert all java code to kotlin</li>
<br />
<li>And with much more features not documented in release notes.</li>
<li>NOTE: this version are build against with IU-2017.2.7, but verified by IC-2017.2</li>
</ul>
<br />
<p>5.0-RC4</p>
<ul>
<li>#10 #2 Add setting to disable rainbow-ify brackets without content</li>
<li>Show update notification after plugin updated</li>
<li>Add a lot of tests</li>
<li>Convert all java code to kotlin</li>
<li>NOTE: this version are build against with IU-2017.2.7, but verified by IC-2017.2</li>
</ul>
<br />
<p>5.0-RC3</p>
<ul>
<li>#32 Add version info in setting page</li>
<li>#31 Fix 'Enablement of round brackets enables all but angle brackets(#31)'</li>
</ul>
<br />
<p>5.0-RC2</p>
<ul>
<li>#30 Adjust color: remove red, purple from color palettes, add some material design color to color
palettes.
</li>
</ul>
<br />
<p>5.0-RC1</p>
<ul>
<li>Fix #27 Settings no longer works</li>
</ul>
<br />
<p>5.0-RC0</p>
<ul>
<li>This is the first RC releases on 5.x series!</li>
<li><b>Thanks for https://github.com/YiiGuxing, which helps move this plugin from `Annotator` to
`HighlightVisitor`!</b></li>
<li>Check more info at https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/25</li>
<li>This RC release has fantastic compatibility with previous release(3.x series).</li>
<li>From 5.x series we didn't need specific implementations like java/scala/kotlin specific implementations
in 3.x series anymore!
</li>
<li>And with much more features not documented in release notes.</li>
</ul>
<br />
<p>3.1</p>
<ul>
<li>Add a specific implementation for PHP language</li>
</ul>
<br />
<p>3.0</p>
<ul>
<li>Version 3.0 has been released, with all RC features & bug fix</li>
<li>Fix #23 Inconsistent colors</li>
<li>Fix #21 Wrong bracket colorization based on spaces</li>
<li>Fix #19 Kotlin expression inside string bug</li>
<li>Fix #12 Symbol less ">" is considered as a bracket even without leading "<"< /li>
<li>Fix #11 Same level brackets should have same color</li>
<li>And much more!</li>
<li>Add specific implement for java/kotlin/scala/javascript</li>
<li>Add example to help people add specific implementation for specific language!</li>
<li>Check out README.md on github https://github.com/izhangzhihao/intellij-rainbow-brackets</li>
</ul>
<br />
<p>3.0-RC5</p>
<ul>
<li>Adjust colors for default light theme. Thanks to https://github.com/YiiGuxing</li>
</ul>
<br />
<p>3.0-RC4</p>
<ul>
<li>Add specific implement for java/kotlin/scala</li>
<li>So now in java/kotlin/scala same level brackets should have same color.</li>
<li>Fix: #19:Kotlin expression inside string bug</li>
</ul>
<br />
<p>3.0-RC2</p>
<ul>
<li>Remove option for enable/disable rainbow for HTML/XML</li>
</ul>
<br />
<p>3.0-RC1</p>
<ul>
<li>Add new setting page to control what/how to colorify:</li>
<li>1. Add option to Enable/disable rainbow</li>
<li>2. Add option to Enable rainbow for any unsupported languages</li>
<li>3. Add option to Enable/disable rainbow for HTML/XML</li>
<li>4. Add option to Enable/disable rainbow for round brackets</li>
<li>5. Add option to Enable/disable rainbow for squiggly brackets</li>
<li>6. Add option to Enable/disable rainbow for square brackets</li>
<li>7. Add option to Enable/disable rainbow for angle brackets</li>
</ul>
<br />
<p>2.6</p>
<ul>
<li>Add support for salesforce apex language, thanks for https://github.com/onisuly</li>
</ul>
<br />
<p>2.5</p>
<ul>
<li>Fix Rust support, thanks for https://github.com/fst3a</li>
</ul>
<br />
<p>2.4</p>
<ul>
<li>Add support for SQL</li>
</ul>
<br />
<p>2.3</p>
<ul>
<li>Add support for HTML/XML</li>
</ul>
<br />
<p>2.2</p>
<ul>
<li>Add support for C#</li>
</ul>
<br />
<p>2.1</p>
<ul>
<li>New identifiable colors</li>
</ul>
<br />
<p>2.0</p>
<ul>
<li>Rainbowify brackets faster!</li>
</ul>
<br />
<p>1.1</p>
<ul>
<li>Support IntelliJ IDEA based IDEs version 14 and above</li>
</ul>
<br />
<p>1.0</p>
<ul>
<li>Initial release</li>
</ul>

298
README.md
View File

@ -1,297 +1,3 @@
# Colored Brackets
<div align="center">
<a href="https://plugins.jetbrains.com/plugin/10080-rainbow-brackets">
<img src="./src/main/resources/META-INF/pluginIcon.svg" width="320" height="320" alt="logo"/>
</a>
</div>
<h1 align="center">Intellij rainbow brackets</h1>
<p align="center">🌈Rainbow Brackets for IntelliJ based IDEs/Android Studio/HUAWEI DevEco Studio.</p>
<p align="center">
<!-- <a href="https://actions-badge.atrox.dev/izhangzhihao/intellij-rainbow-brackets/goto?ref=2020.3"><img alt="Build Status" src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fizhangzhihao%2Fintellij-rainbow-brackets%2Fbadge%3Fref%3D2020.3&style=flat-square" /></a> -->
<!-- <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/releases"><img src="https://img.shields.io/github/release/izhangzhihao/intellij-rainbow-brackets.svg?style=flat-square"></a> -->
<a href="https://plugins.jetbrains.com/plugin/10080-rainbow-brackets"><img src="https://img.shields.io/jetbrains/plugin/r/stars/10080?style=flat-square"></a>
<a href="https://plugins.jetbrains.com/embeddable/install/10080"><img src="https://img.shields.io/jetbrains/plugin/d/10080-rainbow-brackets.svg?style=flat-square"></a>
<a href="https://plugins.jetbrains.com/plugin/10080-rainbow-brackets"><img src="https://img.shields.io/jetbrains/plugin/v/10080-rainbow-brackets.svg?style=flat-square"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets#backer"><img src="https://img.shields.io/opencollective/backers/intellij-rainbow-brackets?style=flat-square"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets#sponsor"><img src="https://img.shields.io/opencollective/sponsors/intellij-rainbow-brackets?style=flat-square"></a>
</p>
<br>
- [Change log](https://github.com/izhangzhihao/intellij-rainbow-brackets/blob/2020.3/CHANGELOG.md)
- [Compatibility](#compatibility)
- [Supported languages](#supported-languages)
- [Author's choice](#authors-choice)
- [Sponsored By CodeStream](#sponsored-by-codestream)
- [Install](#install)
- [Screenshots](#screenshots)
- [Customize colors](#customize-colors)
- [Use color generator](#use-color-generator)
- [Config file path](#config-file-path)
- [HTML code in js](#html-code-in-js)
- [Kotlin function literal braces and arrow](#kotlin-function-literal-braces-and-arrow)
- [Disable rainbow brackets for specific languages](#disable-rainbow-brackets-for-specific-languages)
- [Contribute](#contribute)
- [Support Us](#support-us)
- [Backers](#backers)
- [Sponsors](#sponsors)
- [Acknowledgements](#acknowledgements)
## Compatibility
IntelliJ IDEA, PhpStorm, WebStorm, PyCharm, RubyMine, AppCode, CLion, Gogland, DataGrip, Rider, MPS, Android Studio, HUAWEI DevEco Studio, DataSpell, Code With Me
## Supported languages
Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Elixir, ObjectiveC, PHP, HTML, XML, SQL, Apex language, C#, Dart, Pug/Jade, Bash, Vue.js, C# Razor Pages, GLSL(the OpenGL Shading Language), Go Template, C++, C...
## Author's choice
Rainbow Brackets + One Dark Theme + Nyan Progress Bar + [Fira Code](https://github.com/tonsky/FiraCode) (Font)
## Sponsored By [CodeStream](https://sponsorlink.codestream.com/?utm_source=jbmarket&utm_campaign=jbrainbowbrackets&utm_medium=banner)
[![https://codestream.com](https://alt-images.codestream.com/codestream_logo_jbrainbowbrackets.png)](https://sponsorlink.codestream.com/?utm_source=jbmarket&utm_campaign=jbrainbowbrackets&utm_medium=banner)
Eliminate context switching and costly distractions. Create and merge PRs and perform code reviews from inside your IDE while using jump-to-definition, your keybindings, and other IDE favorites. [Learn more](https://sponsorlink.codestream.com/?utm_source=jbmarket&utm_campaign=jbrainbowbrackets&utm_medium=banner)!
Development powered by [JetBrains](https://www.jetbrains.com/?from=IntelliJRainbowBrackets).
[![https://www.jetbrains.com/?from=IntelliJRainbowBrackets](./screenshots/jetbrains.svg)](https://www.jetbrains.com/?from=IntelliJRainbowBrackets)
Whichever technologies you use, there's a JetBrains tool to match.
## Install
<a href="https://plugins.jetbrains.com/embeddable/install/10080">
<img src="https://user-images.githubusercontent.com/12044174/123105697-94066100-d46a-11eb-9832-338cdf4e0612.png" width="300"/>
</a>
Or you could install it inside your IDE:
For Windows & Linux - <kbd>File</kbd> > <kbd>Settings</kbd> > <kbd>Plugins</kbd> > <kbd>Marketplace</kbd> > <kbd>Search for "Rainbow Brackets"</kbd> > <kbd>Install Plugin</kbd> > <kbd>Restart IntelliJ IDEA</kbd>
For Mac - <kbd>IntelliJ IDEA</kbd> > <kbd>Preferences</kbd> > <kbd>Plugins</kbd> > <kbd>Marketplace</kbd> > <kbd>Search for "Rainbow Brackets"</kbd> > <kbd>Install Plugin</kbd> > <kbd>Restart IntelliJ IDEA</kbd>
### Install snapshot build
You can download the latest snapshot build from [here](https://github.com/izhangzhihao/intellij-rainbow-brackets/actions/workflows/build.yml?query=workflow%3ABuild), just click the latest build and click the 'Artifacts' tab.(You need logged in via github) After the snapshot build downloaded, unzip it(via `unzip UnZipMe.zip`), and install the zip file(intellij-rainbow-brackets.zip[]()) by `Install Plugin from Disk...`.
## Screenshots
* Java
![](./screenshots/with-java.png)
![](./screenshots/with-material-theme-ui.png)
* Scala
![](./screenshots/with-scala.png)
* Clojure
![](./screenshots/with-Clojure.png)
* Kotlin
![](./screenshots/with-kotlin.png)
* HTML/XML
![](./screenshots/with-HTML.png)
* Scope highlighting
**The highlight effects will not remove after release the shortcuts, but press `ESC` key can do this. You could also config `Press any key to remove the highlighting effect` in setting page.**
<kbd>Ctrl + Button3</kbd>(Windows & Linux) or <kbd>Meta+ Button3</kbd>(Mac):
NOTE: <kbd>Button3</kbd> means "Secondary Click (click or tap with two fingers)" on Mac os, "Right click" for Windows or Linux.
![](https://user-images.githubusercontent.com/10737066/40234968-46593fe2-5adb-11e8-8ea8-0026fad86ca9.gif)
<kbd>Alt + Button3</kbd>:
NOTE: <kbd>Button3</kbd> means "Secondary Click (click or tap with two fingers)" on Mac os, "Right click" for Windows or Linux.
![](https://user-images.githubusercontent.com/10737066/40235004-642dfe54-5adb-11e8-9fd7-648b92fab8f5.gif)
* Rainbow indent guide lines
![](https://user-images.githubusercontent.com/10737066/65765792-c41cb500-e15b-11e9-8877-2239c6afa7bf.gif)
* looking forward to your screenshots(PR welcome!)
## Customize colors
<kbd>Settings/Preferences</kbd> > <kbd>Editor</kbd> > <kbd>Color Scheme</kbd> > <kbd>Rainbow Brackets</kbd>:
![Customize colors](./screenshots/customize-colors.png)
## Use color generator
If you didn't like the build-in colors, or want some new color but don't want to try out and pick colors. Please use color generator.
<kbd>Settings/Preferences</kbd> > <kbd>Other Settings</kbd> > <kbd>Rainbow Brackets</kbd> > <kbd>Use color generator</kbd>
If you turn on this option, we will auto generate some colors for you.
### Advanced options of color generator
If you need more control, you can decide the options of color generator by edit [the config file](#config-file-path),
The value of the option `customColorGeneratorOption` is a json object, available options are:
```hue``` Controls the hue of the generated color. You can pass a string representing a color name: ```red```, ```orange```, ```yellow```, ```green```, ```blue```, ```purple```, ```pink``` and ```monochrome``` are currently supported. If you pass a hexidecimal color string such as ```#00FFFF```, color generator will extract its hue value and use that to generate colors.
```luminosity``` Controls the luminosity of the generated color. You can specify a string containing ```bright```, ```light``` or ```dark```.
Please make sure the value of the option `customColorGeneratorOption` is escaped in xml format,
you can use [this tool](https://www.freeformatter.com/xml-escape.html#ad-output) to do this. Please don't forget to restart your IDE after change the config file.
```xml
<application>
<component name="RainbowSettings">
<option name="useColorGenerator" value="true" />
<option name="customColorGeneratorOption" value="{&quot;luminosity&quot;: &quot;light&quot;,&quot;hue&quot;: &quot;blue&quot;}"/>
</component>
</application>
```
### Want to config the number of colors?
<kbd>Settings/Preferences</kbd> > <kbd>Other Settings</kbd> > <kbd>Rainbow Brackets</kbd> > `Number of colors`: 5 or more
And you can use the color generator and config you number of colors at the same time.
NOTE: For default and darcula color scheme(`Editor -> Color Scheme -> Rainbow Brackets -> Scheme`) the color number is 10, for the other scheme the number is 5, if your number is bigger than the number, you can config them in the config file.
If the color is not exist, we will use color generator to generator it for you.
Please follow [the official guide](https://www.jetbrains.com/help/idea/configuring-colors-and-fonts.html#share-color-scheme):
* `Export a color scheme as XML`
* Edit the xml file, put `ROUND_BRACKETS_RAINBOW_COLOR5` to `ROUND_BRACKETS_RAINBOW_COLOR100` to match your number just like [the default color scheme](./src/main/resources/colorSchemes/rainbow-color-default-darcula.xml).
* `Import a color scheme`
## Config file path
If you want to customize the advanced configuration, you could edit the config file then restart your IDE.
Config file path in `APP_CONFIG/rainbow_brackets.xml`.
In MAC OS env maybe like `~/Library/Preferences/IntelliJIdea2020.2/options/rainbow_brackets.xml`.
If you are using the ToolBox, then it will be like `~/Library/ApplicationSupport/JetBrains/IntelliJIdea2020.2/options/rainbow_brackets.xml`
In Linux env maybe like `~/.IntelliJIdea/config/options/rainbow_brackets.xml`.
In Windows env maybe like `C:\Users\izhangzhihao\.IntelliJIdea2020.2\config\options\rainbow_brackets.xml`.
## HTML code in js
To enable rainbow brackets for HTML inside js code like this:
```javascript
var html = '<div><div><div>Hello</div></div></div>';
```
This plugin will automatically override color scheme property "HTML_CODE" [cause our rainbow color been covered by intellij built-in functionality](https://intellij-support.jetbrains.com/hc/en-us/community/posts/360000117450-My-HighlightVisitor-been-covered-by-intellij-built-in-functionality).
You still could set `<option name="rainbowifyHTMLInsideJS" value="false" />` in config file to disable.
## Kotlin function literal braces and arrow
To enable rainbow brackets for multiple level lambda Kotlin code like this:
```kotlin
event.throwable?.let { throwable ->
IdeErrorsDialog.findPluginId(throwable)?.let { pluginId ->
PluginManager.getPlugin(pluginId)?.let { ideaPluginDescriptor ->
if (!ideaPluginDescriptor.isBundled) {
bean.pluginName = ideaPluginDescriptor.name
bean.pluginVersion = ideaPluginDescriptor.version
}
}
}
}
```
This plugin will automatically override color scheme property "KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW" cause our rainbow color is being covered by kotlin plugin built-in functionality.
You still could set `<option name="rainbowifyKotlinFunctionLiteralBracesAndArrow" value="false" />` in config file to disable.
## Disable rainbow brackets for specific languages
<kbd>Settings/Preferences</kbd> > <kbd>Other Settings</kbd> > <kbd>Rainbow Brackets</kbd> > `Do NOT rainbowify these languages (name or extension, comma separated)`:
NOTE: You can use **name** of language or **extension** of file name(The names should be **lowercase**).
## Contribute
NOTE: To view the PSI tree and explore the internal PSI structure of source code, you need to set up your IDE by following [this](https://www.jetbrains.com/help/idea/psi-viewer.html).
For the Rider IDE, please follow: [this](https://rider-support.jetbrains.com/hc/en-us/articles/207327910-How-to-run-JetBrains-Rider-in-Internal-Mode)
* `gradle test`
* `gradle runIde`
* `gradle buildPlugin`
## Support Us
You can support us by the following actions:
* Star this project
* Share this plugin with your friends
* Rate this plugin on [JetBrains plugin repository](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets)
* Make pull requests
* Report bugs
* Tell us your ideas
* Become a sponsor by donating on [Open Collective](https://opencollective.com/intellij-rainbow-brackets)
* Become a sponsor by donating with AliPay or WeChatPay
* Don't want to use AliPay's mobile App? If you could read Chinese, please use [the official website](https://shenghuo.alipay.com/send/payment/fill.htm) to transfer your donation to my Alipay account(izhangzhihao@hotmail.com). Otherwise, you can try [the English version of Alipay](https://global.alipay.com/) to transfer your donation.
<table>
<tr>
<th width="33%">Open Collective</th>
<th width="33%">AliPay</th>
<th width="33%">WeChatPay</th>
</tr>
<tr></tr>
<tr align="center">
<td>
<a href="https://opencollective.com/intellij-rainbow-brackets" target="_blank">
<img src="https://opencollective.com/static/images/opencollectivelogo-footer-n.svg" width="171px" alt="OpenCollective">
</a>
</td>
<td><img src="https://user-images.githubusercontent.com/12044174/85197261-77dd5a80-b312-11ea-9630-51caf7d634f2.jpg"></td>
<td><img src="https://user-images.githubusercontent.com/12044174/85197263-7b70e180-b312-11ea-917a-35eab2ea08ae.jpg"></td>
</tr>
</table>
## Backers
Thank you to all our backers! ❤️ [[Become a backer](https://opencollective.com/intellij-rainbow-brackets#backer)]
<a href="https://opencollective.com/intellij-rainbow-brackets#backers" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/backers.svg?width=890"></a>
## Sponsors
Support this project by becoming a sponsor! 🌈 Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/intellij-rainbow-brackets#sponsor)]
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/0/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/1/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/2/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/3/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/4/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/5/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/6/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/7/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/8/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/9/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/10/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/10/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/11/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/11/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/12/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/12/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/13/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/13/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/14/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/14/avatar.svg"></a>
<a href="https://opencollective.com/intellij-rainbow-brackets/sponsor/15/website" target="_blank"><img src="https://opencollective.com/intellij-rainbow-brackets/sponsor/15/avatar.svg"></a>
## Acknowledgements
Intellij-rainbow-brackets is heavily inspired by [Rainbow Brackets for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=2gua.rainbow-brackets)
This is a fork of the [🌈Rainbow Brackets](https://github.com/izhangzhihao/intellij-rainbow-brackets) plugin by [izhangzhihao](https://github.com/izhangzhihao), based on version 6.26.

View File

@ -1,103 +1,70 @@
import org.jetbrains.intellij.tasks.RunPluginVerifierTask.FailureLevel.*
@file:Suppress("ConvertLambdaToReference")
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val name: String by project
val ideaVersion: String by project
val kotlinVersion: String by project
val javaVersion: String by project
val kotlinLanguageVersion: String by project
val kotlinTargetVersion: String by project
val pluginVerifierIdeVersions: String by project
val publishChannels: String by project
plugins {
id("org.jetbrains.intellij") version "1.9.0"
id("com.adarshr.test-logger") version "3.2.0"
id("org.jetbrains.kotlin.jvm") version "1.7.20"
id("idea")
kotlin("jvm") version "1.9.21"
id("org.jetbrains.intellij") version "1.17.4"
}
group = "com.chylex.intellij.coloredbrackets"
version = "0.0.1"
repositories {
mavenLocal()
mavenCentral()
maven(url = "https://maven-central.storage-download.googleapis.com/repos/central/data/")
maven(url = "https://maven.aliyun.com/nexus/content/groups/public/")
maven(url = "https://www.jetbrains.com/intellij-repository/releases")
maven(url = "https://www.jetbrains.com/intellij-repository/snapshots")
}
intellij {
pluginName.set(name)
version.set(ideaVersion)
//localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/201.6668.121/IntelliJ IDEA 2020.1 EAP.app/Contents'
//localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/201.6668.126/CLion.app/Contents'
type.set("IU")
version.set("2023.3")
updateSinceUntilBuild.set(false)
plugins.set(
listOf(
"java",
"java-i18n",
"JavaScriptLanguage",
"DatabaseTools",
"CSS",
"platform-images",
// Built-in
"Groovy",
"properties",
"yaml",
"org.jetbrains.kotlin:203-$kotlinVersion-release-IJ5981.133-1",
"org.intellij.scala:2020.3.21",
"Dart:203.5981.155",
"org.jetbrains.plugins.ruby:203.5981.155",
"com.jetbrains.php:203.5981.155",
"com.jetbrains.sh:203.5981.37",
"com.jetbrains.plugins.jade:203.5981.155",
"org.jetbrains.plugins.go-template:203.5981.155",
"Pythonid:203.5981.155",
"JavaScript",
"com.intellij.css",
"com.intellij.database",
"com.intellij.java",
"org.intellij.plugins.markdown",
"org.jetbrains.kotlin",
"org.jetbrains.plugins.yaml",
// Downloaded
"Dart:233.11799.172", // https://plugins.jetbrains.com/plugin/6351-dart/versions/stable
"Pythonid:233.11799.300", // https://plugins.jetbrains.com/plugin/631-python/versions
"com.jetbrains.php:233.11799.300", // https://plugins.jetbrains.com/plugin/6610-php/versions
"com.jetbrains.sh:233.11799.165", // https://plugins.jetbrains.com/plugin/13122-shell-script/versions
"org.intellij.scala:2023.3.19", // https://plugins.jetbrains.com/plugin/1347-scala/versions
"org.jetbrains.plugins.go-template:233.11799.172", // https://plugins.jetbrains.com/plugin/10581-go-template/versions
"org.jetbrains.plugins.ruby:233.11799.300", // https://plugins.jetbrains.com/plugin/1293-ruby/versions
)
)
}
tasks {
runIde {
systemProperties["idea.auto.reload.plugins"] = false
jvmArgs = listOf(
"-Xms512m",
"-Xmx2048m",
)
}
publishPlugin {
token.set(System.getenv("token"))
channels.set(publishChannels.split(",").map { it.trim() }.toList())
}
runPluginVerifier {
ideVersions.set(pluginVerifierIdeVersions.split(",").map { it.trim() }.toList())
failureLevel.set(listOf(COMPATIBILITY_PROBLEMS))
}
testlogger {
theme = com.adarshr.gradle.testlogger.theme.ThemeType.MOCHA
}
kotlin {
jvmToolchain(17)
}
dependencies {
//implementation("org.eclipse.mylyn.github:org.eclipse.egit.github.core:5.11.0.202103091610-r") {
// exclude("gson")
//}
compileOnly(fileTree("libs"))
testImplementation("io.kotest:kotest-assertions-core:5.5.0")
testImplementation("junit:junit:4.13.2")
testImplementation("io.kotest:kotest-assertions-core:5.8.0") {
exclude(group = "org.jetbrains.kotlin")
}
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
tasks.patchPluginXml {
sinceBuild.set("233")
}
tasks.test {
useJUnit()
}
tasks.withType<KotlinCompile> {
kotlinOptions.languageVersion = kotlinLanguageVersion
kotlinOptions.apiVersion = kotlinTargetVersion
kotlinOptions.jvmTarget = javaVersion
kotlinOptions.freeCompilerArgs = listOf("-Xskip-runtime-version-check", "-Xjsr305=strict")
kotlinOptions.freeCompilerArgs = listOf(
"-Xjvm-default=all"
)
}

View File

@ -1,12 +1 @@
group="com.github.izhangzhihao"
name="Rainbow Brackets"
org.gradle.parallel=true
ideaVersion=IU-203.5981.155
javaVersion=11
kotlinVersion=1.4.21
kotlinLanguageVersion=1.4
kotlinTargetVersion=1.4
version=6.26
publishChannels=Stable
kotlin.stdlib.default.dependency=false
pluginVerifierIdeVersions=WS-2020.3, IIC-2021.1, IIU-2021.2

Binary file not shown.

View File

@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

294
gradlew vendored
View File

@ -1,7 +1,7 @@
#!/usr/bin/env sh
#!/bin/sh
#
# Copyright 2015 the original author or authors.
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -17,67 +17,99 @@
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
MAX_FD=maximum
warn () {
echo "$*"
}
} >&2
die () {
echo
echo "$*"
echo
exit 1
}
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MSYS* | MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
@ -87,9 +119,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -98,88 +130,120 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

11
gradlew.bat vendored
View File

@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" width="120.1" height="130.2" x="0" style="enable-background:new 0 0 120.1 130.2" y="0" version="1.1" viewBox="0 0 120.1 130.2" xml:space="preserve"><g><linearGradient id="XMLID_2_" x1="31.841" x2="110.24" y1="120.558" y2="73.24" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#fcee39"/><stop offset="1" style="stop-color:#f37b3d"/></linearGradient><path id="XMLID_3041_" d="M118.6,71.8c0.9-0.8,1.4-1.9,1.5-3.2c0.1-2.6-1.8-4.7-4.4-4.9 c-1.2-0.1-2.4,0.4-3.3,1.1l0,0l-83.8,45.9c-1.9,0.8-3.6,2.2-4.7,4.1c-2.9,4.8-1.3,11,3.6,13.9c3.4,2,7.5,1.8,10.7-0.2l0,0l0,0 c0.2-0.2,0.5-0.3,0.7-0.5l78-54.8C117.3,72.9,118.4,72.1,118.6,71.8L118.6,71.8L118.6,71.8z" style="fill:url(#XMLID_2_)"/><linearGradient id="XMLID_3_" x1="48.361" x2="119.918" y1="6.908" y2="69.555" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ef5a6b"/><stop offset=".57" style="stop-color:#f26f4e"/><stop offset="1" style="stop-color:#f37b3d"/></linearGradient><path id="XMLID_3049_" d="M118.8,65.1L118.8,65.1L55,2.5C53.6,1,51.6,0,49.3,0 c-4.3,0-7.7,3.5-7.7,7.7v0c0,2.1,0.8,3.9,2.1,5.3l0,0l0,0c0.4,0.4,0.8,0.7,1.2,1l67.4,57.7l0,0c0.8,0.7,1.8,1.2,3,1.3 c2.6,0.1,4.7-1.8,4.9-4.4C120.2,67.3,119.7,66,118.8,65.1z" style="fill:url(#XMLID_3_)"/><linearGradient id="XMLID_4_" x1="52.947" x2="10.538" y1="63.641" y2="37.156" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#7c59a4"/><stop offset=".385" style="stop-color:#af4c92"/><stop offset=".765" style="stop-color:#dc4183"/><stop offset=".957" style="stop-color:#ed3d7d"/></linearGradient><path id="XMLID_3042_" d="M57.1,59.5C57,59.5,17.7,28.5,16.9,28l0,0l0,0c-0.6-0.3-1.2-0.6-1.8-0.9 c-5.8-2.2-12.2,0.8-14.4,6.6c-1.9,5.1,0.2,10.7,4.6,13.4l0,0l0,0C6,47.5,6.6,47.8,7.3,48c0.4,0.2,45.4,18.8,45.4,18.8l0,0 c1.8,0.8,3.9,0.3,5.1-1.2C59.3,63.7,59,61,57.1,59.5z" style="fill:url(#XMLID_4_)"/><linearGradient id="XMLID_5_" x1="52.174" x2="10.771" y1="3.702" y2="37.897" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#ef5a6b"/><stop offset=".364" style="stop-color:#ee4e72"/><stop offset="1" style="stop-color:#ed3d7d"/></linearGradient><path id="XMLID_3057_" d="M49.3,0c-1.7,0-3.3,0.6-4.6,1.5L4.9,28.3c-0.1,0.1-0.2,0.1-0.2,0.2l-0.1,0 l0,0c-1.7,1.2-3.1,3-3.9,5.1C-1.5,39.4,1.5,45.9,7.3,48c3.6,1.4,7.5,0.7,10.4-1.4l0,0l0,0c0.7-0.5,1.3-1,1.8-1.6l34.6-31.2l0,0 c1.8-1.4,3-3.6,3-6.1v0C57.1,3.5,53.6,0,49.3,0z" style="fill:url(#XMLID_5_)"/><g id="XMLID_3008_"><rect id="XMLID_3033_" width="51" height="51" x="34.6" y="37.4" style="fill:#000"/><rect id="XMLID_3032_" width="19.1" height="3.2" x="39" y="78.8" style="fill:#fff"/><g id="XMLID_3009_"><path id="XMLID_3030_" d="M38.8,50.8l1.5-1.4c0.4,0.5,0.8,0.8,1.3,0.8c0.6,0,0.9-0.4,0.9-1.2l0-5.3l2.3,0 l0,5.3c0,1-0.3,1.8-0.8,2.3c-0.5,0.5-1.3,0.8-2.3,0.8C40.2,52.2,39.4,51.6,38.8,50.8z" style="fill:#fff"/><path id="XMLID_3028_" d="M45.3,43.8l6.7,0v1.9l-4.4,0V47l4,0l0,1.8l-4,0l0,1.3l4.5,0l0,2l-6.7,0 L45.3,43.8z" style="fill:#fff"/><path id="XMLID_3026_" d="M55,45.8l-2.5,0l0-2l7.3,0l0,2l-2.5,0l0,6.3l-2.3,0L55,45.8z" style="fill:#fff"/><path id="XMLID_3022_" d="M39,54l4.3,0c1,0,1.8,0.3,2.3,0.7c0.3,0.3,0.5,0.8,0.5,1.4v0 c0,1-0.5,1.5-1.3,1.9c1,0.3,1.6,0.9,1.6,2v0c0,1.4-1.2,2.3-3.1,2.3l-4.3,0L39,54z M43.8,56.6c0-0.5-0.4-0.7-1-0.7l-1.5,0l0,1.5 l1.4,0C43.4,57.3,43.8,57.1,43.8,56.6L43.8,56.6z M43,59l-1.8,0l0,1.5H43c0.7,0,1.1-0.3,1.1-0.8v0C44.1,59.2,43.7,59,43,59z" style="fill:#fff"/><path id="XMLID_3019_" d="M46.8,54l3.9,0c1.3,0,2.1,0.3,2.7,0.9c0.5,0.5,0.7,1.1,0.7,1.9v0 c0,1.3-0.7,2.1-1.7,2.6l2,2.9l-2.6,0l-1.7-2.5h-1l0,2.5l-2.3,0L46.8,54z M50.6,58c0.8,0,1.2-0.4,1.2-1v0c0-0.7-0.5-1-1.2-1 l-1.5,0v2H50.6z" style="fill:#fff"/><path id="XMLID_3016_" d="M56.8,54l2.2,0l3.5,8.4l-2.5,0l-0.6-1.5l-3.2,0l-0.6,1.5l-2.4,0L56.8,54z M58.8,59l-0.9-2.3L57,59L58.8,59z" style="fill:#fff"/><path id="XMLID_3014_" d="M62.8,54l2.3,0l0,8.3l-2.3,0L62.8,54z" style="fill:#fff"/><path id="XMLID_3012_" d="M65.7,54l2.1,0l3.4,4.4l0-4.4l2.3,0l0,8.3l-2,0L68,57.8l0,4.6l-2.3,0L65.7,54z" style="fill:#fff"/><path id="XMLID_3010_" d="M73.7,61.1l1.3-1.5c0.8,0.7,1.7,1,2.7,1c0.6,0,1-0.2,1-0.6v0 c0-0.4-0.3-0.5-1.4-0.8c-1.8-0.4-3.1-0.9-3.1-2.6v0c0-1.5,1.2-2.7,3.2-2.7c1.4,0,2.5,0.4,3.4,1.1l-1.2,1.6 c-0.8-0.5-1.6-0.8-2.3-0.8c-0.6,0-0.8,0.2-0.8,0.5v0c0,0.4,0.3,0.5,1.4,0.8c1.9,0.4,3.1,1,3.1,2.6v0c0,1.7-1.3,2.7-3.4,2.7 C76.1,62.5,74.7,62,73.7,61.1z" style="fill:#fff"/></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

View File

@ -1,6 +1 @@
pluginManagement {
repositories {
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
gradlePluginPortal()
}
}
rootProject.name = "ColoredBrackets"

View File

@ -3,12 +3,17 @@ package com.github.izhangzhihao.rainbow.brackets
import com.github.izhangzhihao.rainbow.brackets.provider.BracePairProvider
import com.github.izhangzhihao.rainbow.brackets.util.memoize
import com.intellij.codeInsight.highlighting.BraceMatchingUtil
import com.intellij.lang.*
import com.intellij.lang.BracePair
import com.intellij.lang.CompositeLanguage
import com.intellij.lang.Language
import com.intellij.lang.LanguageBraceMatching
import com.intellij.lang.LanguageExtension
import com.intellij.lang.PairedBraceMatcher
import com.intellij.psi.tree.IElementType
object BracePairs {
private val providers = LanguageExtension<BracePairProvider>("izhangzhihao.rainbow.brackets.bracePairProvider")
private val providers = LanguageExtension<BracePairProvider>("com.chylex.coloredbrackets.bracePairProvider")
private val bracePairs =
Language.getRegisteredLanguages()
@ -19,19 +24,21 @@ object BracePairs {
val pairs =
LanguageBraceMatching.INSTANCE.forLanguage(language)?.pairs.let {
if (it == null || it.isEmpty()) {
if (it.isNullOrEmpty()) {
language.associatedFileType
?.let { fileType -> BraceMatchingUtil.getBraceMatcher(fileType, language) as? PairedBraceMatcher }
?.pairs
} else {
}
else {
it
}
}
val pairsList = providers.forLanguage(language)?.pairs()?.let {
if (pairs != null && pairs.isNotEmpty()) {
if (!pairs.isNullOrEmpty()) {
it.toMutableSet().apply { addAll(pairs) }
} else {
}
else {
it
}
} ?: pairs?.toList()
@ -44,17 +51,19 @@ object BracePairs {
?.filter {
if (blackSet != null) {
!blackSet.contains(it.toString())
} else {
}
else {
true
}
}
?.map { listOf(Pair(it.leftBraceType.toString(), it), Pair(it.rightBraceType.toString(), it)) }
?.flatten()
?.forEach { it ->
?.forEach {
val bracePairs = braceMap[it.first]
if (bracePairs == null) {
braceMap[it.first] = mutableListOf(it.second)
} else {
}
else {
bracePairs.add(it.second)
}
}
@ -65,7 +74,7 @@ object BracePairs {
fun getBracePairs(language: Language): MutableMap<String, MutableList<BracePair>>? = bracePairs[language.displayName]
private fun getBraceTypeSetOf(language: Language): Set<IElementType> = getBracePairs(language)?.values?.flatten()?.map { it -> listOf(it.leftBraceType, it.rightBraceType) }?.flatten()?.toSet() ?: emptySet()
private fun getBraceTypeSetOf(language: Language): Set<IElementType> = getBracePairs(language)?.values?.flatten()?.map { listOf(it.leftBraceType, it.rightBraceType) }?.flatten()?.toSet() ?: emptySet()
val braceTypeSet: (Language) -> Set<IElementType> = { language: Language -> getBraceTypeSetOf(language) }.memoize()
}

View File

@ -1,48 +0,0 @@
package com.github.izhangzhihao.rainbow.brackets
import com.intellij.notification.*
import com.intellij.notification.impl.NotificationsManagerImpl
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.popup.Balloon
import com.intellij.openapi.wm.WindowManager
import com.intellij.ui.BalloonLayoutData
import com.intellij.ui.awt.RelativePoint
import java.awt.Point
class ApplicationServicePlaceholder : Disposable {
override fun dispose() = Unit
companion object {
val INSTANCE: ApplicationServicePlaceholder = ApplicationManager.getApplication().getService(ApplicationServicePlaceholder::class.java)
}
}
fun createNotification(title: String, content: String, type: NotificationType,
listener: NotificationListener): Notification {
return NotificationGroupManager.getInstance().getNotificationGroup("Rainbow Brackets Notification Group")
.createNotification(title, content, type).setListener(listener)
}
fun showFullNotification(project: Project, notification: Notification) {
val frame = WindowManager.getInstance().getIdeFrame(project)
if (frame == null) {
notification.notify(project)
return
}
val bounds = frame.component.bounds
val target = RelativePoint(frame.component, Point(bounds.x + bounds.width, 20))
try {
val balloon = NotificationsManagerImpl.createBalloon(frame,
notification,
true, // showCallout
true, // hideOnClickOutside
BalloonLayoutData.fullContent(),
ApplicationServicePlaceholder.INSTANCE)
balloon.show(target, Balloon.Position.atLeft)
} catch (e: Exception) {
notification.notify(project)
}
}

View File

@ -19,7 +19,6 @@ import org.intellij.lang.annotations.Language
import org.jetbrains.annotations.TestOnly
import java.awt.Color
import java.awt.Font
import java.util.UUID
object RainbowHighlighter {
@ -99,7 +98,7 @@ object RainbowHighlighter {
}
}
fun isDarkEditor() = EditorColorsManager.getInstance().isDarkEditor
private fun isDarkEditor() = EditorColorsManager.getInstance().isDarkEditor
fun getRainbowColorByLevel(colorsScheme: TextAttributesScheme, rainbowName: String, level: Int): TextAttributesKey {
val ind = level % settings.numberOfColors
@ -111,7 +110,8 @@ object RainbowHighlighter {
val result = colorsScheme.getAttributes(key)
if (key == null || result == null || result.foregroundColor == null) {
memGetRainbowColorByLevel(isDarkEditor(), rainbowName, ind)
} else {
}
else {
key
}
} catch (e: Exception) {
@ -119,7 +119,6 @@ object RainbowHighlighter {
}
}
@Suppress("UNUSED_PARAMETER") // we use parameter as cache key
private fun generateColor(isDark: Boolean, rainbowName: String, level: Int): TextAttributesKey {
if (!settings.customColorGeneratorOption.isNullOrBlank()) {
return genByOption(settings.customColorGeneratorOption!!, rainbowName, level)
@ -133,8 +132,10 @@ object RainbowHighlighter {
}
private fun genByOption(option: String, rainbowName: String, level: Int) =
com.github.izhangzhihao.rainbow.brackets.util.create("$rainbowName-$level",
TextAttributes(randomColor(option), null, null, null, 0))
com.github.izhangzhihao.rainbow.brackets.util.create(
"$rainbowName-$level",
TextAttributes(randomColor(option), null, null, null, 0)
)
val memGetRainbowColorByLevel = { isDark: Boolean, rainbowName: String, level: Int -> generateColor(isDark, rainbowName, level) }.memoize()
@ -146,9 +147,11 @@ object RainbowHighlighter {
return getRainbowColorByLevel(EditorColorsManager.getInstance().globalScheme, rainbowName, level).defaultAttributes.foregroundColor
}
private fun getTextAttributes(colorsScheme: TextAttributesScheme,
private fun getTextAttributes(
colorsScheme: TextAttributesScheme,
element: PsiElement,
level: Int): TextAttributesKey? {
level: Int,
): TextAttributesKey? {
if (!settings.isRainbowEnabled) {
return null
}
@ -202,12 +205,17 @@ object RainbowHighlighter {
}
if (settings.isRainbowifyKotlinFunctionLiteralBracesAndArrow) {
scheme.setAttributes(KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW,
TextAttributes(null, null, null, EffectType.BOXED, Font.BOLD))
} else {
scheme.setAttributes(KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW,
scheme.setAttributes(
KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW,
TextAttributes(null, null, null, EffectType.BOXED, Font.BOLD)
)
}
else {
scheme.setAttributes(
KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW,
//TODO: default foregroundColor ???
TextAttributes(JBColor(0x89ddff, 0x89ddff), null, null, EffectType.BOXED, Font.BOLD))
TextAttributes(JBColor(0x89ddff, 0x89ddff), null, null, EffectType.BOXED, Font.BOLD)
)
}
}

View File

@ -1,97 +0,0 @@
package com.github.izhangzhihao.rainbow.brackets
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
import com.intellij.ide.plugins.IdeaPluginDescriptor
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.ide.plugins.PluginManagerCore.isPluginInstalled
import com.intellij.ide.startup.StartupActionScriptManager
import com.intellij.ide.startup.StartupActionScriptManager.DeleteCommand
import com.intellij.notification.NotificationListener.UrlOpeningListener
import com.intellij.notification.NotificationType
import com.intellij.openapi.extensions.PluginId
import com.intellij.openapi.project.Project
import com.intellij.openapi.startup.StartupActivity
class RainbowUpdateNotifyActivity : StartupActivity {
override fun runActivity(project: Project) {
removeIfInstalled()
val settings = RainbowSettings.instance
if (getPlugin()?.version != settings.version) {
settings.version = getPlugin()!!.version
if (settings.showNotificationOnUpdate) {
showUpdate(project)
}
}
}
private fun removeIfInstalled() {
val pluginId = PluginId.getId("com.github.jadepeng.rainbowfart")
val isInstalled = isPluginInstalled(pluginId)
if (isInstalled) {
val pluginDescriptor = PluginManagerCore.getPlugin(pluginId)
if (pluginDescriptor != null) {
//disablePlugin(pluginId)
StartupActionScriptManager.addActionCommand(DeleteCommand(pluginDescriptor.pluginPath))
}
}
}
companion object {
const val pluginId = "izhangzhihao.rainbow.brackets"
private val updateContent: String by lazy {
//language=HTML
"""
<br/>
🌈Thank you for downloading <b><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets">Rainbow Brackets</a></b>!<br>
🎉Sponsored by <a href="https://codestream.com/?utm_source=jbmarket&utm_medium=banner&utm_campaign=jbrainbowbrackets">CodeStream</a>.<br>
👍If you find this plugin helpful, <b><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets#support-us">please support us!</a>.</b><br>
<b><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets#support-us">Donate</a></b> by <b><a href="https://opencollective.com/intellij-rainbow-brackets">OpenCollective</a></b> Or AliPay/WeChatPay to <b><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets#sponsors">become a sponsor</a>!.</b><br>
📝Check out <b><a href="https://izhangzhihao.github.io/rainbow-brackets-document/">the document</a></b> for all features of this plugin.<br>
🐛If you run into any problem, <b><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues">feel free to raise an issue</a>.</b><br>
🆕See <b><a href="${changelog()}">changelog</a></b> for more details about this update.<br>
👉Want to customize your own color scheme of Rainbow Brackets? Edit it under
<b>Settings > Editor > Color Scheme > Rainbow Brackets</b><br>
👉Tired of the bundled colors? Try out the new color generator!
<b>Settings > Other Settings > Rainbow Brackets > Use color generator</b><br>
👉Other additional features under
<b>Settings > Other Settings > Rainbow Brackets</b><br/>
Enjoy your colorful code🌈.
"""
}
private fun changelog(): String {
val plugin = getPlugin()
return if (plugin == null) {
"""https://github.com/izhangzhihao/intellij-rainbow-brackets/releases"""
} else {
"""https://github.com/izhangzhihao/intellij-rainbow-brackets/releases/tag/${plugin.version}"""
}
}
fun getPlugin(): IdeaPluginDescriptor? = PluginManagerCore.getPlugin(PluginId.getId(pluginId))
private fun updateMsg(): String {
val plugin = getPlugin()
return if (plugin == null) {
"Rainbow Brackets installed."
} else {
"Rainbow Brackets updated to ${plugin.version}"
}
}
private fun showUpdate(project: Project) {
val notification = createNotification(
updateMsg(),
updateContent,
NotificationType.INFORMATION,
UrlOpeningListener(false)
)
showFullNotification(project, notification)
}
}
}

View File

@ -24,14 +24,14 @@ class RainbowifyBanner : EditorNotifications.Provider<EditorNotificationPanel>()
if (!RainbowSettings.instance.isRainbowEnabled) {
if (RainbowSettings.instance.suppressDisabledCheck) return null
return EditorNotificationPanel().apply {
text("Rainbow Brackets is now disabled")
text("Colored Brackets is now disabled")
icon(AllIcons.General.GearPlain)
createComponentActionLabel("got it, don't show again") {
RainbowSettings.instance.suppressDisabledCheck = true
EditorNotifications.getInstance(project).updateAllNotifications()
}
createComponentActionLabel("enable Rainbow Brackets") {
createComponentActionLabel("enable Colored Brackets") {
RainbowSettings.instance.isRainbowEnabled = true
EditorNotifications.getInstance(project).updateAllNotifications()
}

View File

@ -42,11 +42,15 @@ abstract class AbstractScopeHighlightingAction : AnAction() {
}
}
protected abstract fun Editor.addHighlighter(highlightManager: HighlightManager,
rainbowInfo: RainbowInfo): Collection<RangeHighlighter>
protected abstract fun Editor.addHighlighter(
highlightManager: HighlightManager,
rainbowInfo: RainbowInfo,
): Collection<RangeHighlighter>
private class HighlightingDisposer(private val editor: Editor,
private val disposeAction: () -> Unit) : KeyAdapter(), FocusListener {
private class HighlightingDisposer(
private val editor: Editor,
private val disposeAction: () -> Unit,
) : KeyAdapter(), FocusListener {
init {
editor.contentComponent.let {

View File

@ -3,7 +3,6 @@ package com.github.izhangzhihao.rainbow.brackets.action
import com.github.izhangzhihao.rainbow.brackets.RainbowInfo
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
import com.github.izhangzhihao.rainbow.brackets.util.alphaBlend
import com.github.izhangzhihao.rainbow.brackets.util.create
import com.intellij.codeInsight.highlighting.HighlightManager
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.colors.EditorColorsManager
@ -11,24 +10,28 @@ import com.intellij.openapi.editor.markup.EffectType
import com.intellij.openapi.editor.markup.RangeHighlighter
import com.intellij.openapi.editor.markup.TextAttributes
import java.awt.Font
import java.util.*
import java.util.LinkedList
class ScopeHighlightingAction : AbstractScopeHighlightingAction() {
override fun Editor.addHighlighter(highlightManager: HighlightManager,
rainbowInfo: RainbowInfo): Collection<RangeHighlighter> {
override fun Editor.addHighlighter(
highlightManager: HighlightManager,
rainbowInfo: RainbowInfo,
): Collection<RangeHighlighter> {
val defaultBackground = EditorColorsManager.getInstance().globalScheme.defaultBackground
val background = rainbowInfo.color.alphaBlend(defaultBackground, 0.2f)
val attributes = TextAttributes(null, background, rainbowInfo.color, EffectType.BOXED, Font.PLAIN)
val highlighters = LinkedList<RangeHighlighter>()
highlightManager.addRangeHighlight(this,
highlightManager.addRangeHighlight(
this,
rainbowInfo.startOffset,
rainbowInfo.endOffset,
attributes, //create("ScopeHighlightingAction", attributes),
false, //hideByTextChange
RainbowSettings.instance.pressAnyKeyToRemoveTheHighlightingEffects, //hideByAnyKey
highlighters)
highlighters
)
return highlighters
}

View File

@ -3,7 +3,6 @@ package com.github.izhangzhihao.rainbow.brackets.action
import com.github.izhangzhihao.rainbow.brackets.RainbowInfo
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
import com.github.izhangzhihao.rainbow.brackets.util.alphaBlend
import com.github.izhangzhihao.rainbow.brackets.util.create
import com.intellij.codeInsight.highlighting.HighlightManager
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.colors.EditorColorsManager
@ -12,12 +11,14 @@ import com.intellij.openapi.editor.markup.RangeHighlighter
import com.intellij.openapi.editor.markup.TextAttributes
import java.awt.Color
import java.awt.Font
import java.util.*
import java.util.LinkedList
class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction() {
override fun Editor.addHighlighter(highlightManager: HighlightManager,
rainbowInfo: RainbowInfo): Collection<RangeHighlighter> {
override fun Editor.addHighlighter(
highlightManager: HighlightManager,
rainbowInfo: RainbowInfo,
): Collection<RangeHighlighter> {
val defaultBackground = EditorColorsManager.getInstance().globalScheme.defaultBackground
val background = Color.GRAY.alphaBlend(defaultBackground, 0.05f)
val foreground = Color.GRAY.alphaBlend(defaultBackground, 0.55f)
@ -26,25 +27,29 @@ class ScopeOutsideHighlightingRestrainAction : AbstractScopeHighlightingAction()
val startOffset = rainbowInfo.startOffset
if (startOffset > 0) {
highlightManager.addRangeHighlight(this,
highlightManager.addRangeHighlight(
this,
0,
startOffset,
attributes, //create("ScopeOutsideHighlightingRestrainAction", attributes),
false, //hideByTextChange
RainbowSettings.instance.pressAnyKeyToRemoveTheHighlightingEffects, //hideByAnyKey
highlighters)
highlighters
)
}
val endOffset = rainbowInfo.endOffset
val lastOffset = document.textLength
if (endOffset < lastOffset) {
highlightManager.addRangeHighlight(this,
highlightManager.addRangeHighlight(
this,
endOffset,
lastOffset,
attributes, //create("ScopeOutsideHighlightingRestrainAction", attributes),
false, //hideByTextChange
RainbowSettings.instance.pressAnyKeyToRemoveTheHighlightingEffects, //hideByAnyKey
highlighters)
highlighters
)
}
return highlighters

View File

@ -12,7 +12,15 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.impl.source.tree.LeafPsiElement
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtCallExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassBody
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtFunctionLiteral
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtLabeledExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import java.awt.Font
@ -39,26 +47,36 @@ class KotlinLabelAnnotator : Annotator {
refElement = when (refElement) {
is KtBlockExpression,
is KtFunctionLiteral -> refElement
is KtFunctionLiteral,
-> refElement
is KtFunction -> refElement.lastChild.takeIf { it is KtBlockExpression }
is KtClass -> refElement.lastChild.takeIf { it is KtClassBody }
is KtCallExpression,
is KtLambdaExpression -> PsiTreeUtil.findChildOfType(refElement, KtFunctionLiteral::class.java)
is KtLambdaExpression,
-> PsiTreeUtil.findChildOfType(refElement, KtFunctionLiteral::class.java)
else -> null
}
}
is KtLabeledExpression -> {
target = element.firstChild.firstChild.takeIf { it is KtLabelReferenceExpression } ?: return
refElement = element.lastChild.let {
when (it) {
is KtBlockExpression,
is KtFunctionLiteral -> it
is KtFunctionLiteral,
-> it
is KtCallExpression,
is KtLambdaExpression -> PsiTreeUtil.findChildOfType(it, KtFunctionLiteral::class.java)
is KtLambdaExpression,
-> PsiTreeUtil.findChildOfType(it, KtFunctionLiteral::class.java)
else -> null
}
} ?: return
}
else -> return
}
@ -67,10 +85,12 @@ class KotlinLabelAnnotator : Annotator {
.let {
holder.newSilentAnnotation(HighlightSeverity.INFORMATION)
.range(target)
.textAttributes(com.github.izhangzhihao.rainbow.brackets.util.create(
.textAttributes(
com.github.izhangzhihao.rainbow.brackets.util.create(
"rainbow-kotlin-label",
TextAttributes(it, null, null, EffectType.BOXED, Font.PLAIN)
))
)
)
.create()
}
}

View File

@ -24,7 +24,8 @@ class RainbowAnnotator : Annotator {
if (settings.isEnableRainbowSquareBrackets) annotateUtil(element, holder, "[", "]", NAME_SQUARE_BRACKETS)
if (settings.isEnableRainbowSquigglyBrackets) annotateUtil(element, holder, "{", "}", NAME_SQUIGGLY_BRACKETS)
if (settings.isEnableRainbowAngleBrackets) annotateUtil(element, holder, "<", ">", NAME_ANGLE_BRACKETS)
} else {
}
else {
if (settings.isEnableRainbowRoundBrackets) annotateUtil(element, holder, "(", ")", NAME_ROUND_BRACKETS)
if (settings.isEnableRainbowSquareBrackets) annotateUtil(element, holder, "[", "]", NAME_ROUND_BRACKETS)
if (settings.isEnableRainbowSquigglyBrackets) annotateUtil(element, holder, "{", "}", NAME_ROUND_BRACKETS)
@ -47,7 +48,7 @@ object RainbowUtils {
RIGHT: String,
currentNode: PsiElement,
currentLevel: Int,
currentChild: PsiElement
currentChild: PsiElement,
): Int {
val calculatedLevel = if (currentChild is LeafPsiElement) {
//Using `currentChild.elementType.toString()` if we didn't want add more dependencies.
@ -57,14 +58,16 @@ object RainbowUtils {
RIGHT -> currentLevel - 1
else -> currentLevel
}
} else {
}
else {
when {
leftBracketsSet.contains(currentChild.text) -> currentLevel + 1
rightBracketsSet.contains(currentChild.text) -> currentLevel - 1
else -> currentLevel
}
}
} else currentLevel
}
else currentLevel
return if ((currentChild != currentNode) && (currentChild != currentNode.parent.lastChild))
iterateChildren(LEFT, RIGHT, currentNode, calculatedLevel, currentChild.nextSibling)
@ -76,11 +79,12 @@ object RainbowUtils {
LEFT: String,
RIGHT: String,
currentNode: PsiElement,
currentLevel: Int
currentLevel: Int,
): Int = if (currentNode.parent !is PsiFile) {
val calculatedLevel = iterateChildren(LEFT, RIGHT, currentNode, currentLevel, currentNode.parent.firstChild)
iterateParents(LEFT, RIGHT, currentNode.parent, calculatedLevel)
} else currentLevel
}
else currentLevel
private fun getBracketLevel(element: LeafPsiElement, LEFT: String, RIGHT: String): Int {
//Using `element.elementType.toString()` if we didn't want add more dependencies.
@ -88,8 +92,10 @@ object RainbowUtils {
return iterateParents(LEFT, RIGHT, element, startLevel)
}
fun annotateUtil(element: LeafPsiElement, holder: AnnotationHolder,
LEFT: String, RIGHT: String, rainbowName: String) {
fun annotateUtil(
element: LeafPsiElement, holder: AnnotationHolder,
LEFT: String, RIGHT: String, rainbowName: String,
) {
//Using `element.elementType.toString()` if we didn't want add more dependencies.
val level = when (element.text) {
LEFT, RIGHT -> getBracketLevel(element, LEFT, RIGHT)
@ -103,7 +109,8 @@ object RainbowUtils {
.textAttributes(getRainbowColorByLevel(scheme, rainbowName, level))
.create()
}
} else {
}
else {
if (level >= 0) {
holder.newSilentAnnotation(HighlightSeverity.INFORMATION)
.range(element.psi)

View File

@ -95,18 +95,23 @@ private fun HSVtoRGB(hueValue: Int, saturation: Int, brightness: Int): Triple<In
0 -> {
r = v; g = t; b = p
}
1 -> {
r = q; g = v; b = p
}
2 -> {
r = p; g = v; b = t
}
3 -> {
r = p; g = q; b = v
}
4 -> {
r = t; g = p; b = v
}
5 -> {
r = v; g = p; b = q
}

View File

@ -1,7 +1,12 @@
package com.github.izhangzhihao.rainbow.brackets.indents
import com.github.izhangzhihao.rainbow.brackets.RainbowInfo
import com.github.izhangzhihao.rainbow.brackets.util.*
import com.github.izhangzhihao.rainbow.brackets.util.alphaBlend
import com.github.izhangzhihao.rainbow.brackets.util.endOffset
import com.github.izhangzhihao.rainbow.brackets.util.findNextSibling
import com.github.izhangzhihao.rainbow.brackets.util.findPrevSibling
import com.github.izhangzhihao.rainbow.brackets.util.lineNumber
import com.github.izhangzhihao.rainbow.brackets.util.startOffset
import com.intellij.openapi.editor.Document
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.SoftWrap
@ -23,6 +28,7 @@ import com.intellij.ui.paint.LinePainter2D
import com.intellij.util.text.CharArrayUtil
import java.awt.Graphics
import java.awt.Graphics2D
import kotlin.math.max
/** From [com.intellij.codeInsight.daemon.impl.IndentGuideRenderer]
* Commit history : https://sourcegraph.com/github.com/JetBrains/intellij-community/-/blob/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentGuideRenderer.java#tab=history
@ -68,7 +74,8 @@ class RainbowIndentGuideRenderer: CustomHighlighterRenderer {
val caretModel = editor.caretModel
val caretOffset = caretModel.offset
caretOffset in off until endOffset && caretModel.logicalPosition.column == indentColumn
} else false
}
else false
val lineHeight = editor.getLineHeight()
val start = editor.visualPositionToXY(startPosition)
@ -88,10 +95,11 @@ class RainbowIndentGuideRenderer: CustomHighlighterRenderer {
maxY = StrictMath.min(maxY, clip.y + clip.height)
}
if (start.y >= maxY) return
val targetX = Math.max(0, start.x + EditorPainter.getIndentGuideShift(editor)).toDouble()
val targetX = max(0, start.x + EditorPainter.getIndentGuideShift(editor)).toDouble()
g.color = if (selected) {
rainbowInfo.color
} else {
}
else {
val defaultBackground = editor.colorsScheme.defaultBackground
rainbowInfo.color.alphaBlend(defaultBackground, 0.2f)
}
@ -113,7 +121,8 @@ class RainbowIndentGuideRenderer: CustomHighlighterRenderer {
val softWraps = editor.softWrapModel.registeredSoftWraps
if (selected || softWraps.isEmpty()) {
LinePainter2D.paint(g as Graphics2D, targetX, start.y.toDouble(), targetX, maxY - 1.toDouble())
} else {
}
else {
var startY = start.y
var startVisualLine = startPosition.line + 1
if (clip != null && startY < clip.y) {
@ -202,7 +211,8 @@ class RainbowIndentGuideRenderer: CustomHighlighterRenderer {
highlighterStartLine == elementStartLine ||
highlighterStartLine == xmlStartTagEndLine ||
highlighterStartLine == xmlEndTagStartLine
} else {
}
else {
/*
* Element start line > Highlighter start line:
* function foo(arg1, // highlighter start line
@ -231,7 +241,8 @@ class RainbowIndentGuideRenderer: CustomHighlighterRenderer {
highlighterEndLine == elementEndLine ||
highlighterEndLine == xmlStartTagEndLine ||
highlighterEndLine == xmlEndTagStartLine
} else {
}
else {
/*
* Element end line != Highlighter end line:
* function foo() { // element & highlighter start line

View File

@ -28,7 +28,7 @@ import com.intellij.util.containers.IntStack
import com.intellij.util.text.CharArrayUtil
import java.lang.StrictMath.abs
import java.lang.StrictMath.min
import java.util.*
import java.util.Collections
/** From [com.intellij.codeInsight.daemon.impl.IndentsPass]
* Commit history: https://sourcegraph.com/github.com/JetBrains/intellij-community/-/blob/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IndentsPass.java#tab=history
@ -37,7 +37,7 @@ import java.util.*
class RainbowIndentsPass internal constructor(
project: Project,
editor: Editor,
private val myFile: PsiFile
private val myFile: PsiFile,
) : TextEditorHighlightingPass(project, editor.document, false), DumbAware {
private val myEditor: EditorEx = editor as EditorEx
@ -59,7 +59,8 @@ class RainbowIndentsPass internal constructor(
ProgressManager.checkCanceled()
val endOffset = if (descriptor.endLine < document.lineCount) {
document.getLineStartOffset(descriptor.endLine)
} else {
}
else {
document.textLength
}
ranges.add(TextRange(document.getLineStartOffset(descriptor.startLine), endOffset))
@ -111,10 +112,12 @@ class RainbowIndentsPass internal constructor(
newHighlighters.add(createHighlighter(mm, range))
curRange++
}
cmp > 0 -> {
highlighter.dispose()
curHighlight++
}
else -> {
newHighlighters.add(highlighter)
curHighlight++
@ -197,7 +200,7 @@ class RainbowIndentsPass internal constructor(
level: Int,
startLine: Int,
endLine: Int,
lineIndents: IntArray
lineIndents: IntArray,
): IndentGuideDescriptor {
var sLine = startLine
while (sLine > 0 && lineIndents[sLine] < 0) sLine--
@ -227,15 +230,14 @@ class RainbowIndentsPass internal constructor(
}
*/
private inner class IndentsCalculator() {
private inner class IndentsCalculator {
val myComments: MutableMap<Language, TokenSet> = HashMap()
val lineIndents: IntArray // negative value means the line is empty (or contains a comment) and indent
val lineIndents = IntArray(document.lineCount) // negative value means the line is empty (or contains a comment) and indent
// (denoted by absolute value) was deduced from enclosing non-empty lines
val myChars: CharSequence
init {
lineIndents = IntArray(document.lineCount)
myChars = document.charsSequence
}
@ -271,7 +273,8 @@ class RainbowIndentsPass internal constructor(
ProgressManager.checkCanceled()
if (lineIndents[line] >= 0) {
topIndent = lineIndents[line]
} else {
}
else {
val startLine = line
while (line < lineIndents.size && lineIndents[line] < 0) {
line++
@ -288,7 +291,8 @@ class RainbowIndentsPass internal constructor(
val tokenType = iterator.tokenType
if (BraceMatchingUtil.isRBraceToken(iterator, myChars, fileType) ||
tokenType != null &&
CodeBlockSupportHandler.findMarkersRanges(myFile, tokenType.language, nonWhitespaceOffset).isNotEmpty()) {
CodeBlockSupportHandler.findMarkersRanges(myFile, tokenType.language, nonWhitespaceOffset).isNotEmpty()
) {
indent = topIndent
}
}
@ -321,7 +325,8 @@ class RainbowIndentsPass internal constructor(
}
if (comments == null) {
return false
} else {
}
else {
myComments[language] = comments
}
}

View File

@ -1,6 +1,10 @@
package com.github.izhangzhihao.rainbow.brackets.indents
import com.intellij.codeHighlighting.*
import com.intellij.codeHighlighting.Pass
import com.intellij.codeHighlighting.TextEditorHighlightingPass
import com.intellij.codeHighlighting.TextEditorHighlightingPassFactory
import com.intellij.codeHighlighting.TextEditorHighlightingPassFactoryRegistrar
import com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile

View File

@ -1,15 +1,12 @@
package com.github.izhangzhihao.rainbow.brackets.provider
import com.intellij.lang.BracePair
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.GT
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LBRACE
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LBRACKET
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LPARENTH
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LT
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RBRACE
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RBRACKET
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RPARENTH
class CSharpBracePairProvider : BracePairProvider {
override fun pairs(): List<BracePair> = listOf(

View File

@ -1,6 +1,9 @@
package com.github.izhangzhihao.rainbow.brackets.provider
import com.goide.template.GoTemplateTypes.*
import com.goide.template.GoTemplateTypes.LDOUBLE_BRACE
import com.goide.template.GoTemplateTypes.LPAREN
import com.goide.template.GoTemplateTypes.RDOUBLE_BRACE
import com.goide.template.GoTemplateTypes.RPAREN
import com.intellij.lang.BracePair
class GoTemplateProvider : BracePairProvider {

View File

@ -2,7 +2,12 @@ package com.github.izhangzhihao.rainbow.brackets.settings
import com.github.izhangzhihao.rainbow.brackets.RainbowHighlighter
import com.github.izhangzhihao.rainbow.brackets.settings.form.RainbowOptionsPanel
import com.intellij.application.options.colors.*
import com.intellij.application.options.colors.ColorAndFontOptions
import com.intellij.application.options.colors.ColorAndFontPanelFactory
import com.intellij.application.options.colors.ColorAndFontSettingsListener
import com.intellij.application.options.colors.NewColorAndFontPanel
import com.intellij.application.options.colors.PreviewPanel
import com.intellij.application.options.colors.SchemesPanel
import com.intellij.openapi.options.colors.AttributesDescriptor
import com.intellij.openapi.options.colors.ColorAndFontDescriptorsProvider
import com.intellij.openapi.options.colors.ColorDescriptor
@ -37,7 +42,7 @@ class RainbowColorsPageFactory : ColorAndFontPanelFactory, ColorAndFontDescripto
override fun getColorDescriptors(): Array<ColorDescriptor> = emptyArray()
companion object {
private const val RAINBOW_BRACKETS_GROUP = "Rainbow Brackets"
private const val RAINBOW_BRACKETS_GROUP = "Colored Brackets"
private val ATTRIBUTE_DESCRIPTORS: Array<AttributesDescriptor> by lazy {
createDescriptors(RainbowHighlighter.NAME_ROUND_BRACKETS) +
createDescriptors(RainbowHighlighter.NAME_SQUARE_BRACKETS) +

View File

@ -56,11 +56,11 @@ class RainbowConfigurable : SearchableConfigurable {
}
@Nls
override fun getDisplayName() = "Rainbow Brackets"
override fun getDisplayName() = "Colored Brackets"
override fun getId(): String = ID
companion object {
val ID = "preferences.rainbow.brackets"
const val ID = "preferences.rainbow.brackets"
}
}

View File

@ -21,7 +21,6 @@ class RainbowSettings : PersistentStateComponent<RainbowSettings> {
var isShowRainbowIndentGuides = true
var isDoNOTRainbowifyBracketsWithoutContent = false
var isDoNOTRainbowifyTheFirstLevel = false
var version = "Unknown"
var isRainbowifyHTMLInsideJS = true
var isRainbowifyKotlinLabel = true
var isRainbowifyKotlinFunctionLiteralBracesAndArrow = true
@ -36,7 +35,6 @@ class RainbowSettings : PersistentStateComponent<RainbowSettings> {
var disableRainbowIndentsInZenMode = true
var useColorGenerator = false
var customColorGeneratorOption: String? = null
var showNotificationOnUpdate = true
var rainbowifyTagNameInXML = false
var doNOTRainbowifyTemplateString = false
var doNOTRainbowifyBigFiles = true

View File

@ -2,7 +2,11 @@ package com.github.izhangzhihao.rainbow.brackets.settings.form
import com.github.izhangzhihao.rainbow.brackets.RainbowHighlighter
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
import com.intellij.application.options.colors.*
import com.intellij.application.options.colors.ColorAndFontOptions
import com.intellij.application.options.colors.ColorAndFontSettingsListener
import com.intellij.application.options.colors.OptionsPanel
import com.intellij.application.options.colors.SchemesPanel
import com.intellij.application.options.colors.TextAttributesDescription
import com.intellij.ide.util.PropertiesComponent
import com.intellij.ui.ColorPanel
import com.intellij.ui.components.JBCheckBox
@ -22,7 +26,7 @@ import javax.swing.tree.TreeSelectionModel
class RainbowOptionsPanel(
private val options: ColorAndFontOptions,
private val schemesProvider: SchemesPanel,
private val category: String
private val category: String,
) : OptionsPanel {
private lateinit var rootPanel: JPanel
@ -112,8 +116,11 @@ class RainbowOptionsPanel(
}
.groupBy { it.first }
.map { (rainbowName, descriptions) ->
DefaultMutableTreeNode(DescriptionsNode(rainbowName,
descriptions.asSequence().map { it.second }.toList().sortedBy { it.toString() }))
DefaultMutableTreeNode(
DescriptionsNode(
rainbowName,
descriptions.asSequence().map { it.second }.toList().sortedBy { it.toString() })
)
}
val root = DefaultMutableTreeNode()
for (node in nodes) {
@ -155,7 +162,7 @@ class RainbowOptionsPanel(
rainbow.isEnabled = true
rainbow.isSelected = rainbowOn
gradientLabel.text = "Assign each ${rainbowName.toLowerCase()} its own color from the spectrum below:"
gradientLabel.text = "Assign each ${rainbowName.lowercase()} its own color from the spectrum below:"
for (i in 0 until minRange()) {
colors[i].isEnabled = rainbowOn
@ -173,7 +180,8 @@ class RainbowOptionsPanel(
RainbowHighlighter.NAME_ROUND_BRACKETS,
RainbowHighlighter.NAME_ANGLE_BRACKETS,
RainbowHighlighter.NAME_SQUARE_BRACKETS,
RainbowHighlighter.NAME_SQUIGGLY_BRACKETS -> {
RainbowHighlighter.NAME_SQUIGGLY_BRACKETS,
-> {
RainbowHighlighter.setRainbowEnabled(rainbowName, rainbow.isSelected)
for (i in 0 until minRange()) {
@ -195,7 +203,7 @@ class RainbowOptionsPanel(
RainbowHighlighter.NAME_ANGLE_BRACKETS
)
override fun showOption(option: String): Runnable? = Runnable {
override fun showOption(option: String) = Runnable {
optionsTree.selectOptionByRainbowName(option)
}

View File

@ -14,7 +14,7 @@
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="etched" title="Rainbow Brackets"/>
<border type="none"/>
<children>
<component id="2d399" class="javax.swing.JCheckBox" binding="enableRainbow">
<constraints>

View File

@ -8,6 +8,7 @@ import javax.swing.JTextField
class RainbowSettingsForm {
private var panel: JPanel? = null
@Suppress("unused")
private var appearancePanel: JPanel? = null
private var enableRainbow: JCheckBox? = null
private var enableRainbowRoundBrackets: JCheckBox? = null
@ -109,7 +110,7 @@ class RainbowSettingsForm {
init {
loadSettings()
doNOTRainbowifyBigFiles?.addActionListener({e -> bigFilesLinesThreshold?.setEnabled(doNOTRainbowifyBigFiles() ?: false)})
doNOTRainbowifyBigFiles?.addActionListener { _ -> bigFilesLinesThreshold?.setEnabled(doNOTRainbowifyBigFiles() ?: false) }
}
fun loadSettings() {

View File

@ -1,246 +0,0 @@
/*
* Copyright (c) 2017 Patrick Scheibe
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.github.izhangzhihao.rainbow.brackets.util
import com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings
import com.github.izhangzhihao.rainbow.brackets.util.ErrorContext.Companion.fromThrowable
import com.intellij.AbstractBundle
import com.intellij.diagnostic.*
import com.intellij.ide.DataManager
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.ide.plugins.PluginUtil
import com.intellij.idea.IdeaLogger
import com.intellij.notification.NotificationGroupManager
import com.intellij.notification.NotificationListener
import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.application.ApplicationNamesInfo
import com.intellij.openapi.application.ex.ApplicationInfoEx
import com.intellij.openapi.application.impl.ApplicationInfoImpl
import com.intellij.openapi.diagnostic.ErrorReportSubmitter
import com.intellij.openapi.diagnostic.IdeaLoggingEvent
import com.intellij.openapi.diagnostic.SubmittedReportInfo
import com.intellij.openapi.diagnostic.SubmittedReportInfo.SubmissionStatus
import com.intellij.openapi.progress.EmptyProgressIndicator
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.SystemInfo
import com.intellij.util.Consumer
import org.eclipse.egit.github.core.Issue
import org.eclipse.egit.github.core.Label
import org.eclipse.egit.github.core.RepositoryId
import org.eclipse.egit.github.core.client.GitHubClient
import org.eclipse.egit.github.core.service.IssueService
import org.jetbrains.annotations.NonNls
import org.jetbrains.annotations.NotNull
import org.jetbrains.annotations.Nullable
import org.jetbrains.annotations.PropertyKey
import java.awt.Component
import java.util.*
private object AnonymousFeedback {
private const val gitRepoUser = "izhangzhihao"
//private const val gitRepoUser = "intellij-rainbow-brackets"
private const val gitRepo = "intellij-rainbow-brackets"
//private const val gitRepo = "bug"
private const val issueLabel = "Auto generated"
/**
* Makes a connection to GitHub. Checks if there is an issue that is a duplicate and based on this, creates either a
* new issue or comments on the duplicate (if the user provided additional information).
*
* @param environmentDetails Information collected by [getKeyValuePairs]
* @return The report info that is then used in [GitHubErrorReporter] to show the user a balloon with the link
* of the created issue.
*/
internal fun sendFeedback(environmentDetails: MutableMap<String, String>): SubmittedReportInfo {
try {
val gitAccessToken = something
val client = GitHubClient()
client.setOAuth2Token(gitAccessToken)
val repoID = RepositoryId(gitRepoUser, gitRepo)
val issueService = IssueService(client)
var newGibHubIssue = createNewGibHubIssue(environmentDetails)
val duplicate = findFirstDuplicate(newGibHubIssue.title, issueService, repoID)
var isNewIssue = true
if (duplicate != null) {
issueService.createComment(repoID, duplicate.number, newGibHubIssue.body)
newGibHubIssue = duplicate
isNewIssue = false
} else newGibHubIssue = issueService.createIssue(repoID, newGibHubIssue)
return SubmittedReportInfo(newGibHubIssue.htmlUrl, ErrorReportBundle.message(
if (isNewIssue) "git.issue.text" else "git.issue.duplicate.text", newGibHubIssue.htmlUrl, newGibHubIssue.number.toLong()),
if (isNewIssue) SubmissionStatus.NEW_ISSUE else SubmissionStatus.DUPLICATE)
} catch (e: Exception) {
e.printStackTrace()
return SubmittedReportInfo(null,
ErrorReportBundle.message("report.error.connection.failure"),
SubmissionStatus.FAILED)
}
}
private fun findFirstDuplicate(title: String, service: IssueService, repo: RepositoryId): Issue? {
val openIssue = hashMapOf(IssueService.FILTER_STATE to IssueService.STATE_OPEN)
val closedIssue = hashMapOf(IssueService.FILTER_STATE to IssueService.STATE_CLOSED)
return service.pageIssues(repo, openIssue).flatten().firstOrNull { it.title == title }
?: service.pageIssues(repo, closedIssue).flatten().firstOrNull { it.title == title }
}
private fun createNewGibHubIssue(details: MutableMap<String, String>) = Issue().apply {
val errorMessage = details.remove("error.message")?.takeIf(String::isNotBlank) ?: "Unspecified error"
title = ErrorReportBundle.message("git.issue.title", errorMessage)
body = generateGitHubIssueBody(details)
labels = listOf(Label().apply { name = issueLabel })
}
private fun generateGitHubIssueBody(details: MutableMap<String, String>): String {
val errorDescription = details.remove("error.description").orEmpty()
val stackTrace = details.remove("error.stacktrace")?.takeIf(String::isNotBlank) ?: "invalid stacktrace"
val result = StringBuilder()
if (errorDescription.isNotEmpty()) {
result.append(errorDescription)
result.append("\n\n----------------------\n\n")
}
for ((key, value) in details) {
result.append("- ")
result.append(key)
result.append(": ")
result.append(value)
result.append("\n")
}
result.append("- StackTrace:\n")
result.append(stackTrace)
return result.toString()
}
}
//String(Base64.getEncoder().encode("".toByteArray()))
private const val st = "YjgwZGRiY2U2YTNlYTAzM2UyZGU" + "yNDcyNWEyZjE3MGQ2YThmMjc0MQ=="
private val something: String by lazy { String(Base64.getDecoder().decode(st)) }
class GitHubErrorReporter : ErrorReportSubmitter() {
override fun getReportActionText() = ErrorReportBundle.message("report.error.to.plugin.vendor")
override fun submit(events: Array<out IdeaLoggingEvent>?, info: @Nullable String?, parent: @NotNull Component, consumer: @NotNull Consumer<in SubmittedReportInfo>): Boolean {
return doSubmit(events!![0], parent, consumer, fromThrowable(events[0].throwable), info)
}
private fun doSubmit(
event: IdeaLoggingEvent,
parent: Component,
callback: Consumer<in SubmittedReportInfo>,
errorContext: ErrorContext,
description: String?): Boolean {
val dataContext = DataManager.getInstance().getDataContext(parent)
description?.let { errorContext.description = description }
errorContext.message = event.message
event.throwable?.let { throwable ->
PluginUtil.getInstance().findPluginId(throwable)?.let { pluginId ->
PluginManagerCore.getPlugin(pluginId)?.let { ideaPluginDescriptor ->
if (!ideaPluginDescriptor.isBundled) {
errorContext.pluginName = ideaPluginDescriptor.name
errorContext.pluginVersion = ideaPluginDescriptor.version
}
}
}
}
(event.data as? LogMessage)?.let { errorContext.attachments = it.includedAttachments }
val project = CommonDataKeys.PROJECT.getData(dataContext)
val reportValues = getKeyValuePairs(
errorContext,
ApplicationInfoImpl.getShadowInstance() as ApplicationInfoImpl,
ApplicationNamesInfo.getInstance())
val notifyingCallback = CallbackWithNotification(callback, project)
val task = AnonymousFeedbackTask(project, ErrorReportBundle.message(
"report.error.progress.dialog.text"), true, reportValues, notifyingCallback)
if (project == null) task.run(EmptyProgressIndicator()) else ProgressManager.getInstance().run(task)
return true
}
internal class CallbackWithNotification(
private val consumer: Consumer<in SubmittedReportInfo>,
private val project: Project?) : Consumer<SubmittedReportInfo> {
override fun consume(reportInfo: SubmittedReportInfo) {
consumer.consume(reportInfo)
val GROUP = NotificationGroupManager.getInstance().getNotificationGroup("Error Report")
if (reportInfo.status == SubmissionStatus.FAILED) GROUP.createNotification(DiagnosticBundle.message("error.report.title"),
reportInfo.linkText, NotificationType.ERROR).setImportant(false).notify(project)
else GROUP.createNotification(DiagnosticBundle.message("error.report.title"), reportInfo.linkText,
NotificationType.INFORMATION).setListener(NotificationListener.URL_OPENING_LISTENER).setImportant(false).notify(project)
}
}
}
/**
* Messages and strings used by the error reporter
*/
private object ErrorReportBundle {
@NonNls
private const val BUNDLE = "error-reporting.report-bundle"
private val bundle: ResourceBundle by lazy { ResourceBundle.getBundle(BUNDLE) }
@JvmStatic
internal fun message(@PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any) =
AbstractBundle.message(bundle, key, *params)
}
private class AnonymousFeedbackTask(
project: Project?, title: String, canBeCancelled: Boolean,
private val params: MutableMap<String, String>,
private val callback: Consumer<SubmittedReportInfo>) : Task.Backgroundable(project, title, canBeCancelled, DEAF) {
override fun run(indicator: ProgressIndicator) {
callback.consume(AnonymousFeedback.sendFeedback(params))
}
}
/**
* Collects information about the running IDEA and the error
*/
private fun getKeyValuePairs(
errorContext: ErrorContext,
appInfo: ApplicationInfoEx,
namesInfo: ApplicationNamesInfo): MutableMap<String, String> {
val params = mutableMapOf(
"error.description" to errorContext.description,
"Plugin Name" to errorContext.pluginName,
"Plugin Version" to RainbowSettings.instance.version,
"OS Name" to SystemInfo.OS_NAME,
"OS Version" to SystemInfo.OS_VERSION,
"Java Version" to SystemInfo.JAVA_VERSION,
"App Name" to namesInfo.productName,
"App Full Name" to namesInfo.fullProductName,
"Is Snapshot" to java.lang.Boolean.toString(appInfo.build.isSnapshot),
"App Build" to appInfo.build.asString(),
"error.message" to errorContext.errorClass,
"error.stacktrace" to "\n```\n" + errorContext.stackTrace + "\n```\n")
for (attachment in errorContext.attachments) {
params["attachment.${attachment.name}"] = attachment.path
params["attachment.${attachment.name}.value"] = "\n```\n" + attachment.displayText + "\n```\n"
}
return params
}

View File

@ -1,24 +0,0 @@
package com.github.izhangzhihao.rainbow.brackets.util
import com.intellij.openapi.diagnostic.Attachment
import com.intellij.util.ExceptionUtil
data class ErrorContext(val stackTrace: String) {
var message: String? = null
var errorClass: String = ""
var description: String = ""
var pluginName: String = ""
var pluginVersion: String = "Unknown"
var attachments: List<Attachment> = emptyList()
companion object {
fun fromThrowable(throwable: Throwable): ErrorContext {
val throwableText = ExceptionUtil.getThrowableText(throwable)
val errorContext = ErrorContext(throwableText)
errorContext.message = throwable.message
val firstLine = throwableText.lines()[0]
errorContext.errorClass = firstLine.substringBeforeLast(':')
return errorContext
}
}
}

View File

@ -1,21 +1,8 @@
package com.github.izhangzhihao.rainbow.brackets.util
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import java.io.File
fun File.toPsiFile(project: Project): PsiFile? = toVirtualFile()?.toPsiFile(project)
fun File.toVirtualFile(): VirtualFile? = LocalFileSystem.getInstance().findFileByIoFile(this)
fun File.toPsiDirectory(project: Project): PsiDirectory? {
return toVirtualFile()?.let { vfile -> PsiManager.getInstance(project).findDirectory(vfile) }
}
fun VirtualFile.toPsiFile(project: Project): PsiFile? = PsiManager.getInstance(project).findFile(this)
fun VirtualFile.toPsiDirectory(project: Project): PsiDirectory? = PsiManager.getInstance(project).findDirectory(this)

View File

@ -12,7 +12,8 @@ tailrec fun PsiElement.findPrevSibling(condition: (PsiElement) -> Boolean): PsiE
val prevSibling = prevSibling ?: return null
return if (condition(prevSibling)) {
prevSibling
} else {
}
else {
prevSibling.findPrevSibling(condition)
}
}
@ -21,7 +22,8 @@ tailrec fun PsiElement.findNextSibling(condition: (PsiElement) -> Boolean): PsiE
val nextSibling = nextSibling ?: return null
return if (condition(nextSibling)) {
nextSibling
} else {
}
else {
nextSibling.findNextSibling(condition)
}
}

View File

@ -7,9 +7,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.tree.LeafPsiElement
import com.intellij.psi.tree.IElementType
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.GT
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LPARENTH
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.LT
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.lexer.CSharpTokenType.RPARENTH
import com.jetbrains.rider.ideaInterop.fileTypes.csharp.psi.CSharpDummyNode
@ -34,7 +32,8 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
if (level >= 1) {
rainbowPairs(element, pair, level)
}
} else {
}
else {
if (level >= 0) {
rainbowPairs(element, pair, level)
}
@ -81,14 +80,17 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
val prev = element.prevSibling
if (prev == null) {
iterateBracketParents(element.parent.prevSibling.iterForPreDummyNode()?.lastChild, pair, nextCount, type)
} else {
}
else {
iterateBracketParents(prev, pair, nextCount, type)
}
} else {
}
else {
val next = element.nextSibling
if (next == null) {
iterateBracketParents(element.parent.nextSibling.iterForNextDummyNode()?.firstChild, pair, nextCount, type)
} else {
}
else {
iterateBracketParents(next, pair, nextCount, type)
}
}
@ -97,12 +99,15 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
private tailrec fun PsiElement?.iterForNextDummyNode(): PsiElement? {
return if (this == null) {
null
} else if (this is CSharpDummyNode) {
}
else if (this is CSharpDummyNode) {
this
} else {
}
else {
if (this.nextSibling == null) {
null
} else {
}
else {
this.nextSibling.iterForNextDummyNode()
}
}
@ -112,12 +117,15 @@ class CSharpRainbowVisitor : RainbowHighlightVisitor() {
private tailrec fun PsiElement?.iterForPreDummyNode(): PsiElement? {
return if (this == null) {
null
} else if (this is CSharpDummyNode) {
}
else if (this is CSharpDummyNode) {
this
} else {
}
else {
if (this.prevSibling == null) {
null
} else {
}
else {
this.prevSibling.iterForPreDummyNode()
}
}

View File

@ -22,7 +22,8 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
val pair =
if (matching.size == 1) {
matching[0]
} else {
}
else {
matching.find { element.isValidBracket(it) }
} ?: return
@ -31,7 +32,8 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
if (level >= 1) {
rainbowPairs(element, pair, level)
}
} else {
}
else {
if (level >= 0) {
rainbowPairs(element, pair, level)
}
@ -55,13 +57,16 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
var nextCount = count
if (!RainbowSettings.instance.cycleCountOnAllBrackets) {
if (element.haveBrackets({ it.elementType() == pair.leftBraceType },
if (element.haveBrackets(
{ it.elementType() == pair.leftBraceType },
{ it.elementType() == pair.rightBraceType })
) {
nextCount++
}
} else {
if (element.haveBrackets({ element.language.braceTypeSet.contains(it.elementType()) },
}
else {
if (element.haveBrackets(
{ element.language.braceTypeSet.contains(it.elementType()) },
{ element.language.braceTypeSet.contains(it.elementType()) })
) {
nextCount++
@ -73,7 +78,7 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
private inline fun PsiElement.haveBrackets(
checkLeft: (PsiElement) -> Boolean,
checkRight: (PsiElement) -> Boolean
checkRight: (PsiElement) -> Boolean,
): Boolean {
if (this is LeafPsiElement) {
return false
@ -88,12 +93,14 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
if (left is LeafPsiElement && checkLeft(left)) {
findLeftBracket = true
} else {
}
else {
left = left?.nextSibling
}
if (right is LeafPsiElement && checkRight(right)) {
findRightBracket = true
} else {
}
else {
right = right?.prevSibling
}
@ -123,7 +130,8 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
return if (pairType == pair.leftBraceType) {
checkBracePair(this, parent.firstChild, pairType, PsiElement::getNextSibling)
} else {
}
else {
checkBracePair(this, parent.lastChild, pairType, PsiElement::getPrevSibling)
}
}
@ -132,7 +140,7 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
brace: PsiElement,
start: PsiElement,
type: IElementType,
next: PsiElement.() -> PsiElement?
next: PsiElement.() -> PsiElement?,
): Boolean {
var element: PsiElement? = start
while (element != null && element != brace) {
@ -150,18 +158,20 @@ class DefaultRainbowVisitor : RainbowHighlightVisitor() {
val pairs = element.language.bracePairs ?: return null
val filterBraceType = pairs[type.toString()]
return when {
filterBraceType == null || filterBraceType.isEmpty() -> {
filterBraceType.isNullOrEmpty() -> {
null
}
// https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/198
element.javaClass.simpleName == "OCMacroForeignLeafElement" -> {
null
}
RainbowSettings.instance.isDoNOTRainbowifyBracketsWithoutContent -> {
filterBraceType
.filterNot { it.leftBraceType == type && element.nextSibling?.elementType() == it.rightBraceType }
.filterNot { it.rightBraceType == type && element.prevSibling?.elementType() == it.leftBraceType }
}
else -> {
filterBraceType
}

View File

@ -5,7 +5,22 @@ import com.intellij.codeInsight.daemon.impl.HighlightVisitor
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.tree.LeafPsiElement
import com.jetbrains.python.PyTokenTypes.*
import com.jetbrains.python.PyTokenTypes.BREAK_KEYWORD
import com.jetbrains.python.PyTokenTypes.CLASS_KEYWORD
import com.jetbrains.python.PyTokenTypes.CONTINUE_KEYWORD
import com.jetbrains.python.PyTokenTypes.DEF_KEYWORD
import com.jetbrains.python.PyTokenTypes.ELIF_KEYWORD
import com.jetbrains.python.PyTokenTypes.ELSE_KEYWORD
import com.jetbrains.python.PyTokenTypes.EXCEPT_KEYWORD
import com.jetbrains.python.PyTokenTypes.FINALLY_KEYWORD
import com.jetbrains.python.PyTokenTypes.FOR_KEYWORD
import com.jetbrains.python.PyTokenTypes.IF_KEYWORD
import com.jetbrains.python.PyTokenTypes.RAISE_KEYWORD
import com.jetbrains.python.PyTokenTypes.RETURN_KEYWORD
import com.jetbrains.python.PyTokenTypes.TRY_KEYWORD
import com.jetbrains.python.PyTokenTypes.WHILE_KEYWORD
import com.jetbrains.python.PyTokenTypes.WITH_KEYWORD
import com.jetbrains.python.PyTokenTypes.YIELD_KEYWORD
import com.jetbrains.python.psi.PyStatement
@ -29,7 +44,8 @@ class PythonRainbowVisitor : RainbowHighlightVisitor() {
if (level >= 1) {
rainbowPairs(element, level)
}
} else {
}
else {
if (level >= 0) {
rainbowPairs(element, level)
}
@ -66,7 +82,7 @@ class PythonRainbowVisitor : RainbowHighlightVisitor() {
private tailrec fun iterateBracketParents(
element: PsiElement?,
count: Int
count: Int,
): Int {
if (element == null || element is PsiFile) {
return count

View File

@ -47,10 +47,12 @@ abstract class RainbowHighlightVisitor : HighlightVisitor {
highlightInfoHolder = null
}
protected fun PsiElement.setHighlightInfo(parent: PsiElement?,
protected fun PsiElement.setHighlightInfo(
parent: PsiElement?,
level: Int,
startElement: PsiElement?,
endElement: PsiElement?) {
endElement: PsiElement?,
) {
val holder = highlightInfoHolder ?: return
val globalScheme = EditorColorsManager.getInstance().globalScheme
getHighlightInfo(globalScheme, this, level)
@ -66,10 +68,12 @@ abstract class RainbowHighlightVisitor : HighlightVisitor {
}
}
private fun PsiElement.saveRainbowInfo(level: Int,
private fun PsiElement.saveRainbowInfo(
level: Int,
color: Color,
startElement: PsiElement?,
endElement: PsiElement?) {
endElement: PsiElement?,
) {
val rainbowInfo = RainbowInfo.RAINBOW_INFO_KEY[this]?.also {
it.level = level
it.color = color
@ -82,7 +86,8 @@ abstract class RainbowHighlightVisitor : HighlightVisitor {
companion object {
private val isIntelliJHaskellEnabled: Boolean by lazy {
PluginManagerCore.getPlugin(
PluginId.getId("intellij.haskell"))?.isEnabled ?: false
PluginId.getId("intellij.haskell")
)?.isEnabled ?: false
}
fun checkForBigFile(file: PsiFile): Boolean =

View File

@ -28,7 +28,8 @@ open class XmlRainbowVisitor : RainbowHighlightVisitor() {
XmlTokenType.XML_DOCTYPE_START,
XmlTokenType.XML_DOCTYPE_END,
XmlTokenType.XML_PI_START,
XmlTokenType.XML_PI_END -> {
XmlTokenType.XML_PI_END,
-> {
val startElement = element.takeIf {
tokenType == XmlTokenType.XML_DOCTYPE_START || tokenType == XmlTokenType.XML_PI_START
}
@ -41,7 +42,8 @@ open class XmlRainbowVisitor : RainbowHighlightVisitor() {
XmlTokenType.XML_START_TAG_START,
XmlTokenType.XML_END_TAG_START,
XmlTokenType.XML_TAG_END,
XmlTokenType.XML_EMPTY_ELEMENT_END -> {
XmlTokenType.XML_EMPTY_ELEMENT_END,
-> {
val startElement = element.takeIf { tokenType == XmlTokenType.XML_START_TAG_START }
val endElement = element.takeIf {
tokenType == XmlTokenType.XML_TAG_END || tokenType == XmlTokenType.XML_EMPTY_ELEMENT_END
@ -50,14 +52,16 @@ open class XmlRainbowVisitor : RainbowHighlightVisitor() {
}
XmlTokenType.XML_CDATA_START,
XmlTokenType.XML_CDATA_END -> {
XmlTokenType.XML_CDATA_END,
-> {
val startElement = element.takeIf { tokenType == XmlTokenType.XML_CDATA_START }
val endElement = element.takeIf { tokenType == XmlTokenType.XML_CDATA_END }
element.level?.let { element.setHighlightInfo(element.parent, it + 1, startElement, endElement) }
}
XmlTokenType.XML_TAG_NAME,
XmlTokenType.XML_NAME -> {
XmlTokenType.XML_NAME,
-> {
if (RainbowSettings.instance.rainbowifyTagNameInXML) {
val prevSibling = element.prevSibling
if (prevSibling != null && prevSibling is XmlToken) {

View File

@ -2,7 +2,7 @@
<extensions defaultExtensionNs="com.intellij">
<highlightVisitor implementation="com.github.izhangzhihao.rainbow.brackets.visitor.ReactJSXRainbowVisitor" />
</extensions>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="JavaScript"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.TSBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="C#"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.CSharpBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="Dart"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.DartBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="GoTemplate"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.GoTemplateProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="Groovy"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.GroovyBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="kotlin"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.KotlinBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="ObjectiveC"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.OCBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="PHP"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.PHPBracePairProvider" />
</extensions>

View File

@ -1,740 +1,19 @@
<idea-plugin require-restart="true">
<id>izhangzhihao.rainbow.brackets</id>
<name>Rainbow Brackets</name>
<vendor email="izhangzhihao@hotmail.com" url="https://github.com/izhangzhihao">izhangzhihao</vendor>
<id>com.chylex.coloredbrackets</id>
<name>Colored Brackets</name>
<vendor url="https://chylex.com">chylex</vendor>
<description><![CDATA[
<strong>🌈Rainbow Brackets for IntelliJ based IDEs/Android Studio/HUAWEI DevEco Studio</strong>
<br/>
<b>Sponsors</b>
<p>This plugin is sponsored by <b>CodeStream</b></p>
<a href=https://sponsorlink.codestream.com/?utm_source=jbmarket&utm_campaign=jbrainbowbrackets&utm_medium=banner>
<img src=https://alt-images.codestream.com/codestream_logo_jbrainbowbrackets.png>
</a>
<br>Eliminate context switching and costly distractions. Create and merge PRs and perform code reviews from inside your IDE while using jump-to-definition, your keybindings, and other IDE favorites.
<a href=https://sponsorlink.codestream.com/?utm_source=jbmarket&utm_campaign=jbrainbowbrackets&utm_medium=banner>Learn more</a>
<br/>
<p>Supported languages:</p>
<p>Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby,
Elixir, ObjectiveC, PHP, HTML, XML, SQL, Apex language, C#, Dart, Pug/Jade, Bash, Vue.js, C# Razor Pages, GLSL(the OpenGL Shading Language), Go Template, C++, C...</p>
<br/>
<p>Author's choiceRainbow Brackets + One Dark Theme + Nyan Progress Bar + Fira Code(Font)</p>
<br/>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-java.png"
border="0" width="500" height="205" alt="with-java"/></p>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-material-theme-ui.png"
border="0" width="500" height="167" alt="with-material-theme-ui.png"/></p>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-scala.png"
border="0" width="500" height="250" alt="with-scala"/></p>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-kotlin.png"
border="0" width="500" height="191" alt="with-kotlin"/></p>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-Clojure.png"
border="0" width="500" height="190" alt="with-Clojure.png"/></p>
<p>
<img src="https://raw.githubusercontent.com/izhangzhihao/intellij-rainbow-brackets/2020.2/screenshots/with-HTML.png"
border="0" width="500" height="112" alt="with-HTML.png"/></p>
<p>
<img src="https://user-images.githubusercontent.com/10737066/40234968-46593fe2-5adb-11e8-8ea8-0026fad86ca9.gif"
border="0" width="500" height="206" alt="Highlight current scope.gif"/></p>
<p>
<img src="https://user-images.githubusercontent.com/10737066/40235004-642dfe54-5adb-11e8-9fd7-648b92fab8f5.gif"
border="0" width="500" height="206" alt="Highlight current scope.gif"/></p>
Fork of the <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets">Rainbow Brackets</a> plugin by <a href="https://github.com/izhangzhihao">izhangzhihao</a>.
]]></description>
<change-notes><![CDATA[
<p>6.26</p>
<ul>
<li>Bump dependencies.</li>
<li>Original version the fork is based on.</li>
</ul>
<br/>
]]></change-notes>
<p>6.25</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/2484">#2484 Add configurable threshold for number of lines for big files.</a></li>
</ul>
<br/>
<p>6.24</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2478">#2478 Scope highlighting not working with Hiberbee Theme(and other themes).</a></li>
</ul>
<br/>
<p>6.23</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2465">#2465 Improved performance of `annotateUtil`.</a></li>
</ul>
<br/>
<p>6.22</p>
<ul>
<li><a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2408">#2408 Support Code With Me client(Doesn't even need to be installed on the client side)</a></li>
</ul>
<br/>
<p>6.21</p>
<ul>
<li>Handle exceptions in `RainbowHighlightVisitor.analyze()`</a></li>
<li>Cleanup 201.* stuff</a></li>
<li>Refactoring</a></li>
<li>Mirror changes from https://github.com/JetBrains/intellij-community</a></li>
<li>Using textMatches instead of text to avoid expensive traverses the whole PSI tree & format code</a></li>
<li>Add support for rainbowify Python keywords</li>
<li>Compatible with DataSpell</li>
</ul>
<br/>
<p>6.20</p>
<ul>
<li>Handle exceptions in `RainbowHighlightVisitor.analyze()`</a></li>
<li>Cleanup 201.* stuff</a></li>
<li>Refactoring</a></li>
<li>Mirror changes from https://github.com/JetBrains/intellij-community</a></li>
<li>Using textMatches instead of text to avoid expensive traverses the whole PSI tree & format code</a></li>
<li>Add support for rainbowify Python keywords</li>
<li>Compatible with DataSpell</li>
</ul>
<br/>
<p>6.19</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2280">#2280: [SQL] the END keyword is improperly detected as closing a BEGIN scope when the END actually closes a CASE.</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1993">#1993: Change the default color schema in light theme.</a></li>
<li>Nashorn Engine removed, compatible with JDK15+, tested with OpenJDK 17-ea+24 on MacBook Pro (16-inch, 2019) & IntelliJ IDEA 2021.2 Build #IU-212.4638.7</li>
<li>Compatible with HUAWEI DevEco Studio</li>
</ul>
<br/>
<p>6.18</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/2037">#2037: Wrong coloring in generic `<` after comparison operator `<`.</a></li>
<li>Error report removed.</li>
</ul>
<br/>
<p>6.17</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/1068">#1068: @keeganwitt Add language exclusions to settings (closes #1046) (#1068) </a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1067">#1067: Don't rainbowify big files notification annoying</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/1057">#1057: Wrong coloring in lambda expressions with braces</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/497">#497: Add `<` & `>` support for C# </a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/191">#191: C# Razor Pages (.cshtml) Support </a></li>
<li>Deprecated API usage removed.</li>
</ul>
<br/>
<p>6.16</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/458">#458: Color Parentheses In Go Template</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/988">#988: (@Grandmother) minor: fix mispell in notification message</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/973">#973: File text mismatch</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/497">#497: C# in Rider - only squiggly brackets are rainbowified </a></li>
</ul>
<br/>
<p>6.15</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/897">#897: Initial support for Pug/Jade Language</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/830">#830: New option "Do NOT rainbowify template string"</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/784">#784: Disable rainbowify on big files(>1000 lines for now)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/851">#851: Rainbowify tag name doesn't works in JSX</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/875">#875: cannot create configurable component</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/799">#799 #817: Wrong element created by ASTFactory</a></li>
</ul>
<br/>
<p>6.13</p>
<ul>
<li>Make as a non-dynamic plugin, so it now requires restart.</li>
</ul>
<br/>
<p>6.12.1</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/516">#516: Add option to raibowify tag name of XML/HTML(disabled by default)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/279">#279: Hide update notification on any click & Disable update notification support</a></li>
<li>Feature: Rainbowify XML/HTML tag name.</li>
<li>Feature: Upgrade to kotlin 1.4.10.</li>
</ul>
<br/>
<p>6.12</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/279">#279: Hide update notification on any click & Disable update notification support</a></li>
<li>Feature: Rainbowify XML/HTML tag name.</li>
<li>Feature: Upgrade to kotlin 1.4.10.</li>
</ul>
<br/>
<p>6.11</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/481">#481: rainbow-brackets does not support bash shell properly(for BashSupport Pro and Shell Script)</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/485">#485: Incorrect coloriziong after lambda in C#</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/242">#242: Colorization is applied only to left parenthesis in for loop(C#) </a></li>
<li>Feature: C# support switch to new implementation.</li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/476">#476: Cannot create class com.github.izhangzhihao.rainbow.brackets.provider.SqlProvider</a></li>
</ul>
<br/>
<p>6.10</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/480">#480: Plugin Incompatibility: Android Studio 4.2 Alpha 8</a></li>
</ul>
<br/>
<p>6.9.1</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/445">#445: No working on Android Studio canary 4.2</a></li>
<li>Some bug fixs and code refactorings</li>
</ul>
<br/>
<p>6.7</p>
<ul>
<li>Fix NPE</li>
</ul>
<br/>
<p>6.6</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/436">#436: Duplicated indent guides in 2020.2 EAP</a></li>
</ul>
<br/>
<p>6.5</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/410">#410: ArrayIndexOutOfBoundsException</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/429">#429: NullPointerException</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/427">#427: Colorizing angle brackets for Typescript generics</a></li>
<li>Some refactoring!</li>
</ul>
<br/>
<p>6.4</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/420">#420: Exceptions in random color generator</a></li>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/423">#423: Don't rainbow php and echo tag</a></li>
<li>Fix anonymous feedback</li>
<li>Some refactoring!</li>
</ul>
<br/>
<p>6.3</p>
<ul>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/417">#417: Disable Rainbow Indents in Zen mode</a></li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/227">#227: Coloring for angle bracket for C++ code</a></li>
<li>Fix some exceptions and refactoring!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/214">#214: New color generator to generate your color schema</a></li>
</ul>
<br/>
<p>6.2</p>
<ul>
<li>Fix <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/410">#410: ArrayIndexOutOfBoundsException when number of colors to less than 5</a></li>
</ul>
<br/>
<p>6.1</p>
<ul>
<li>First release of 2020.1 and Java 11!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/235">#235: support SQL begin end colorization</a></li>
<li>Notification improved</li>
<li>Error report improved</li>
<li>Deprecated API usage removed</li>
<li>Initial support for <a href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/dynamic_plugins.html">dynamic plugin</a></li>
</ul>
<br/>
<p>6.0</p>
<ul>
<li>First release of 2020.1 and Java 11!</li>
<li>Feature <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/issues/235">#235: support SQL begin end colorization</a></li>
<li>Notification improved</li>
<li>Error report improved</li>
<li>Deprecated API usage removed</li>
<li>Initial support for <a href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/dynamic_plugins.html">dynamic plugin</a></li>
</ul>
<br/>
<p>5.35</p>
<ul>
<li>Final release of 2017.2 and Java 8! start from the next release, we will build against with 2020.1 and Java 11</li>
</ul>
<br/>
<p>5.34</p>
<ul>
<li>Compatible with Material Theme UI Plugin</li>
<li>Fix typo</li>
</ul>
<br/>
<p>5.33</p>
<ul>
<li>Fix ArrayIndexOutOfBoundsException</li>
</ul>
<br/>
<p>5.32</p>
<ul>
<li>Feature #391: Support cycle color on all bracket types(new option `Cycle count on all bracket types`)</li>
<li>Fix ArrayIndexOutOfBoundsException</li>
</ul>
<br/>
<p>5.31</p>
<ul>
<li>#187 Feature: Ability to increase the number of colours in the IDE</li>
<li>#247 Feature: Add a button to apply the color code to all kind of brackets</li>
<li>#374 Feature: Add support for IntelliJ-Haskell</li>
<li>Fix #54: Disable rainbow for mxml files</li>
<li>Fix typo</li>
</ul>
<br/>
<p>5.30</p>
<ul>
<li>Rollback indent guides</li>
</ul>
<br/>
<p>5.29</p>
<ul>
<li>Compatible color schema with the latest version of material-theme-jetbrains</li>
<li>Fix some errors</li>
</ul>
<br/>
<p>5.28</p>
<ul>
<li>Improve error report</li>
<li>Fix some errors with Nginx plugin</li>
</ul>
<br/>
<p>5.27</p>
<ul>
<li>Improve rainbow indent guide lines</li>
</ul>
<br/>
<p>5.26</p>
<ul>
<li>Improve error report.</li>
</ul>
<br/>
<p>5.25</p>
<ul>
<li>Fix #259 Runtime error in rainbow indent guide lines.</li>
</ul>
<br/>
<p>5.24</p>
<ul>
<li>Fix #252 Runtime error in rainbow indent guide lines.</li>
<li>Fix #254 Nginx support is been disabled from now on.</li>
<li>Re-enable anonymous feedback</li>
</ul>
<br/>
<p>5.23</p>
<ul>
<li>#164 #251 New feature: Rainbow indent guide lines(experimental), Thanks https://github.com/YiiGuxing !</li>
</ul>
<br/>
<p>5.22</p>
<ul>
<li>Fix #243 #180, allow users custom matched brace by setting `overrideMatchedBraceAttributes = false`</li>
</ul>
<br/>
<p>5.21</p>
<ul>
<li>#65 [Scope Highlighting] now the effects will not been removed after shortcut released, users could press the key `ESC` to do this. There also have an option `Press any key to remove the highlighting effects`</li>
<li>Refactoring & Remove dead code</li>
</ul>
<br/>
<p>5.20</p>
<ul>
<li>#233 Option to not rainbowify brackets of the first level</li>
<li>#234 Color is displayed with wrong order in C# code</li>
</ul>
<br/>
<p>5.19</p>
<ul>
<li>Fix notification.</li>
</ul>
<br/>
<p>5.18</p>
<ul>
<li>Add notification for custom your own rainbow colors.</li>
</ul>
<br/>
<p>5.17</p>
<ul>
<li>More color options for squiggly brackets before cycle(#215).</li>
<li>NullPointerException in while analyse code(#216).</li>
</ul>
<br/>
<p>5.16</p>
<ul>
<li>Add shiny new icon.</li>
</ul>
<br/>
<p>5.15</p>
<ul>
<li>Fix support for kotlin scheme attribute "KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW".</li>
</ul>
<br/>
<p>5.14</p>
<ul>
<li>Remove deprecated API usages.</li>
<li>Refactoring.</li>
<li>Added Dart to the supported languages list(#205).</li>
</ul>
<br/>
<p>5.13</p>
<ul>
<li>Fix macro support of Clang(#198)</li>
<li>Remove red-variation colors from default configuration(#192)</li>
</ul>
<br/>
<p>5.12</p>
<ul>
<li>Intellij-rainbow-brackets now support C# language(#6)!</li>
</ul>
<br/>
<p>5.11</p>
<ul>
<li>Now you could disable rainbow brackets for specific languages, see more info <a
href="https://github.com/izhangzhihao/intellij-rainbow-brackets#disable-rainbow-brackets-for-specific-languages">here</a>.
</li>
</ul>
<br/>
<p>5.10</p>
<ul>
<li>New color settings page!!! Thanks this PR(#179) from https://github.com/YiiGuxing.</li>
<li>See the new settings page in Settings/Preferences > Editor > Color Scheme > Rainbow Brackets.</li>
</ul>
<br/>
<p>5.9.1</p>
<ul>
<li>Fix wrong background color on a light theme of "MATCHED_BRACE_ATTRIBUTES"(#155).</li>
</ul>
<br/>
<p>5.9</p>
<ul>
<li>Rainbow Kotlin lambda expression arrow(#142).</li>
<li>Experimental feature: Highlight Kotlin label(#143).</li>
<li>Override "MATCHED_BRACE_ATTRIBUTES".</li>
<li>Improve configs & docs.</li>
<li>Cleanup temp code & deprecated code.</li>
<li>Remove anonymous feedback.</li>
</ul>
<br/>
<p>5.8.3</p>
<ul>
<li>Improve anonymous feedback</li>
</ul>
<br/>
<p>5.8.2</p>
<ul>
<li>Override kotlin plugin setting `KOTLIN_FUNCTION_LITERAL_BRACES_AND_ARROW` to empty so that we could
rainbowify multiple level lambda expressions.
</li>
</ul>
<br/>
<p>5.8.1</p>
<ul>
<li>Fix #67: Can't find resource for bundle java.util.PropertyResourceBundle, key version</li>
<li>Improve anonymous feedback</li>
</ul>
<br/>
<p>5.8</p>
<ul>
<li>Feature #52 Flat out all text other than brackets on key (Alt + Button3) press. (via pull request#63)
</li>
<li>Feature #61 Change Highlight Current Scope Keymap to Ctrl + Button3 (Windows & Linux) or Meta+ Button3
(Mac) (via pull request#63)
</li>
<li>Add anonymous feedback support</li>
</ul>
<br/>
<p>5.7.1</p>
<ul>
<li>Fix #60 :Exception in v5.7</li>
<li>Experimental feature: Highlight current scope when Ctrl(Windows & Linux)/Meta(Mac) key pressed (feature
#37 / pull request#59)
</li>
</ul>
<br/>
<p>5.7</p>
<ul>
<li>Experimental feature: Highlight current scope when Ctrl(Windows & Linux)/Meta(Mac) key pressed (feature
#37 / pull request#59)
</li>
</ul>
<br/>
<p>5.6</p>
<ul>
<li>Performance improvement</li>
</ul>
<br/>
<p>5.5</p>
<ul>
<li>Fix #53 The closing brackets or keywords are not highlighted (Ruby & PHP)</li>
</ul>
<br/>
<p>5.4</p>
<ul>
<li>Fix #53 The closing brackets or keywords are not highlighted (Ruby & PHP)</li>
</ul>
<br/>
<p>5.3</p>
<ul>
<li>Improve angle bracket support for Groovy</li>
</ul>
<br/>
<p>5.2</p>
<ul>
<li>#48 Performance improvement</li>
<li>#49 Fix images size</li>
</ul>
<br/>
<p>5.1</p>
<ul>
<li>#39 Enable rainbow html in js</li>
</ul>
<br/>
<p>5.0</p>
<ul>
<li>Finally, intellij-rainbow-brackets released version 5.0 with all RC features & bug fix</li>
<li><b>Thanks for https://github.com/YiiGuxing, which helps move this plugin from `Annotator` to
`HighlightVisitor`!</b></li>
<li>Check more info at <a href="https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/25">here</a>
</li>
<li>From 5.x series we didn't need specific implementations like java/scala/kotlin specific implementations
in 3.x series anymore!
</li>
<br/>
<li>#13 Add test for dart support & add `DartAngleBracketProvider` for support dart angle brackets</li>
<li>#18 where to customize brackets color? See the config guide in <a
href="https://github.com/izhangzhihao/intellij-rainbow-brackets#Config-brackets-colors">here</a>
</li>
<li>Add test for #39</li>
<li>#38 Add support for JSX (React)</li>
<li>Fix #27 Settings no longer works</li>
<li>#30 Adjust color: remove red, purple from color palettes, add some material design color to color
palettes.
</li>
<li>#32 Add version info in setting page</li>
<li>#31 Fix 'Enablement of round brackets enables all but angle brackets'</li>
<li>#10 #2 Add setting to disable rainbow-ify brackets without content</li>
<li>Show update notification after plugin updated</li>
<li>Add a lot of tests</li>
<li>Convert all java code to kotlin</li>
<br/>
<li>And with much more features not documented in release notes.</li>
<li>NOTE: this version are build against with IU-2017.2.7, but verified by IC-2017.2</li>
</ul>
<br/>
<p>5.0-RC4</p>
<ul>
<li>#10 #2 Add setting to disable rainbow-ify brackets without content</li>
<li>Show update notification after plugin updated</li>
<li>Add a lot of tests</li>
<li>Convert all java code to kotlin</li>
<li>NOTE: this version are build against with IU-2017.2.7, but verified by IC-2017.2</li>
</ul>
<br/>
<p>5.0-RC3</p>
<ul>
<li>#32 Add version info in setting page</li>
<li>#31 Fix 'Enablement of round brackets enables all but angle brackets(#31)'</li>
</ul>
<br/>
<p>5.0-RC2</p>
<ul>
<li>#30 Adjust color: remove red, purple from color palettes, add some material design color to color
palettes.
</li>
</ul>
<br/>
<p>5.0-RC1</p>
<ul>
<li>Fix #27 Settings no longer works</li>
</ul>
<br/>
<p>5.0-RC0</p>
<ul>
<li>This is the first RC releases on 5.x series!</li>
<li><b>Thanks for https://github.com/YiiGuxing, which helps move this plugin from `Annotator` to
`HighlightVisitor`!</b></li>
<li>Check more info at https://github.com/izhangzhihao/intellij-rainbow-brackets/pull/25</li>
<li>This RC release has fantastic compatibility with previous release(3.x series).</li>
<li>From 5.x series we didn't need specific implementations like java/scala/kotlin specific implementations
in 3.x series anymore!
</li>
<li>And with much more features not documented in release notes.</li>
</ul>
<br/>
<p>3.1</p>
<ul>
<li>Add a specific implementation for PHP language</li>
</ul>
<br/>
<p>3.0</p>
<ul>
<li>Version 3.0 has been released, with all RC features & bug fix</li>
<li>Fix #23 Inconsistent colors</li>
<li>Fix #21 Wrong bracket colorization based on spaces</li>
<li>Fix #19 Kotlin expression inside string bug</li>
<li>Fix #12 Symbol less ">" is considered as a bracket even without leading "<"</li>
<li>Fix #11 Same level brackets should have same color</li>
<li>And much more!</li>
<li>Add specific implement for java/kotlin/scala/javascript</li>
<li>Add example to help people add specific implementation for specific language!</li>
<li>Check out README.md on github https://github.com/izhangzhihao/intellij-rainbow-brackets</li>
</ul>
<br/>
<p>3.0-RC5</p>
<ul>
<li>Adjust colors for default light theme. Thanks to https://github.com/YiiGuxing</li>
</ul>
<br/>
<p>3.0-RC4</p>
<ul>
<li>Add specific implement for java/kotlin/scala</li>
<li>So now in java/kotlin/scala same level brackets should have same color.</li>
<li>Fix: #19:Kotlin expression inside string bug</li>
</ul>
<br/>
<p>3.0-RC2</p>
<ul>
<li>Remove option for enable/disable rainbow for HTML/XML</li>
</ul>
<br/>
<p>3.0-RC1</p>
<ul>
<li>Add new setting page to control what/how to colorify:</li>
<li>1. Add option to Enable/disable rainbow</li>
<li>2. Add option to Enable rainbow for any unsupported languages</li>
<li>3. Add option to Enable/disable rainbow for HTML/XML</li>
<li>4. Add option to Enable/disable rainbow for round brackets</li>
<li>5. Add option to Enable/disable rainbow for squiggly brackets</li>
<li>6. Add option to Enable/disable rainbow for square brackets</li>
<li>7. Add option to Enable/disable rainbow for angle brackets</li>
</ul>
<br/>
<p>2.6</p>
<ul>
<li>Add support for salesforce apex language, thanks for https://github.com/onisuly</li>
</ul>
<br/>
<p>2.5</p>
<ul>
<li>Fix Rust support, thanks for https://github.com/fst3a</li>
</ul>
<br/>
<p>2.4</p>
<ul>
<li>Add support for SQL</li>
</ul>
<br/>
<p>2.3</p>
<ul>
<li>Add support for HTML/XML</li>
</ul>
<br/>
<p>2.2</p>
<ul>
<li>Add support for C#</li>
</ul>
<br/>
<p>2.1</p>
<ul>
<li>New identifiable colors</li>
</ul>
<br/>
<p>2.0</p>
<ul>
<li>Rainbowify brackets faster!</li>
</ul>
<br/>
<p>1.1</p>
<ul>
<li>Support IntelliJ IDEA based IDEs version 14 and above</li>
</ul>
<br/>
<p>1.0</p>
<ul>
<li>Initial release</li>
</ul>
]]>
</change-notes>
<!-- please see http://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
<idea-version since-build="203" until-build="222.*"/>
<!-- please see https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html
on how to target different products -->
<depends>com.intellij.modules.lang</depends>
<depends optional="true" config-file="kotlin-brackets.xml">org.jetbrains.kotlin</depends>
<depends optional="true" config-file="JSX.xml">JavaScript</depends>
@ -759,13 +38,10 @@
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<!--test only-->
<!--<annotator language="JAVA" implementationClass="com.github.izhangzhihao.rainbow.brackets.annotator.RainbowAnnotator"/>-->
<highlightVisitor implementation="com.github.izhangzhihao.rainbow.brackets.visitor.DefaultRainbowVisitor" />
<highlightVisitor implementation="com.github.izhangzhihao.rainbow.brackets.visitor.XmlRainbowVisitor" />
<applicationConfigurable instance="com.github.izhangzhihao.rainbow.brackets.settings.RainbowConfigurable"/>
<applicationConfigurable instance="com.github.izhangzhihao.rainbow.brackets.settings.RainbowConfigurable" displayName="Colored Brackets" parentId="appearance" />
<applicationService
serviceImplementation="com.github.izhangzhihao.rainbow.brackets.settings.RainbowSettings" />
<colorAndFontPanelFactory
@ -775,12 +51,8 @@
<additionalTextAttributes scheme="Default" file="colorSchemes/rainbow-color-default.xml" />
<additionalTextAttributes scheme="Darcula" file="colorSchemes/rainbow-color-default-darcula.xml" />
<postStartupActivity implementation="com.github.izhangzhihao.rainbow.brackets.RainbowUpdateNotifyActivity"/>
<!--<errorHandler implementation="com.github.izhangzhihao.rainbow.brackets.util.GitHubErrorReporter"/>-->
<highlightingPassFactory implementation="com.github.izhangzhihao.rainbow.brackets.indents.RainbowIndentsPassFactory" />
<applicationService serviceImplementation="com.github.izhangzhihao.rainbow.brackets.ApplicationServicePlaceholder" id="ApplicationServicePlaceholder"/>
<editorNotificationProvider implementation="com.github.izhangzhihao.rainbow.brackets.RainbowifyBanner" />
<notificationGroup id="Rainbow Brackets Notification Group" displayType="STICKY_BALLOON"/>
</extensions>
<applicationListeners>

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 400 400"><defs><path id="a35NhMpHdG" d="M400 200C400 310.38 310.38 400 200 400C89.62 400 0 310.38 0 200C0 89.62 89.62 0 200 0C310.38 0 400 89.62 400 200Z"/><path id="b84wADd12" d="M57.5 294C51.5 294 47.5 294 43.5 293C39.5 292 35.5 289 32.5 285C29.5 281 28.5 277 27.5 272C26.5 267 26.5 258 26.5 246C26.5 237 26.5 231 25.5 226C24.5 221 22.5 216 19.5 213C16.5 210 12.5 208 6.5 208C6.5 206.4 6.5 193.6 6.5 192C12.5 192 16.5 190 19.5 187C22.5 184 24.5 179 25.5 174C26.5 169 26.5 163 26.5 154C26.5 142 26.5 133 27.5 128C28.5 123 29.5 119 32.5 115C35.5 111 39.5 108 43.5 107C47.5 106 51.5 106 57.5 106C57.83 106 59.5 106 62.5 106L62.5 121C60.7 121 59.7 121 59.5 121C52.5 121 48.5 122 46.5 124C43.5 127 42.5 128 42.5 131C42.5 133.5 42.5 153.5 42.5 156C42.5 171 40.5 181 37.5 187C34.5 193 28.5 197 22.5 200C28.5 203 34.5 207 37.5 213C40.5 219 42.5 229 42.5 244C42.5 246.5 42.5 266.5 42.5 269C42.5 272 43.5 273 46.5 276C48.5 278 52.5 279 59.5 279C59.7 279 60.7 279 62.5 279L62.5 294C59.5 294 57.83 294 57.5 294Z"/><path id="f5MtdfUl6" d="M71.5 249C65.5 232 62.5 216 62.5 200C62.5 184 65.5 168 71.5 151C77.5 135 88.5 120 97.5 106C98.7 106 108.3 106 109.5 106C90.5 137 80.5 169 80.5 200C80.5 231 90.5 263 109.5 294C108.7 294 104.7 294 97.5 294C84.17 274.67 75.5 259.67 71.5 249Z"/><path id="ioNZw7HPO" d="M100 249L100 231L175 200L100 169L100 151L195 191L195 209L100 249Z"/><path id="i1M6XmCDiH" d="M300 249L300 231L225 200L300 169L300 151L205 191L205 209L300 249Z"/><path id="aVt4k34p4" d="M342.5 294C348.5 294 352.5 294 356.5 293C360.5 292 364.5 289 367.5 285C370.5 281 371.5 277 372.5 272C373.5 267 373.5 258 373.5 246C373.5 237 373.5 231 374.5 226C375.5 221 377.5 216 380.5 213C383.5 210 387.5 208 393.5 208C393.5 206.4 393.5 193.6 393.5 192C387.5 192 383.5 190 380.5 187C377.5 184 375.5 179 374.5 174C373.5 169 373.5 163 373.5 154C373.5 142 373.5 133 372.5 128C371.5 123 370.5 119 367.5 115C364.5 111 360.5 108 356.5 107C352.5 106 348.5 106 342.5 106C342.17 106 340.5 106 337.5 106L337.5 121C339.3 121 340.3 121 340.5 121C347.5 121 351.5 122 353.5 124C356.5 127 357.5 128 357.5 131C357.5 133.5 357.5 153.5 357.5 156C357.5 171 359.5 181 362.5 187C365.5 193 371.5 197 377.5 200C371.5 203 365.5 207 362.5 213C359.5 219 357.5 229 357.5 244C357.5 246.5 357.5 266.5 357.5 269C357.5 272 356.5 273 353.5 276C351.5 278 347.5 279 340.5 279C340.3 279 339.3 279 337.5 279L337.5 294C340.5 294 342.17 294 342.5 294Z"/><path id="eCfOjpO8n" d="M328.5 249C334.5 232 337.5 216 337.5 200C337.5 184 334.5 168 328.5 151C322.5 135 311.5 120 302.5 106C301.3 106 291.7 106 290.5 106C309.5 137 319.5 169 319.5 200C319.5 231 309.5 263 290.5 294C291.3 294 295.3 294 302.5 294C315.83 274.67 324.5 259.67 328.5 249Z"/></defs><g><g><g><use fill="#263238" fill-opacity="1" opacity="1" xlink:href="#a35NhMpHdG"/></g><g><use fill="#e6b422" fill-opacity="1" opacity="1" xlink:href="#b84wADd12"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#b84wADd12"/></g></g><g><use fill="#2196f3" fill-opacity="1" opacity="1" xlink:href="#f5MtdfUl6"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#f5MtdfUl6"/></g></g><g><use fill="#3f51b5" fill-opacity="1" opacity="1" xlink:href="#ioNZw7HPO"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#ioNZw7HPO"/></g></g><g><use fill="#3f51b5" fill-opacity="1" opacity="1" xlink:href="#i1M6XmCDiH"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#i1M6XmCDiH"/></g></g><g><use fill="#e6b422" fill-opacity="1" opacity="1" xlink:href="#aVt4k34p4"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#aVt4k34p4"/></g></g><g><use fill="#2196f3" fill-opacity="1" opacity="1" xlink:href="#eCfOjpO8n"/><g><use fill-opacity="0" stroke="#000" stroke-opacity="0" stroke-width="1" opacity="1" xlink:href="#eCfOjpO8n"/></g></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="Shell Script"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.SHBracePairProvider" />
</extensions>

View File

@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="izhangzhihao.rainbow.brackets">
<extensions defaultExtensionNs="com.chylex.coloredbrackets">
<bracePairProvider language="SQL"
implementationClass="com.github.izhangzhihao.rainbow.brackets.provider.SqlBracePairProvider" />
</extensions>

View File

@ -1,30 +0,0 @@
# suppress inspection "UnusedProperty" for whole file
#
# Copyright (c) 2017 Patrick Scheibe
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
report.error.to.plugin.vendor=Report error on GitHub
report.error.progress.dialog.text=Submitting error report...
report.error.connection.failure=Could not communicate with GitHub
git.issue.title=[Auto Generated Report]{0}
git.issue.label=auto-generated
git.issue.text=<a href="{0}">Created issue {1}</a>. Thanks for your feedback!
git.issue.duplicate.text=<a href="{0}">A similar issues was already reported (#{1})</a>. Thanks for your feedback!

View File

@ -1,5 +1,6 @@
package com.github.izhangzhihao.rainbow.brackets
import com.intellij.codeInsight.daemon.impl.HighlightInfoType
import com.intellij.psi.PsiDocumentManager
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
import com.jetbrains.php.lang.PhpFileType
@ -27,7 +28,7 @@ function padZero(string data): string
PsiDocumentManager.getInstance(project).commitAllDocuments()
val doHighlighting = myFixture.doHighlighting()
assertFalse(doHighlighting.isEmpty())
doHighlighting.filter { brackets.contains(it.text.toChar()) }
doHighlighting.filter { brackets.contains(it.text.toChar()) && it.severity != HighlightInfoType.INJECTED_FRAGMENT_SEVERITY }
.map { it.forcedTextAttributesKey.defaultAttributes.foregroundColor }
.toTypedArray()
.shouldBe(