Skip to content

Commit

Permalink
#46: Added highlighting for labels. Enabled hyperlinks in error messa…
Browse files Browse the repository at this point in the history
…ges. (#52)

* #46: Added support for highlighting labels.

* #49: Added console filter to enable file hyperlinks in the console when an error is printed

* #34: Added PR check to verify that commit messages are following the format prescribed in CONTRIBUTING.md

* #34: Upgrade Gradle to 7.0
  • Loading branch information
takanuva15 authored Apr 26, 2021
1 parent a813360 commit 4206896
Show file tree
Hide file tree
Showing 24 changed files with 276 additions and 110 deletions.
19 changes: 19 additions & 0 deletions .github/workflows/verify_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,22 @@ jobs:
steps:
- name: Verify Changelog Updated
uses: takanuva15/verify-changelog-updated@v1
verify_pr_and_commit_messages:
name: Verify PR Title and Commit Message Format
runs-on: ubuntu-latest
steps:
- name: Verify Commit Message Format
uses: gsactions/commit-message-checker@v1
with:
pattern: '^#\d{1,3}: \S+ \S+.*$'
error: >
The PR title and all git commit messages in the PR must follow this format:
"#<issue number>: <description of what the commit pertains to (2+ words, no newlines)>"
Example commit message: "#37: Add "print errors to console" option within the run config ui"
This format enables linking commit changes with the issue they are associated with and helps keep the git
history readable when performing searches. Please see CONTRIBUTING.md for more details.
checkAllCommitMessages: true
accessToken: ${{ secrets.GITHUB_TOKEN }}
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]
### Added
- Syntax highlighting now supports hotstrings
- Syntax highlighting now supports hotstrings and normal labels
- Can now toggle block comments using the standard block-comment-toggle action

- Errors printed to the console should now show a hyperlink allowing you to jump to any files referenced in the error

## [0.6.0] - 2021-04-07
#### (compatibility: 2020.1 - 2021.1.*)
Expand Down
14 changes: 11 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,20 @@ To contribute:
After cloning the repo, you should be able to run the "Run Plugin in test IDE" run configuration to start up a test instance of the IDE with the Ahk plugin.

### Pull Requests
All PR checks must pass, and a contributor must approve your PR before it is merged. Please add a description to your PR of what is being changed/fixed. All PRs will be squash-merged, so the title of your PR must adhere to the git commit message format too.
All PR checks must pass, and a contributor must approve your PR before it is merged. Please add a description to your PR of what is being changed/fixed. All PRs will be squash-merged, so the title of your PR must adhere to the [git commit message format](#git-commit-messages).

## Styleguides
### Git Commit Messages
All git commit messages should be prefixed with the issue nubmer that the commit is related to.
- Ex: If working on issue #32, you commit message should be `#32: Added new feature x`
All git commit messages in a pull request must follow this format:

`#<issue number>: <description of what the commit pertains to (2+ words, no newlines)>`

This format enables linking commit changes with the issue they are associated with and helps keep the git
history readable when performing searches.

> As an example, if you are working on issue [#49](https://github.com/Nordgedanken/intellij-autohotkey/issues/49) to enable hyperlinks in console messages, your commit message should be something like
>
> `#49: Added console filter to enable file hyperlinks in the console when an error is printed`
### Code Styleguide
This plugin is written purely in Kotlin; please do not commit java files or your PR will be rejected. The style of all Kotlin code adheres to the [official Kotlin style guide](https://kotlinlang.org/docs/coding-conventions.html). You can use the `ktlint` IntelliJ plugin from the marketplace to auto-format your code.
Expand Down
20 changes: 10 additions & 10 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ import org.jetbrains.grammarkit.tasks.GenerateLexer
import org.jetbrains.grammarkit.tasks.GenerateParser
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

// Imports a property from gradle.properties file
fun properties(key: String) = project.findProperty(key).toString()

plugins {
idea
id("org.jetbrains.intellij") version "0.6.5"
id("org.jetbrains.grammarkit") version "2020.3.2"
kotlin("jvm") version "1.4.31"
java
id("org.jetbrains.intellij") version "0.7.2"
id("org.jetbrains.grammarkit") version "2021.1.1"
kotlin("jvm") version "1.4.32"
jacoco
id("org.jlleitschuh.gradle.ktlint") version "10.0.0"
id("org.barfuin.gradle.jacocolog") version "1.2.4" // show coverage in console
Expand Down Expand Up @@ -64,14 +66,11 @@ val generateAhkParser = task<GenerateParser>("generateAhkParser") {
}

changelog {
version = prop("pluginVersion")
version = properties("pluginVersion")
header = closure { "[$version] - ${date()}" }
groups = listOf("Added")
}

// Imports a property from gradle.properties file
fun prop(name: String) = extra.properties[name] as? String ?: error("`$name` is not defined in gradle.properties")

tasks {
// Set the compatibility versions to 1.8
withType<JavaCompile> {
Expand Down Expand Up @@ -106,8 +105,8 @@ tasks {
}
)
version(changelog.version)
sinceBuild(prop("pluginSinceBuild"))
untilBuild(prop("pluginUntilBuild"))
sinceBuild(properties("pluginSinceBuild"))
untilBuild(properties("pluginUntilBuild"))
}

val intellijPublishToken: String? by project
Expand Down Expand Up @@ -158,6 +157,7 @@ fun setClassesToIncludeInCoverageCheck(classDirectories: ConfigurableFileCollect
// packages listed here can't be tested
val packagesToExcludeFromCoverageCheck = listOf(
"**/auto_hotkey/runconfig/execution/**",
"**/auto_hotkey/util/**",

// swing ui packages; must be tested manually
"**/auto_hotkey/runconfig/ui/**",
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
53 changes: 33 additions & 20 deletions gradlew
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
#!/usr/bin/env sh

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

##############################################################################
##
## Gradle start up script for UN*X
Expand Down Expand Up @@ -28,7 +44,7 @@ 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"'
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
Expand Down Expand Up @@ -66,6 +82,7 @@ esac

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


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
Expand Down Expand Up @@ -109,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
# 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
Expand All @@ -138,19 +156,19 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
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" ;;
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" ;;
esac
fi

Expand All @@ -159,14 +177,9 @@ save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
APP_ARGS=`save "$@"`

# 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"

# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi

exec "$JAVACMD" "$@"
43 changes: 24 additions & 19 deletions gradlew.bat
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem

@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
Expand All @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

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

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

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

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

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Expand All @@ -35,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init
if exist "%JAVA_EXE%" goto execute

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
Expand All @@ -45,28 +64,14 @@ echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windows variants

if not "%OS%" == "Windows_NT" goto win9xME_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*

:execute
@rem Setup the command line

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


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

:end
@rem End local scope for the variables with windows NT shell
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,24 @@ package de.nordgedanken.auto_hotkey.ide.highlighter

import com.intellij.openapi.options.colors.ColorDescriptor
import com.intellij.openapi.options.colors.ColorSettingsPage
import com.intellij.openapi.util.io.StreamUtil
import de.nordgedanken.auto_hotkey.util.AhkConstants
import de.nordgedanken.auto_hotkey.util.AhkIcons
import javax.swing.Icon

class AhkColorSettingsPage : ColorSettingsPage {
private val ATTRS = AhkHighlighterColor.values().map { it.attributesDescriptor }.toTypedArray()

private val ANNOTATOR_TAGS = AhkHighlighterColor.values().associateBy({ it.name }, { it.textAttributesKey })

override fun getIcon(): Icon = AhkIcons.LOGO

override fun getHighlighter() = AhkSyntaxHighlighter()

override fun getDemoText(): String {
return """
#Include current_url.ahk
Menu, Tray, Icon, % A_WinDir "\system32\netshell.dll" , 86 ; Shows a world icon in the system tray
ModernBrowsers := "ApplicationFrameWindow,Chrome_WidgetWin_0,Chrome_WidgetWin_1,MozillaWindowClass,Slimjet_WidgetWin_1"
LegacyBrowsers := "IEFrame,OperaWindowClass"
;^+!u::
; nTime := A_TickCount
; sURL := GetActiveBrowserURL()
; WinGetClass, sClass, A
; If (sURL != "")
; MsgBox, % "The URL is sURL`nEllapsed time: " (A_TickCount - nTime) " ms (" sClass ")"
; Else If sClass In % ModernBrowsers "," LegacyBrowsers
; MsgBox, % "The URL couldn't be determined (" sClass ")"
; Else
; MsgBox, % "Not a browser or browser not supported (" sClass ")"
;Return
#c::
clipboard := GetActiveBrowserURL()
Return"""
private val DEMO_TEXT by lazy {
val stream = javaClass.getResourceAsStream("demo_text_for_color_settings_page.ahk")!!
StreamUtil.convertSeparators(StreamUtil.readText(stream, "UTF-8"))
}

override fun getAdditionalHighlightingTagToDescriptorMap() = ANNOTATOR_TAGS

override fun getDisplayName() = AhkConstants.LANGUAGE_NAME
override fun getDemoText() = DEMO_TEXT
override fun getIcon(): Icon = AhkIcons.LOGO
override fun getAttributeDescriptors() = ATTRS

override fun getColorDescriptors(): Array<ColorDescriptor> = ColorDescriptor.EMPTY_ARRAY

override fun getDisplayName() = "AutoHotkey"
override fun getHighlighter() = AhkSyntaxHighlighter()
override fun getAdditionalHighlightingTagToDescriptorMap() = ANNOTATOR_TAGS
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,23 @@ import com.intellij.psi.PsiElement
import de.nordgedanken.auto_hotkey.ide.highlighter.AhkHighlighterColor.DIRECTIVE
import de.nordgedanken.auto_hotkey.ide.highlighter.AhkHighlighterColor.HOTKEY
import de.nordgedanken.auto_hotkey.ide.highlighter.AhkHighlighterColor.HOTSTRING
import de.nordgedanken.auto_hotkey.ide.highlighter.AhkHighlighterColor.NORMAL_LABEL
import de.nordgedanken.auto_hotkey.lang.psi.AhkDirective
import de.nordgedanken.auto_hotkey.lang.psi.AhkHotkey
import de.nordgedanken.auto_hotkey.lang.psi.AhkHotstring
import de.nordgedanken.auto_hotkey.lang.psi.AhkNormalLabel

/**
* Highlights psiElements that can't be highlighted by [AhkSyntaxHighlighter] since they are made of composite tokens
*/
class AhkHighlightAnnotator : Annotator {
override fun annotate(psiElem: PsiElement, holder: AnnotationHolder) {
when (psiElem) {
is AhkDirective -> holder.newInfoHighlightAnnotation(DIRECTIVE)
is AhkNormalLabel -> holder.newInfoHighlightAnnotation(NORMAL_LABEL)
is AhkHotkey -> holder.newInfoHighlightAnnotation(HOTKEY)
is AhkHotstring -> holder.newInfoHighlightAnnotation(HOTSTRING)

is AhkDirective -> holder.newInfoHighlightAnnotation(DIRECTIVE)
}
}
}
Expand Down
Loading

0 comments on commit 4206896

Please sign in to comment.