Skip to content

Commit 2a9a976

Browse files
authored
feat: VSCode extension (#92)
1 parent 159a99d commit 2a9a976

26 files changed

+3647
-1
lines changed

.pre-commit-config.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ repos:
3434
- id: black
3535
additional_dependencies: ['click==8.0.4']
3636

37+
- repo: https://github.com/pre-commit/mirrors-eslint
38+
rev: v8.56.0
39+
hooks:
40+
- id: eslint
41+
args: [--fix]
42+
types: []
43+
files: ^vscode-extension/.*\.(js|ts)$
44+
additional_dependencies:
45+
46+
- '@typescript-eslint/[email protected]'
47+
- '@typescript-eslint/[email protected]'
48+
3749
- repo: https://github.com/pycqa/pylint
3850
rev: v2.15.10
3951
hooks:
@@ -81,6 +93,22 @@ repos:
8193
language: system
8294
pass_filenames: false
8395
always_run: true
96+
- id: vscode-extension-install
97+
name: vscode-extension-install
98+
description: Install VS Code extension dependencies
99+
entry: npm --prefix vscode-extension install
100+
language: system
101+
pass_filenames: false
102+
always_run: true
103+
files: ^vscode-extension/(package\.json|package-lock\.json)
104+
- id: vscode-extension-tests
105+
name: vscode-extension-tests
106+
description: Run VS Code extension unit tests with coverage (includes compilation)
107+
entry: npm --prefix vscode-extension run test:coverage
108+
language: system
109+
pass_filenames: false
110+
always_run: true
111+
files: ^vscode-extension/
84112
- id: intellij-plugin-format
85113
name: intellij-plugin-format
86114
description: Format IntelliJ plugin test code with ktlint

src/cli.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ def main(args_in=None):
6868
)
6969
compliance_result = invoke(payload)
7070

71+
if args.json:
72+
print([rule_results.json for rule_results in compliance_result])
73+
7174
if args.format:
7275
display(compliance_result)
7376
else:

src/rpdk/guard_rail/core/data_types.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,36 @@ def merge(self, guard_ruleset_result: Any):
110110
**guard_ruleset_result.warning,
111111
}
112112

113+
@property
114+
def json(self):
115+
"""Translates raw output into JSON document"""
116+
return {
117+
"compliant": self.compliant,
118+
"non_compliant": {
119+
rule_name: [
120+
{
121+
"check_id": result.check_id,
122+
"message": result.message,
123+
"path": result.path,
124+
}
125+
for result in rule_results
126+
]
127+
for rule_name, rule_results in self.non_compliant.items()
128+
},
129+
"warning": {
130+
rule_name: [
131+
{
132+
"check_id": result.check_id,
133+
"message": result.message,
134+
"path": result.path,
135+
}
136+
for result in rule_results
137+
]
138+
for rule_name, rule_results in self.warning.items()
139+
},
140+
"skipped": self.skipped,
141+
}
142+
113143
def display(self):
114144
"""Displays a table with compliance results."""
115145
if (

src/rpdk/guard_rail/utils/arg_handler.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def argument_validation(
5858
def setup_args(): # pylint: disable=C0116
5959
parser = argparse.ArgumentParser(description=__doc__)
6060

61-
parser.add_argument("--version", action="version", version="v0.1alpha")
61+
parser.add_argument("--version", action="version", version="v0.1alpha3")
6262

6363
parser.add_argument(
6464
"--schema",
@@ -86,6 +86,14 @@ def setup_args(): # pylint: disable=C0116
8686
help="Should specify schema for CFN compliance evaluation (path or plain value)",
8787
)
8888

89+
parser.add_argument(
90+
"--json",
91+
dest="json",
92+
action="store_true",
93+
default=False,
94+
help="Should output json format",
95+
)
96+
8997
parser.add_argument(
9098
"--rules",
9199
dest="rules",

tests/unit/test_cli.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@
6666
"--stateful",
6767
]
6868
),
69+
(
70+
[
71+
"--schema",
72+
"file://path1",
73+
"--json",
74+
]
75+
),
6976
],
7077
)
7178
def test_main_cli(

vscode-extension/.eslintrc.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"root": true,
3+
"parser": "@typescript-eslint/parser",
4+
"parserOptions": {
5+
"ecmaVersion": 2020,
6+
"sourceType": "module"
7+
},
8+
"plugins": [
9+
"@typescript-eslint"
10+
],
11+
"extends": [
12+
"eslint:recommended",
13+
"plugin:@typescript-eslint/recommended"
14+
],
15+
"rules": {
16+
"@typescript-eslint/no-explicit-any": "off",
17+
"@typescript-eslint/no-unused-vars": [
18+
"warn",
19+
{
20+
"argsIgnorePattern": "^_"
21+
}
22+
],
23+
"@typescript-eslint/no-var-requires": "off",
24+
"prefer-rest-params": "off",
25+
"no-console": "off"
26+
},
27+
"ignorePatterns": [
28+
"out",
29+
"dist",
30+
"node_modules",
31+
"**/*.d.ts"
32+
],
33+
"overrides": [
34+
{
35+
"files": [
36+
"test/**/*.ts"
37+
],
38+
"rules": {
39+
"@typescript-eslint/no-explicit-any": "off",
40+
"@typescript-eslint/no-unused-vars": "off",
41+
"@typescript-eslint/no-var-requires": "off",
42+
"prefer-rest-params": "off"
43+
}
44+
}
45+
]
46+
}

vscode-extension/.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
node_modules
2+
out
3+
*.vsix
4+
.vscode-test
5+
coverage
6+
.nyc_output
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Run Extension",
6+
"type": "extensionHost",
7+
"request": "launch",
8+
"args": [
9+
"--extensionDevelopmentPath=${workspaceFolder}"
10+
],
11+
"outFiles": [
12+
"${workspaceFolder}/out/**/*.js"
13+
],
14+
"preLaunchTask": "${defaultBuildTask}"
15+
}
16+
]
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"version": "2.0.0",
3+
"tasks": [
4+
{
5+
"type": "npm",
6+
"script": "watch",
7+
"problemMatcher": "$tsc-watch",
8+
"isBackground": true,
9+
"presentation": {
10+
"reveal": "never"
11+
},
12+
"group": {
13+
"kind": "build",
14+
"isDefault": true
15+
}
16+
}
17+
]
18+
}

vscode-extension/.vscodeignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.vscode/**
2+
.vscode-test/**
3+
src/**
4+
.gitignore
5+
tsconfig.json
6+
**/*.map
7+
**/*.ts

0 commit comments

Comments
 (0)