cli/connhelper/internal/syntax/parser.go:31:2: Duplicate words (the) found (dupword)
// Note that it shares some features with Bash, due to the the shared
^
cli/connhelper/internal/syntax/quote.go:48:1: cyclomatic complexity 35 of func `Quote` is high (> 16) (gocyclo)
func Quote(s string, lang LangVariant) (string, error) {
^
cli/connhelper/internal/syntax/quote.go:103:3: shadow: declaration of "offs" shadows declaration at line 56 (govet)
offs := 0
^
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
96 lines
2.4 KiB
Go
96 lines
2.4 KiB
Go
// Copyright (c) 2016, Daniel Martí <mvdan@mvdan.cc>
|
|
// See LICENSE for licensing information
|
|
|
|
package syntax
|
|
|
|
// LangVariant describes a shell language variant to use when tokenizing and
|
|
// parsing shell code. The zero value is [LangBash].
|
|
type LangVariant int
|
|
|
|
const (
|
|
// LangBash corresponds to the GNU Bash language, as described in its
|
|
// manual at https://www.gnu.org/software/bash/manual/bash.html.
|
|
//
|
|
// We currently follow Bash version 5.2.
|
|
//
|
|
// Its string representation is "bash".
|
|
LangBash LangVariant = iota
|
|
|
|
// LangPOSIX corresponds to the POSIX Shell language, as described at
|
|
// https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html.
|
|
//
|
|
// Its string representation is "posix" or "sh".
|
|
LangPOSIX
|
|
|
|
// LangMirBSDKorn corresponds to the MirBSD Korn Shell, also known as
|
|
// mksh, as described at http://www.mirbsd.org/htman/i386/man1/mksh.htm.
|
|
// Note that it shares some features with Bash, due to the shared
|
|
// ancestry that is ksh.
|
|
//
|
|
// We currently follow mksh version 59.
|
|
//
|
|
// Its string representation is "mksh".
|
|
LangMirBSDKorn
|
|
|
|
// LangBats corresponds to the Bash Automated Testing System language,
|
|
// as described at https://github.com/bats-core/bats-core. Note that
|
|
// it's just a small extension of the Bash language.
|
|
//
|
|
// Its string representation is "bats".
|
|
LangBats
|
|
|
|
// LangAuto corresponds to automatic language detection,
|
|
// commonly used by end-user applications like shfmt,
|
|
// which can guess a file's language variant given its filename or shebang.
|
|
//
|
|
// At this time, [Variant] does not support LangAuto.
|
|
LangAuto
|
|
)
|
|
|
|
func (l LangVariant) String() string {
|
|
switch l {
|
|
case LangBash:
|
|
return "bash"
|
|
case LangPOSIX:
|
|
return "posix"
|
|
case LangMirBSDKorn:
|
|
return "mksh"
|
|
case LangBats:
|
|
return "bats"
|
|
case LangAuto:
|
|
return "auto"
|
|
}
|
|
return "unknown shell language variant"
|
|
}
|
|
|
|
// IsKeyword returns true if the given word is part of the language keywords.
|
|
func IsKeyword(word string) bool {
|
|
// This list has been copied from the bash 5.1 source code, file y.tab.c +4460
|
|
switch word {
|
|
case
|
|
"!",
|
|
"[[", // only if COND_COMMAND is defined
|
|
"]]", // only if COND_COMMAND is defined
|
|
"case",
|
|
"coproc", // only if COPROCESS_SUPPORT is defined
|
|
"do",
|
|
"done",
|
|
"else",
|
|
"esac",
|
|
"fi",
|
|
"for",
|
|
"function",
|
|
"if",
|
|
"in",
|
|
"select", // only if SELECT_COMMAND is defined
|
|
"then",
|
|
"time", // only if COMMAND_TIMING is defined
|
|
"until",
|
|
"while",
|
|
"{",
|
|
"}":
|
|
return true
|
|
}
|
|
return false
|
|
}
|