add Raku support

This commit is contained in:
nbrown 2020-07-05 22:21:13 -04:00
parent f948639bf1
commit f58111f220
10 changed files with 124 additions and 3 deletions

View file

@ -0,0 +1,13 @@
# Raku Test Cases
This folder holds the test cases for **Raku**.
## Additional Docs
No Additional information is needed for this test case.
## Good Test Cases
The test cases denoted: `LANGUAGE_good_FILE.EXTENSION` are all valid, and should pass successfully when linted.
- **Note:** They are linted utilizing the default linter rules.
## Bad Test Cases
The test cases denoted: `LANGUAGE_bad_FILE.EXTENSION` are **NOT** valid, and should trigger errors when linted.
- **Note:** They are linted utilizing the default linter rules.

View file

@ -0,0 +1,4 @@
use v6.d;
my @foo;
$foo[1] = 42

View file

@ -0,0 +1,4 @@
use v6;
my @foo;
@foo[1] = 42

View file

@ -32,7 +32,9 @@ RUN apk add --no-cache \
php7 \ php7 \
ca-certificates less ncurses-terminfo-base \ ca-certificates less ncurses-terminfo-base \
krb5-libs libgcc libintl libssl1.1 libstdc++ \ krb5-libs libgcc libintl libssl1.1 libstdc++ \
tzdata userspace-rcu zlib icu-libs lttng-ust tzdata userspace-rcu zlib icu-libs lttng-ust \
libffi-dev openssl-dev
######################################### #########################################
# Install Powershell + PSScriptAnalyzer # # Install Powershell + PSScriptAnalyzer #
@ -159,6 +161,27 @@ RUN curl -sLO https://github.com/borkdude/clj-kondo/releases/download/v${CLJ_KON
RUN curl -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktlint && chmod a+x ktlint \ RUN curl -sSLO https://github.com/pinterest/ktlint/releases/latest/download/ktlint && chmod a+x ktlint \
&& mv "ktlint" /usr/bin/ && mv "ktlint" /usr/bin/
################
# Install Raku #
################
ARG RAKU_VER="2020.06"
# Environment
ENV PATH="/root/raku-install/bin:/root/raku-install/share/perl6/site/bin:/root/.rakudobrew/bin:${PATH}" \
ENV="/root/.profile"
# Basic setup, programs and init
RUN git clone https://github.com/tadzik/rakudobrew ~/.rakudobrew \
&& eval "$(~/.rakudobrew/bin/rakudobrew init Sh)"\
&& rakudobrew build moar $RAKU_VER --configure-opts='--prefix=/root/raku-install' \
&& rm -rf /root/.rakudobrew/versions/moar-$RAKU_VER \
&& rakudobrew register moar-$RAKU_VER /root/raku-install \
&& rakudobrew global moar-$RAKU_VER \
&& rakudobrew build-zef \
&& rm -rf /root/.rakudobrew
########################################### ###########################################
# Load GitHub Env Vars for GitHub Actions # # Load GitHub Env Vars for GitHub Actions #
########################################### ###########################################
@ -174,6 +197,7 @@ ENV GITHUB_SHA=${GITHUB_SHA} \
VALIDATE_MD=${VALIDATE_MD} \ VALIDATE_MD=${VALIDATE_MD} \
VALIDATE_BASH=${VALIDATE_BASH} \ VALIDATE_BASH=${VALIDATE_BASH} \
VALIDATE_PERL=${VALIDATE_PERL} \ VALIDATE_PERL=${VALIDATE_PERL} \
VALIDATE_RAKU=${VALIDATE_RAKU} \
VALIDATE_PHP=${VALIDATE_PHP} \ VALIDATE_PHP=${VALIDATE_PHP} \
VALIDATE_PYTHON=${VALIDATE_PYTHON} \ VALIDATE_PYTHON=${VALIDATE_PYTHON} \
VALIDATE_RUBY=${VALIDATE_RUBY} \ VALIDATE_RUBY=${VALIDATE_RUBY} \

View file

@ -51,6 +51,7 @@ Developers on **GitHub** can call the **GitHub Action** to lint their code base
| **PowerShell** | [PSScriptAnalyzer](https://github.com/PowerShell/Psscriptanalyzer) | | **PowerShell** | [PSScriptAnalyzer](https://github.com/PowerShell/Psscriptanalyzer) |
| **Protocol Buffers** | [protolint](https://github.com/yoheimuta/protolint) | | **Protocol Buffers** | [protolint](https://github.com/yoheimuta/protolint) |
| **Python3** | [pylint](https://www.pylint.org/) | | **Python3** | [pylint](https://www.pylint.org/) |
| **Raku** | [raku](https://raku.org) |
| **Ruby** | [RuboCop](https://github.com/rubocop-hq/rubocop) | | **Ruby** | [RuboCop](https://github.com/rubocop-hq/rubocop) |
| **Shell** | [Shellcheck](https://github.com/koalaman/shellcheck) | | **Shell** | [Shellcheck](https://github.com/koalaman/shellcheck) |
| **Terraform** | [tflint](https://github.com/terraform-linters/tflint) | | **Terraform** | [tflint](https://github.com/terraform-linters/tflint) |
@ -156,6 +157,7 @@ and won't run anything unexpected.
| **VALIDATE_MD** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_MD** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_BASH** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_BASH** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_PERL** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_PERL** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_RAKU** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_PHP** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_PHP** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_PYTHON** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_PYTHON** | `true` | Flag to enable or disable the linting process of the language. |
| **VALIDATE_RUBY** | `true` | Flag to enable or disable the linting process of the language. | | **VALIDATE_RUBY** | `true` | Flag to enable or disable the linting process of the language. |

View file

@ -21,6 +21,7 @@ For some linters it is also possible to override rules on a case by case level w
- [JSON](#json) - [JSON](#json)
- [Markdown](#markdown) - [Markdown](#markdown)
- [Perl](#perl) - [Perl](#perl)
- [Raku](#raku)
- [PHP](#php) - [PHP](#php)
- [XML](#xml) - [XML](#xml)
- [Coffeescript](#coffeescript) - [Coffeescript](#coffeescript)
@ -353,6 +354,24 @@ Here is more data
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
## Raku
- [raku](https://raku.org)
### Raku Config file
- There is no top level *configuration file* available at this time
### Raku disable single line
- There is currently **No** way to disable rules inline of the file(s)
### Raku disable code block
- There is currently **No** way to disable rules inline of the file(s)
### Raku disable entire file
- There is currently **No** way to disable rules inline of the file(s)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
## PHP ## PHP
- [PHP](https://www.php.net/) - [PHP](https://www.php.net/)

View file

@ -201,6 +201,20 @@ function BuildFileList() {
########################################################## ##########################################################
READ_ONLY_CHANGE_FLAG=1 READ_ONLY_CHANGE_FLAG=1
###################### ######################
# Get the RAKU files #
######################
elif [ "$FILE_TYPE" == "raku" ] || [ "$FILE_TYPE" == "rakumod" ] \
|| [ "$FILE_TYPE" == "rakutest" ] || [ "$FILE_TYPE" == "pm6" ] \
|| [ "$FILE_TYPE" == "pl6" ] || [ "$FILE_TYPE" == "p6" ] ; then
################################
# Append the file to the array #
################################
FILE_ARRAY_RAKU+=("$FILE")
##########################################################
# Set the READ_ONLY_CHANGE_FLAG since this could be exec #
##########################################################
READ_ONLY_CHANGE_FLAG=1
######################
# Get the PHP files # # Get the PHP files #
###################### ######################
elif [ "$FILE_TYPE" == "php" ]; then elif [ "$FILE_TYPE" == "php" ]; then

View file

@ -82,7 +82,7 @@ CLOJURE_LINTER_RULES="$DEFAULT_RULES_LOCATION/$CLOJURE_FILE_NAME"
# Linter array for information prints # # Linter array for information prints #
####################################### #######################################
LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck" LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck"
"pylint" "perl" "rubocop" "coffeelint" "eslint" "standard" "pylint" "perl" "raku" "rubocop" "coffeelint" "eslint" "standard"
"ansible-lint" "/dockerfilelint/bin/dockerfilelint" "golangci-lint" "tflint" "ansible-lint" "/dockerfilelint/bin/dockerfilelint" "golangci-lint" "tflint"
"stylelint" "dotenv-linter" "pwsh" "ktlint" "protolint" "clj-kondo" "stylelint" "dotenv-linter" "pwsh" "ktlint" "protolint" "clj-kondo"
"spectral" "cfn-lint") "spectral" "cfn-lint")
@ -90,7 +90,7 @@ LINTER_ARRAY=("jsonlint" "yamllint" "xmllint" "markdownlint" "shellcheck"
############################# #############################
# Language array for prints # # Language array for prints #
############################# #############################
LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'PHP' 'RUBY' 'PYTHON' LANGUAGE_ARRAY=('YML' 'JSON' 'XML' 'MARKDOWN' 'BASH' 'PERL' 'RAKU' 'PHP' 'RUBY' 'PYTHON'
'COFFEESCRIPT' 'ANSIBLE' 'JAVASCRIPT_STANDARD' 'JAVASCRIPT_ES' 'COFFEESCRIPT' 'ANSIBLE' 'JAVASCRIPT_STANDARD' 'JAVASCRIPT_ES'
'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM' 'TYPESCRIPT_STANDARD' 'TYPESCRIPT_ES' 'DOCKER' 'GO' 'TERRAFORM'
'CSS' 'ENV' 'POWERSHELL' 'KOTLIN' 'PROTOBUF' 'CLOJURE' 'OPENAPI' 'CFN') 'CSS' 'ENV' 'POWERSHELL' 'KOTLIN' 'PROTOBUF' 'CLOJURE' 'OPENAPI' 'CFN')
@ -110,6 +110,7 @@ VALIDATE_XML="${VALIDATE_XML}" # Boolean to vali
VALIDATE_MD="${VALIDATE_MD}" # Boolean to validate language VALIDATE_MD="${VALIDATE_MD}" # Boolean to validate language
VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language VALIDATE_BASH="${VALIDATE_BASH}" # Boolean to validate language
VALIDATE_PERL="${VALIDATE_PERL}" # Boolean to validate language VALIDATE_PERL="${VALIDATE_PERL}" # Boolean to validate language
VALIDATE_RAKU="${VALIDATE_RAKU}" # Boolean to validate language
VALIDATE_PHP="${VALIDATE_PHP}" # Boolean to validate language VALIDATE_PHP="${VALIDATE_PHP}" # Boolean to validate language
VALIDATE_PYTHON="${VALIDATE_PYTHON}" # Boolean to validate language VALIDATE_PYTHON="${VALIDATE_PYTHON}" # Boolean to validate language
VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language VALIDATE_CLOUDFORMATION="${VALIDATE_CLOUDFORMATION}" # Boolean to validate language
@ -170,6 +171,7 @@ FILE_ARRAY_XML=() # Array of files to check
FILE_ARRAY_MD=() # Array of files to check FILE_ARRAY_MD=() # Array of files to check
FILE_ARRAY_BASH=() # Array of files to check FILE_ARRAY_BASH=() # Array of files to check
FILE_ARRAY_PERL=() # Array of files to check FILE_ARRAY_PERL=() # Array of files to check
FILE_ARRAY_RAKU=() # Array of files to check
FILE_ARRAY_PHP=() # Array of files to check FILE_ARRAY_PHP=() # Array of files to check
FILE_ARRAY_RUBY=() # Array of files to check FILE_ARRAY_RUBY=() # Array of files to check
FILE_ARRAY_PYTHON=() # Array of files to check FILE_ARRAY_PYTHON=() # Array of files to check
@ -199,6 +201,7 @@ ERRORS_FOUND_XML=0 # Count of errors found
ERRORS_FOUND_MARKDOWN=0 # Count of errors found ERRORS_FOUND_MARKDOWN=0 # Count of errors found
ERRORS_FOUND_BASH=0 # Count of errors found ERRORS_FOUND_BASH=0 # Count of errors found
ERRORS_FOUND_PERL=0 # Count of errors found ERRORS_FOUND_PERL=0 # Count of errors found
ERRORS_FOUND_RAKU=0 # Count of errors found
ERRORS_FOUND_PHP=0 # Count of errors found ERRORS_FOUND_PHP=0 # Count of errors found
ERRORS_FOUND_RUBY=0 # Count of errors found ERRORS_FOUND_RUBY=0 # Count of errors found
ERRORS_FOUND_PYTHON=0 # Count of errors found ERRORS_FOUND_PYTHON=0 # Count of errors found
@ -708,6 +711,7 @@ Footer() {
[ "$ERRORS_FOUND_MARKDOWN" -ne 0 ] || [ "$ERRORS_FOUND_MARKDOWN" -ne 0 ] ||
[ "$ERRORS_FOUND_BASH" -ne 0 ] || [ "$ERRORS_FOUND_BASH" -ne 0 ] ||
[ "$ERRORS_FOUND_PERL" -ne 0 ] || [ "$ERRORS_FOUND_PERL" -ne 0 ] ||
[ "$ERRORS_FOUND_RAKU" -ne 0 ] ||
[ "$ERRORS_FOUND_PHP" -ne 0 ] || [ "$ERRORS_FOUND_PHP" -ne 0 ] ||
[ "$ERRORS_FOUND_PYTHON" -ne 0 ] || [ "$ERRORS_FOUND_PYTHON" -ne 0 ] ||
[ "$ERRORS_FOUND_COFFEESCRIPT" -ne 0 ] || [ "$ERRORS_FOUND_COFFEESCRIPT" -ne 0 ] ||
@ -915,6 +919,21 @@ if [ "$VALIDATE_PERL" == "true" ]; then
LintCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "${FILE_ARRAY_PERL[@]}" LintCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "${FILE_ARRAY_PERL[@]}"
fi fi
################
# RAKU LINTING #
################
if [ "$VALIDATE_RAKU" == "true" ]; then
#######################
# Lint the raku files #
#######################
echo "$GITHUB_WORKSPACE/META6.json"
if [ -e "$GITHUB_WORKSPACE/META6.json" ]; then
cd "$GITHUB_WORKSPACE" && zef install --deps-only --/test .
fi
# LintCodebase "FILE_TYPE" "LINTER_NAME" "LINTER_CMD" "FILE_TYPES_REGEX" "FILE_ARRAY"
LintCodebase "RAKU" "raku" "raku -I $GITHUB_WORKSPACE/lib -c" ".*\.\(raku\|rakumod\|rakutest\|pm6\|pl6\|p6\)\$" "${FILE_ARRAY_RAKU[@]}"
fi
################ ################
# PHP LINTING # # PHP LINTING #
################ ################

View file

@ -52,6 +52,7 @@ function GetValidationInfo() {
VALIDATE_MD=$(echo "$VALIDATE_MD" | awk '{print tolower($0)}') VALIDATE_MD=$(echo "$VALIDATE_MD" | awk '{print tolower($0)}')
VALIDATE_BASH=$(echo "$VALIDATE_BASH" | awk '{print tolower($0)}') VALIDATE_BASH=$(echo "$VALIDATE_BASH" | awk '{print tolower($0)}')
VALIDATE_PERL=$(echo "$VALIDATE_PERL" | awk '{print tolower($0)}') VALIDATE_PERL=$(echo "$VALIDATE_PERL" | awk '{print tolower($0)}')
VALIDATE_RAKU=$(echo "$VALIDATE_RAKU" | awk '{print tolower($0)}')
VALIDATE_PHP=$(echo "$VALIDATE_PHP" | awk '{print tolower($0)}') VALIDATE_PHP=$(echo "$VALIDATE_PHP" | awk '{print tolower($0)}')
VALIDATE_PYTHON=$(echo "$VALIDATE_PYTHON" | awk '{print tolower($0)}') VALIDATE_PYTHON=$(echo "$VALIDATE_PYTHON" | awk '{print tolower($0)}')
VALIDATE_RUBY=$(echo "$VALIDATE_RUBY" | awk '{print tolower($0)}') VALIDATE_RUBY=$(echo "$VALIDATE_RUBY" | awk '{print tolower($0)}')
@ -82,6 +83,7 @@ function GetValidationInfo() {
$VALIDATE_MD || -n \ $VALIDATE_MD || -n \
$VALIDATE_BASH || -n \ $VALIDATE_BASH || -n \
$VALIDATE_PERL || -n \ $VALIDATE_PERL || -n \
$VALIDATE_RAKU || -n \
$VALIDATE_PHP || -n \ $VALIDATE_PHP || -n \
$VALIDATE_PYTHON || -n \ $VALIDATE_PYTHON || -n \
$VALIDATE_RUBY || -n \ $VALIDATE_RUBY || -n \
@ -188,6 +190,20 @@ function GetValidationInfo() {
VALIDATE_PERL="true" VALIDATE_PERL="true"
fi fi
####################################
# Validate if we should check RAKU #
####################################
if [[ $ANY_SET == "true" ]]; then
# Some linter flags were set - only run those set to true
if [[ -z $VALIDATE_RAKU ]]; then
# RAKU flag was not set - default to false
VALIDATE_RAKU="false"
fi
else
# No linter flags were set - default all to true
VALIDATE_RAKU="true"
fi
#################################### ####################################
# Validate if we should check PHP # # Validate if we should check PHP #
#################################### ####################################
@ -487,6 +503,11 @@ function GetValidationInfo() {
else else
PRINT_ARRAY+=("- Excluding [PERL] files in code base...") PRINT_ARRAY+=("- Excluding [PERL] files in code base...")
fi fi
if [[ $VALIDATE_RAKU == "true" ]]; then
PRINT_ARRAY+=("- Validating [RAKU] files in code base...")
else
PRINT_ARRAY+=("- Excluding [RAKU] files in code base...")
fi
if [[ $VALIDATE_PHP == "true" ]]; then if [[ $VALIDATE_PHP == "true" ]]; then
PRINT_ARRAY+=("- Validating [PHP] files in code base...") PRINT_ARRAY+=("- Validating [PHP] files in code base...")
else else

View file

@ -458,6 +458,7 @@ function RunTestCases() {
TestCodebase "BASH" "shellcheck" "shellcheck --color" ".*\.\(sh\)\$" "shell" TestCodebase "BASH" "shellcheck" "shellcheck --color" ".*\.\(sh\)\$" "shell"
TestCodebase "PYTHON" "pylint" "pylint --rcfile $PYTHON_LINTER_RULES" ".*\.\(py\)\$" "python" TestCodebase "PYTHON" "pylint" "pylint --rcfile $PYTHON_LINTER_RULES" ".*\.\(py\)\$" "python"
TestCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "perl" TestCodebase "PERL" "perl" "perl -Mstrict -cw" ".*\.\(pl\)\$" "perl"
TestCodebase "RAKU" "raku" "raku -c" ".*\.\(raku\|rakumod\|rakutest\|pm6\|pl6\|p6\)\$" "raku"
TestCodebase "PHP" "php" "php -l" ".*\.\(php\)\$" "php" TestCodebase "PHP" "php" "php -l" ".*\.\(php\)\$" "php"
TestCodebase "RUBY" "rubocop" "rubocop -c $RUBY_LINTER_RULES" ".*\.\(rb\)\$" "ruby" TestCodebase "RUBY" "rubocop" "rubocop -c $RUBY_LINTER_RULES" ".*\.\(rb\)\$" "ruby"
TestCodebase "GO" "golangci-lint" "golangci-lint run -c $GO_LINTER_RULES" ".*\.\(go\)\$" "golang" TestCodebase "GO" "golangci-lint" "golangci-lint run -c $GO_LINTER_RULES" ".*\.\(go\)\$" "golang"