Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add inputs for D-Scanner and dub flags #3

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ jobs:
reporter: github-check
level: info
path: ./testdata
flags: '--config=./testdata/dscanner.ini'
dub_flags: '--config=./testdata/dub.sdl'

test-pr-check:
if: github.event_name == 'pull_request'
Expand All @@ -29,6 +31,8 @@ jobs:
reporter: github-pr-check
level: error
path: ./testdata
flags: '--config=./testdata/dscanner.ini'
dub_flags: '--config=./testdata/dub.sdl'

test-pr-review:
if: github.event_name == 'pull_request'
Expand All @@ -42,3 +46,5 @@ jobs:
reporter: github-pr-review
level: error
path: ./testdata
flags: '--config=./testdata/dscanner.ini'
dub_flags: '--config=./testdata/dub.sdl'
22 changes: 17 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,29 @@ inputs:
github_token:
description: 'GITHUB_TOKEN'
default: '${{ github.token }}'
# reviewdog flags

### Flags for reviewdog ###
level:
description: 'Report level for reviewdog [info,warning,error]'
default: 'error'
reporter:
description: 'Reporter of reviewdog command [github-pr-check,github-check,github-pr-review].'
default: 'github-pr-check'
# D-Scanner flags
description: 'Reporter of reviewdog command [github-pr-check,github-pr-review]'
default: 'github-pr-review'

### Flags for D-Scanner ###
path:
description: 'Root directory where D-Scanner should be run from'
default: ''
flags:
description: |
List of arguments to pass to D-Scanner.
Example: '--config=path/to/dscanner.ini'
default: ''
dub_flags:
description: |
List of arguments to pass to dub.
Example: '--config=path/to/dub.json'
default: ''
```

## Usage
Expand All @@ -55,5 +67,5 @@ jobs:
level: warning

# D-Scanner config
path: 'path/to/my/project'
path: 'path/to/my/dub/project'
```
10 changes: 10 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ inputs:
path:
description: 'Root directory where D-Scanner should be run from'
default: ''
flags:
description: |
List of arguments to pass to D-Scanner.
Example: '--config=path/to/dscanner.ini'
default: ''
dub_flags:
description: |
List of arguments to pass to dub.
Example: '--config=path/to/dub.json'
default: ''

runs:
using: 'docker'
Expand Down
11 changes: 9 additions & 2 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
set -e

if [ -n "${GITHUB_WORKSPACE}" ]; then
Expand All @@ -7,4 +7,11 @@ fi

export REVIEWDOG_GITHUB_API_TOKEN="${INPUT_GITHUB_TOKEN}"

dub lint --root="${INPUT_PATH:-PWD}" | reviewdog -efm="%f(%l:%c)[%tarn]: %m" -efm="%f(%l:%c)[%trror]: %m" -name="dscanner" -reporter="${INPUT_REPORTER:-github-pr-check}" -level="${INPUT_LEVEL}"
# 1. First check for warnings, should not exit with fail code when warnings found
# shellcheck disable=SC2086
dub lint ${INPUT_DUB_FLAGS} --root="${INPUT_PATH:-PWD}" -- ${INPUT_FLAGS} | reviewdog -efm="%f(%l:%c)[%tarn]: %m" -name="dscanner" -reporter="${INPUT_REPORTER}" -level="${INPUT_LEVEL}"

# 2. Then check for errors, if an error is found we should exit in error
set -euox pipefail # i.e: enable strict mode
# shellcheck disable=SC2086
dub lint ${INPUT_DUB_FLAGS} --root="${INPUT_PATH:-PWD}" -- ${INPUT_FLAGS} | reviewdog -efm="%f(%l:%c)[%trror]: %m" -name="dscanner" -reporter="${INPUT_REPORTER}" -level="${INPUT_LEVEL}"
204 changes: 204 additions & 0 deletions testdata/dscanner.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
; Configure which static analysis checks are enabled
[analysis.config.StaticAnalysisConfig]
; Check variable, class, struct, interface, union, and function names against t
; he Phobos style guide
style_check="enabled"
; Check for array literals that cause unnecessary allocation
enum_array_literal_check="enabled"
; Check for poor exception handling practices
exception_check="enabled"
; Check for use of the deprecated 'delete' keyword
delete_check="enabled"
; Check for use of the deprecated floating point operators
float_operator_check="enabled"
; Check number literals for readability
number_style_check="enabled"
; Checks that opEquals, opCmp, toHash, and toString are either const, immutable
; , or inout.
object_const_check="enabled"
; Checks for .. expressions where the left side is larger than the right.
backwards_range_check="enabled"
; Checks for if statements whose 'then' block is the same as the 'else' block
if_else_same_check="enabled"
; Checks for some problems with constructors
constructor_check="enabled"
; Checks for unused variables
unused_variable_check="enabled"
; Checks for unused labels
unused_label_check="enabled"
; Checks for unused function parameters
unused_parameter_check="enabled"
; Checks for duplicate attributes
duplicate_attribute="enabled"
; Checks that opEquals and toHash are both defined or neither are defined
opequals_tohash_check="enabled"
; Checks for subtraction from .length properties
length_subtraction_check="enabled"
; Checks for methods or properties whose names conflict with built-in propertie
; s
builtin_property_names_check="enabled"
; Checks for confusing code in inline asm statements
asm_style_check="enabled"
; Checks for confusing logical operator precedence
logical_precedence_check="enabled"
; Checks for undocumented public declarations
undocumented_declaration_check="enabled"
; Checks for poor placement of function attributes
function_attribute_check="enabled"
; Checks for use of the comma operator
comma_expression_check="enabled"
; Checks for local imports that are too broad
local_import_check="enabled"
; Checks for variables that could be declared immutable
could_be_immutable_check="enabled"
; Checks for redundant expressions in if statements
redundant_if_check="enabled"
; Checks for redundant parenthesis
redundant_parens_check="enabled"
; Checks for mismatched argument and parameter names
mismatched_args_check="enabled"
; Checks for labels with the same name as variables
label_var_same_name_check="enabled"
; Checks for lines longer than 120 characters
long_line_check="enabled"
; Checks for assignment to auto-ref function parameters
auto_ref_assignment_check="enabled"
; Checks for incorrect infinite range definitions
incorrect_infinite_range_check="enabled"
; Checks for asserts that are always true
useless_assert_check="enabled"
; Check for uses of the old-style alias syntax
alias_syntax_check="enabled"
; Checks for else if that should be else static if
static_if_else_check="enabled"
; Check for unclear lambda syntax
lambda_return_check="enabled"
; Check for auto function without return statement
auto_function_check="enabled"
; Check for sortedness of imports
imports_sortedness="disabled"
; Check for explicitly annotated unittests
explicitly_annotated_unittests="disabled"
; Check for properly documented public functions (Returns, Params)
properly_documented_public_functions="disabled"
; Check for useless usage of the final attribute
final_attribute_check="enabled"
; Check for virtual calls in the class constructors
vcall_in_ctor="enabled"
; Check for useless user defined initializers
useless_initializer="disabled"
; Check allman brace style
allman_braces_check="disabled"
; Check for redundant attributes
redundant_attributes_check="enabled"
; Check public declarations without a documented unittest
has_public_example="disabled"
; Check for asserts without an explanatory message
assert_without_msg="disabled"
; Check indent of if constraints
if_constraints_indent="disabled"
; Check for @trusted applied to a bigger scope than a single function
trust_too_much="enabled"
; Check for redundant storage classes on variable declarations
redundant_storage_classes="enabled"
; ModuleFilters for selectively enabling (+std) and disabling (-std.internal) i
; ndividual checks
[analysis.config.ModuleFilters]
; Exclude/Import modules
style_check=""
; Exclude/Import modules
enum_array_literal_check=""
; Exclude/Import modules
exception_check=""
; Exclude/Import modules
delete_check=""
; Exclude/Import modules
float_operator_check=""
; Exclude/Import modules
number_style_check=""
; Exclude/Import modules
object_const_check=""
; Exclude/Import modules
backwards_range_check=""
; Exclude/Import modules
if_else_same_check=""
; Exclude/Import modules
constructor_check=""
; Exclude/Import modules
unused_variable_check=""
; Exclude/Import modules
unused_label_check=""
; Exclude/Import modules
unused_parameter_check=""
; Exclude/Import modules
duplicate_attribute=""
; Exclude/Import modules
opequals_tohash_check=""
; Exclude/Import modules
length_subtraction_check=""
; Exclude/Import modules
builtin_property_names_check=""
; Exclude/Import modules
asm_style_check=""
; Exclude/Import modules
logical_precedence_check=""
; Exclude/Import modules
undocumented_declaration_check=""
; Exclude/Import modules
function_attribute_check=""
; Exclude/Import modules
comma_expression_check=""
; Exclude/Import modules
local_import_check=""
; Exclude/Import modules
could_be_immutable_check=""
; Exclude/Import modules
redundant_if_check=""
; Exclude/Import modules
redundant_parens_check=""
; Exclude/Import modules
mismatched_args_check=""
; Exclude/Import modules
label_var_same_name_check=""
; Exclude/Import modules
long_line_check=""
; Exclude/Import modules
auto_ref_assignment_check=""
; Exclude/Import modules
incorrect_infinite_range_check=""
; Exclude/Import modules
useless_assert_check=""
; Exclude/Import modules
alias_syntax_check=""
; Exclude/Import modules
static_if_else_check=""
; Exclude/Import modules
lambda_return_check=""
; Exclude/Import modules
auto_function_check=""
; Exclude/Import modules
imports_sortedness=""
; Exclude/Import modules
explicitly_annotated_unittests=""
; Exclude/Import modules
properly_documented_public_functions=""
; Exclude/Import modules
final_attribute_check=""
; Exclude/Import modules
vcall_in_ctor=""
; Exclude/Import modules
useless_initializer=""
; Exclude/Import modules
allman_braces_check=""
; Exclude/Import modules
redundant_attributes_check=""
; Exclude/Import modules
has_public_example=""
; Exclude/Import modules
assert_without_msg=""
; Exclude/Import modules
if_constraints_indent=""
; Exclude/Import modules
trust_too_much=""
; Exclude/Import modules
redundant_storage_classes=""
9 changes: 6 additions & 3 deletions testdata/source/app.d
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import std.stdio;

// Issue: Prefer the new "'alias' identifier '=' type ';'" syntax to the old "'alias' type identifier ';'" syntax.
// Warning: Prefer the new "'alias' identifier '=' type ';'" syntax to the old "'alias' type identifier ';'" syntax.
alias string myString;

// Issue: Empty declaration
// Warning: Empty declaration
;

void main(string[] args)
Expand All @@ -12,8 +12,11 @@ void main(string[] args)
{
writeln("Hello World");
}
// Issue: Catching Error or Throwable is almost always a bad idea.
// Warning: Catching Error or Throwable is almost always a bad idea.
catch (Throwable)
{
}

// Error: Expected `)` instead of `;`
writeln("hmm, you should have close that one";
}