summaryrefslogtreecommitdiff
path: root/caddyconfig/caddyfile/lexer.go
diff options
context:
space:
mode:
authorWeidiDeng <weidi_deng@icloud.com>2023-02-17 08:08:36 +0800
committerGitHub <noreply@github.com>2023-02-16 17:08:36 -0700
commit8bc05e598da0068358a2876c45f92f2c77455341 (patch)
tree4110cd23fd0ddd0374bb909c1c4c53e0c9692176 /caddyconfig/caddyfile/lexer.go
parentbf54892a73373637901c13e018b20cfac15878b4 (diff)
caddyfile: Implement variadics for import args placeholders (#5249)
* implement variadic placeholders imported snippets reflect actual lines in file * add import directive line number for imported snippets add tests for parsing * add realfile field to help debug import cycle detection. * use file field to reflect import chain * Switch syntax, deprecate old syntax, refactoring - Moved the import args handling to a separate file - Using {args[0:1]} syntax now - Deprecate {args.*} syntax - Use a replacer map for better control over the parsing - Add plenty of warnings when invalid placeholders are detected - Renaming variables, cleanup comments for readability - More tests to cover edgecases I could think of - Minor cleanup to snippet tracking in tokens, drop a redundant boolean field in tokens --------- Co-authored-by: Francis Lavoie <lavofr@gmail.com>
Diffstat (limited to 'caddyconfig/caddyfile/lexer.go')
-rw-r--r--caddyconfig/caddyfile/lexer.go19
1 files changed, 18 insertions, 1 deletions
diff --git a/caddyconfig/caddyfile/lexer.go b/caddyconfig/caddyfile/lexer.go
index 5605a6a..09b04c1 100644
--- a/caddyconfig/caddyfile/lexer.go
+++ b/caddyconfig/caddyfile/lexer.go
@@ -36,14 +36,31 @@ type (
// Token represents a single parsable unit.
Token struct {
File string
+ origFile string
Line int
Text string
wasQuoted rune // enclosing quote character, if any
- inSnippet bool
snippetName string
}
)
+// originalFile gets original filename before import modification.
+func (t Token) originalFile() string {
+ if t.origFile != "" {
+ return t.origFile
+ }
+ return t.File
+}
+
+// updateFile updates the token's source filename for error display
+// and remembers the original filename. Used during "import" processing.
+func (t *Token) updateFile(file string) {
+ if t.origFile == "" {
+ t.origFile = t.File
+ }
+ t.File = file
+}
+
// load prepares the lexer to scan an input for tokens.
// It discards any leading byte order mark.
func (l *lexer) load(input io.Reader) error {