mirror of
https://github.com/RGBCube/nu_scripts
synced 2025-07-30 21:57:44 +00:00
Fix failing lints on source files (#1049)
This PR updates the toolkit testing to: * Determine whether to lint as a module or source file based on the presence of any `export ` line in the file. * Run `nu-check` on files before linting with `use <file>` or `source <file>` * Updates the environment variable to `TEST_METHOD` with options for `ide-check` or `import-or-source`. * Updates the default to `import-or-source` (was `ide-check`) to match CI * Removes environment variable from CI since this test method is now the default. With this in place we should have far fewer (false positive) failing CI runs.
This commit is contained in:
parent
446f06f34f
commit
c17dcc3855
2 changed files with 33 additions and 12 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -24,4 +24,4 @@ jobs:
|
|||
# nix STUB_IDE_CHECK when nushell/nushell#12208 fixed
|
||||
run: |
|
||||
use ${{ github.workspace }}/toolkit.nu *
|
||||
STUB_IDE_CHECK=true check pr --and-exit
|
||||
check pr --and-exit
|
||||
|
|
43
toolkit.nu
43
toolkit.nu
|
@ -66,22 +66,43 @@ def "with files" [
|
|||
}
|
||||
}
|
||||
|
||||
# Check the input file with nu --ide-check.
|
||||
export def "lint ide-check" []: path -> int {
|
||||
export def "lint check" []: path -> int {
|
||||
let file = $in
|
||||
let stub = $env.STUB_IDE_CHECK? | default false | into bool
|
||||
let test_methodology = $env.TEST_METHOD? | default "import-or-source"
|
||||
const current_path = (path self)
|
||||
let diagnostics = if $stub {
|
||||
do { nu --no-config-file --commands $"use '($file)'" }
|
||||
| complete
|
||||
| [[severity message]; [$in.exit_code $in.stderr]]
|
||||
| where severity != 0
|
||||
} else {
|
||||
nu --ide-check 10 $file
|
||||
|
||||
let diagnostics = match $test_methodology {
|
||||
ide-check => {
|
||||
nu --ide-check 10 $file
|
||||
| $"[($in)]"
|
||||
| from nuon
|
||||
| where type == diagnostic
|
||||
| select severity message
|
||||
}
|
||||
|
||||
import-or-source => {
|
||||
# If any line in the file starts with `export`, then
|
||||
# we assume it is a module. Otherwise, treat it as source
|
||||
let has_exports = (open $file | $in like '(?m)^export\s')
|
||||
if $has_exports {
|
||||
# treat as module
|
||||
if not (nu-check --as-module $file) {
|
||||
do { nu --no-config-file --commands $"use '($file)'" }
|
||||
| complete
|
||||
| [[severity message]; [$in.exit_code $in.stderr]]
|
||||
| where severity != 0
|
||||
}
|
||||
} else {
|
||||
if not (nu-check $file) {
|
||||
do { nu --no-config-file --commands $"source '($file)'" }
|
||||
| complete
|
||||
| [[severity message]; [$in.exit_code $in.stderr]]
|
||||
| where severity != 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_ => { error make { msg: "Invalid TEST_METHOD"}}
|
||||
}
|
||||
let error_count = $diagnostics | length
|
||||
if $error_count == 0 {
|
||||
|
@ -101,6 +122,6 @@ export def lint [
|
|||
--and-exit # Exit with error count
|
||||
]: [list<path> -> int, nothing -> int] {
|
||||
with files --full=$full --and-exit=$and_exit {
|
||||
par-each { lint ide-check }
|
||||
par-each { lint check }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue