mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-02-15 08:41:16 -05:00
Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 1.4.2 to 1.5.0. - [Release notes](https://github.com/open-policy-agent/opa/releases) - [Changelog](https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-policy-agent/opa/compare/v1.4.2...v1.5.0) --- updated-dependencies: - dependency-name: github.com/open-policy-agent/opa dependency-version: 1.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package lexer
|
|
|
|
import (
|
|
"math"
|
|
"strings"
|
|
)
|
|
|
|
// blockStringValue produces the value of a block string from its parsed raw value, similar to
|
|
// Coffeescript's block string, Python's docstring trim or Ruby's strip_heredoc.
|
|
//
|
|
// This implements the GraphQL spec's BlockStringValue() static algorithm.
|
|
func blockStringValue(raw string) string {
|
|
lines := strings.Split(raw, "\n")
|
|
|
|
commonIndent := math.MaxInt32
|
|
for _, line := range lines {
|
|
indent := leadingWhitespace(line)
|
|
if indent < len(line) && indent < commonIndent {
|
|
commonIndent = indent
|
|
if commonIndent == 0 {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
if commonIndent != math.MaxInt32 && len(lines) > 0 {
|
|
for i := 1; i < len(lines); i++ {
|
|
if len(lines[i]) < commonIndent {
|
|
lines[i] = ""
|
|
} else {
|
|
lines[i] = lines[i][commonIndent:]
|
|
}
|
|
}
|
|
}
|
|
|
|
start := 0
|
|
end := len(lines)
|
|
|
|
for start < end && leadingWhitespace(lines[start]) == math.MaxInt32 {
|
|
start++
|
|
}
|
|
|
|
for start < end && leadingWhitespace(lines[end-1]) == math.MaxInt32 {
|
|
end--
|
|
}
|
|
|
|
return strings.Join(lines[start:end], "\n")
|
|
}
|
|
|
|
func leadingWhitespace(str string) int {
|
|
for i, r := range str {
|
|
if r != ' ' && r != '\t' {
|
|
return i
|
|
}
|
|
}
|
|
// this line is made up entirely of whitespace, its leading whitespace doesnt count.
|
|
return math.MaxInt32
|
|
}
|