mirror of
https://github.com/Myzel394/config-lsp.git
synced 2025-06-18 23:15:26 +02:00
feat(ssh_config): Improve match file so that it works with single criterias
This commit is contained in:
parent
a4a8e8888f
commit
b1a5898f6c
@ -52,4 +52,3 @@ func checkIsDependent(
|
|||||||
|
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,5 +50,3 @@ User root
|
|||||||
t.Fatalf("Expected 1 error, got %v", errors)
|
t.Fatalf("Expected 1 error, got %v", errors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ func analyzeQuotesAreValid(
|
|||||||
func checkIsUsingDoubleQuotes(
|
func checkIsUsingDoubleQuotes(
|
||||||
value commonparser.ParsedString,
|
value commonparser.ParsedString,
|
||||||
valueRange common.LocationRange,
|
valueRange common.LocationRange,
|
||||||
) []common.LSPError {
|
) []common.LSPError {
|
||||||
singleQuotePosition := strings.Index(value.Raw, "'")
|
singleQuotePosition := strings.Index(value.Raw, "'")
|
||||||
|
|
||||||
if singleQuotePosition != -1 {
|
if singleQuotePosition != -1 {
|
||||||
|
@ -176,9 +176,9 @@ func (s *sshParserListener) ExitEntry(ctx *parser.EntryContext) {
|
|||||||
|
|
||||||
hostBlock := &SSHHostBlock{
|
hostBlock := &SSHHostBlock{
|
||||||
LocationRange: location,
|
LocationRange: location,
|
||||||
HostOption: s.sshContext.currentOption,
|
HostOption: s.sshContext.currentOption,
|
||||||
HostValue: host,
|
HostValue: host,
|
||||||
Options: treemap.NewWith(gods.UInt32Comparator),
|
Options: treemap.NewWith(gods.UInt32Comparator),
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Config.Options.Put(
|
s.Config.Options.Put(
|
||||||
|
@ -35,4 +35,3 @@ func (d SSHDocument) DoesOptionExist(
|
|||||||
) bool {
|
) bool {
|
||||||
return d.FindOptionByNameAndBlock(name, block) != nil
|
return d.FindOptionByNameAndBlock(name, block) != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1 @@
|
|||||||
package fields
|
package fields
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,15 +2,15 @@ package fields
|
|||||||
|
|
||||||
var AllowedDuplicateOptions = map[string]struct{}{
|
var AllowedDuplicateOptions = map[string]struct{}{
|
||||||
"CertificateFile": {},
|
"CertificateFile": {},
|
||||||
"Match": {},
|
"Match": {},
|
||||||
"Host": {},
|
"Host": {},
|
||||||
}
|
}
|
||||||
|
|
||||||
// A list of
|
// A list of
|
||||||
// <Option name> -> <List of fields that need to be present for the option>
|
// <Option name> -> <List of fields that need to be present for the option>
|
||||||
var DependentFields = map[string][]string{
|
var DependentFields = map[string][]string{
|
||||||
"CanonicalDomains": {"CanonicalizeHostname"},
|
"CanonicalDomains": {"CanonicalizeHostname"},
|
||||||
"ControlPersist": {"ControlMaster"},
|
"ControlPersist": {"ControlMaster"},
|
||||||
}
|
}
|
||||||
|
|
||||||
var HostDisallowedOptions = map[string]struct{}{
|
var HostDisallowedOptions = map[string]struct{}{
|
||||||
@ -18,4 +18,3 @@ var HostDisallowedOptions = map[string]struct{}{
|
|||||||
}
|
}
|
||||||
|
|
||||||
var GlobalDisallowedOptions = map[string]struct{}{}
|
var GlobalDisallowedOptions = map[string]struct{}{}
|
||||||
|
|
||||||
|
123
handlers/ssh_config/handlers/completions_match.go
Normal file
123
handlers/ssh_config/handlers/completions_match.go
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"config-lsp/common"
|
||||||
|
sshconfig "config-lsp/handlers/ssh_config"
|
||||||
|
matchparser "config-lsp/handlers/ssh_config/match-parser"
|
||||||
|
"config-lsp/handlers/sshd_config/fields"
|
||||||
|
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getMatchCompletions(
|
||||||
|
d *sshconfig.SSHDocument,
|
||||||
|
cursor common.CursorPosition,
|
||||||
|
match *matchparser.Match,
|
||||||
|
) ([]protocol.CompletionItem, error) {
|
||||||
|
if match == nil || len(match.Entries) == 0 {
|
||||||
|
completions := getMatchCriteriaCompletions()
|
||||||
|
completions = append(completions, getMatchAllKeywordCompletion())
|
||||||
|
|
||||||
|
return completions, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
entry := match.GetEntryAtPosition(cursor)
|
||||||
|
|
||||||
|
if entry == nil || entry.Criteria.ContainsPosition(cursor) {
|
||||||
|
return getMatchCriteriaCompletions(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return getMatchValueCompletions(entry, cursor), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMatchCriteriaCompletions() []protocol.CompletionItem {
|
||||||
|
kind := protocol.CompletionItemKindEnum
|
||||||
|
|
||||||
|
return []protocol.CompletionItem{
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeCanonical),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeFinal),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeExec),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeLocalNetwork),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeHost),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeOriginalHost),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeTagged),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeUser),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Label: string(matchparser.MatchCriteriaTypeLocalUser),
|
||||||
|
Kind: &kind,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMatchAllKeywordCompletion() protocol.CompletionItem {
|
||||||
|
kind := protocol.CompletionItemKindKeyword
|
||||||
|
|
||||||
|
return protocol.CompletionItem{
|
||||||
|
Label: "all",
|
||||||
|
Kind: &kind,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMatchValueCompletions(
|
||||||
|
entry *matchparser.MatchEntry,
|
||||||
|
cursor common.CursorPosition,
|
||||||
|
) []protocol.CompletionItem {
|
||||||
|
value := entry.GetValueAtPosition(cursor)
|
||||||
|
|
||||||
|
var line string
|
||||||
|
var relativeCursor uint32
|
||||||
|
|
||||||
|
if value != nil {
|
||||||
|
line = value.Value.Raw
|
||||||
|
relativeCursor = common.DeprecatedImprovedCursorToIndex(
|
||||||
|
cursor,
|
||||||
|
line,
|
||||||
|
value.Start.Character,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
line = ""
|
||||||
|
relativeCursor = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
switch entry.Criteria.Type {
|
||||||
|
case matchparser.MatchCriteriaTypeUser:
|
||||||
|
return fields.MatchUserField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeGroup:
|
||||||
|
return fields.MatchGroupField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeHost:
|
||||||
|
return fields.MatchHostField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeAddress:
|
||||||
|
return fields.MatchAddressField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeLocalAddress:
|
||||||
|
return fields.MatchLocalAddressField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeLocalPort:
|
||||||
|
return fields.MatchLocalPortField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
case matchparser.MatchCriteriaTypeRDomain:
|
||||||
|
return fields.MatchRDomainField.DeprecatedFetchCompletions(line, relativeCursor)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@ -13,4 +13,3 @@ type HostValue struct {
|
|||||||
common.LocationRange
|
common.LocationRange
|
||||||
Value commonparser.ParsedString
|
Value commonparser.ParsedString
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ package hostparser
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"config-lsp/common"
|
"config-lsp/common"
|
||||||
"regexp"
|
|
||||||
commonparser "config-lsp/common/parser"
|
commonparser "config-lsp/common/parser"
|
||||||
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewHost() *Host {
|
func NewHost() *Host {
|
||||||
@ -36,11 +36,11 @@ func (h *Host) Parse(
|
|||||||
host := HostValue{
|
host := HostValue{
|
||||||
LocationRange: common.LocationRange{
|
LocationRange: common.LocationRange{
|
||||||
Start: common.Location{
|
Start: common.Location{
|
||||||
Line: line,
|
Line: line,
|
||||||
Character: startCharacter + uint32(startIndex),
|
Character: startCharacter + uint32(startIndex),
|
||||||
},
|
},
|
||||||
End: common.Location{
|
End: common.Location{
|
||||||
Line: line,
|
Line: line,
|
||||||
Character: startCharacter + uint32(endIndex),
|
Character: startCharacter + uint32(endIndex),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"config-lsp/handlers/ssh_config/ast"
|
"config-lsp/handlers/ssh_config/ast"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
type ValidPath string
|
type ValidPath string
|
||||||
|
|
||||||
func (v ValidPath) AsURI() string {
|
func (v ValidPath) AsURI() string {
|
||||||
@ -21,9 +20,9 @@ type SSHIndexIncludeValue struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SSHIndexIncludeLine struct {
|
type SSHIndexIncludeLine struct {
|
||||||
Values []*SSHIndexIncludeValue
|
Values []*SSHIndexIncludeValue
|
||||||
Option *ast.SSHOption
|
Option *ast.SSHOption
|
||||||
Block ast.SSHBlock
|
Block ast.SSHBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
type SSHIndexes struct {
|
type SSHIndexes struct {
|
||||||
@ -33,4 +32,3 @@ type SSHIndexes struct {
|
|||||||
|
|
||||||
BlockRanges map[uint32]ast.SSHBlock
|
BlockRanges map[uint32]ast.SSHBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ var whitespacePattern = regexp.MustCompile(`\S+`)
|
|||||||
func NewSSHIndexes() *SSHIndexes {
|
func NewSSHIndexes() *SSHIndexes {
|
||||||
return &SSHIndexes{
|
return &SSHIndexes{
|
||||||
AllOptionsPerName: make(map[string](map[ast.SSHBlock]([]*ast.SSHOption)), 0),
|
AllOptionsPerName: make(map[string](map[ast.SSHBlock]([]*ast.SSHOption)), 0),
|
||||||
Includes: make([]*SSHIndexIncludeLine, 0),
|
Includes: make([]*SSHIndexIncludeLine, 0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,9 +78,9 @@ func CreateIndexes(config ast.SSHConfig) (*SSHIndexes, []common.LSPError) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
indexes.Includes[includeOption.Start.Line] = &SSHIndexIncludeLine{
|
indexes.Includes[includeOption.Start.Line] = &SSHIndexIncludeLine{
|
||||||
Values: paths,
|
Values: paths,
|
||||||
Option: includeOption,
|
Option: includeOption,
|
||||||
Block: block,
|
Block: block,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Host nas01
|
|||||||
opts[firstMatchBlock][0].OptionValue.Value.Value == "/nfs/shared/users/nixcraft/keys/server1/id_rsa") {
|
opts[firstMatchBlock][0].OptionValue.Value.Value == "/nfs/shared/users/nixcraft/keys/server1/id_rsa") {
|
||||||
t.Errorf("Expected 3 IdentityFile options, but got %v", opts)
|
t.Errorf("Expected 3 IdentityFile options, but got %v", opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add check for options that require other options to be present
|
// TODO: Add check for options that require other options to be present
|
||||||
|
@ -3,8 +3,8 @@ package lsp
|
|||||||
import (
|
import (
|
||||||
"config-lsp/common"
|
"config-lsp/common"
|
||||||
"config-lsp/handlers/ssh_config"
|
"config-lsp/handlers/ssh_config"
|
||||||
"config-lsp/handlers/ssh_config/ast"
|
|
||||||
"config-lsp/handlers/ssh_config/analyzer"
|
"config-lsp/handlers/ssh_config/analyzer"
|
||||||
|
"config-lsp/handlers/ssh_config/ast"
|
||||||
"config-lsp/utils"
|
"config-lsp/utils"
|
||||||
|
|
||||||
"github.com/tliron/glsp"
|
"github.com/tliron/glsp"
|
||||||
|
@ -5,17 +5,21 @@ root
|
|||||||
;
|
;
|
||||||
|
|
||||||
matchEntry
|
matchEntry
|
||||||
: criteria separator? values?
|
: entrySingle | entryWithValue
|
||||||
|
;
|
||||||
|
|
||||||
|
entrySingle
|
||||||
|
: criteriaSingle
|
||||||
|
;
|
||||||
|
|
||||||
|
entryWithValue
|
||||||
|
: criteriaWithValue separator? values?
|
||||||
;
|
;
|
||||||
|
|
||||||
separator
|
separator
|
||||||
: WHITESPACE
|
: WHITESPACE
|
||||||
;
|
;
|
||||||
|
|
||||||
criteria
|
|
||||||
: string
|
|
||||||
;
|
|
||||||
|
|
||||||
values
|
values
|
||||||
: value? (COMMA value?)*
|
: value? (COMMA value?)*
|
||||||
;
|
;
|
||||||
@ -24,6 +28,14 @@ value
|
|||||||
: string
|
: string
|
||||||
;
|
;
|
||||||
|
|
||||||
|
criteriaSingle
|
||||||
|
: QUOTE? (ALL | CANONICAL | FINAL) QUOTE?
|
||||||
|
;
|
||||||
|
|
||||||
|
criteriaWithValue
|
||||||
|
: QUOTE? (EXEC | LOCALNETWORK | HOST | ORIGINALHOST | TAGGED | USER | LOCALUSER) QUOTE?
|
||||||
|
;
|
||||||
|
|
||||||
string
|
string
|
||||||
: (QUOTED_STRING | STRING)
|
: (QUOTED_STRING | STRING)
|
||||||
;
|
;
|
||||||
@ -32,6 +44,46 @@ COMMA
|
|||||||
: ','
|
: ','
|
||||||
;
|
;
|
||||||
|
|
||||||
|
ALL
|
||||||
|
: ('a' | 'A') ('l' | 'L') ('l' | 'L')
|
||||||
|
;
|
||||||
|
|
||||||
|
CANONICAL
|
||||||
|
: ('c' | 'C') ('a' | 'A') ('n' | 'N') ('o' | 'O') ('n' | 'N') ('i' | 'I') ('c' | 'C') ('a' | 'A') ('l' | 'L')
|
||||||
|
;
|
||||||
|
|
||||||
|
FINAL
|
||||||
|
: ('f' | 'F') ('i' | 'I') ('n' | 'N') ('a' | 'A') ('l' | 'L')
|
||||||
|
;
|
||||||
|
|
||||||
|
EXEC
|
||||||
|
: ('e' | 'E') ('x' | 'X') ('e' | 'E') ('c' | 'C')
|
||||||
|
;
|
||||||
|
|
||||||
|
LOCALNETWORK
|
||||||
|
: ('l' | 'L') ('o' | 'O') ('c' | 'C') ('a' | 'A') ('l' | 'L') ('n' | 'N') ('e' | 'E') ('t' | 'T') ('w' | 'W') ('o' | 'O') ('r' | 'R') ('k' | 'K')
|
||||||
|
;
|
||||||
|
|
||||||
|
HOST
|
||||||
|
: ('h' | 'H') ('o' | 'O') ('s' | 'S') ('t' | 'T')
|
||||||
|
;
|
||||||
|
|
||||||
|
ORIGINALHOST
|
||||||
|
: ('o' | 'O') ('r' | 'R') ('i' | 'I') ('g' | 'G') ('i' | 'I') ('n' | 'N') ('a' | 'A') ('l' | 'L') ('h' | 'H') ('o' | 'O') ('s' | 'S') ('t' | 'T')
|
||||||
|
;
|
||||||
|
|
||||||
|
TAGGED
|
||||||
|
: ('t' | 'T') ('a' | 'A') ('g' | 'G') ('g' | 'G') ('e' | 'E') ('d' | 'D')
|
||||||
|
;
|
||||||
|
|
||||||
|
USER
|
||||||
|
: ('u' | 'U') ('s' | 'S') ('e' | 'E') ('r' | 'R')
|
||||||
|
;
|
||||||
|
|
||||||
|
LOCALUSER
|
||||||
|
: ('l' | 'L') ('o' | 'O') ('c' | 'C') ('a' | 'A') ('l' | 'L') ('u' | 'U') ('s' | 'S') ('e' | 'E') ('r' | 'R')
|
||||||
|
;
|
||||||
|
|
||||||
STRING
|
STRING
|
||||||
: ~(' ' | '\t' | '\r' | '\n' | '#' | ',')+
|
: ~(' ' | '\t' | '\r' | '\n' | '#' | ',')+
|
||||||
;
|
;
|
||||||
@ -41,5 +93,9 @@ WHITESPACE
|
|||||||
;
|
;
|
||||||
|
|
||||||
QUOTED_STRING
|
QUOTED_STRING
|
||||||
: '"' WHITESPACE? (STRING WHITESPACE)* STRING? ('"')?
|
: QUOTE WHITESPACE? (STRING WHITESPACE)* STRING? QUOTE?
|
||||||
|
;
|
||||||
|
|
||||||
|
QUOTE
|
||||||
|
: '"'
|
||||||
;
|
;
|
||||||
|
@ -62,25 +62,13 @@ func (s *matchParserListener) ExitMatchEntry(ctx *parser.MatchEntryContext) {
|
|||||||
s.matchContext.currentEntry = nil
|
s.matchContext.currentEntry = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var availableCriteria = map[string]MatchCriteriaType{
|
func (s *matchParserListener) EnterCriteriaSingle(ctx *parser.CriteriaSingleContext) {
|
||||||
string(MatchCriteriaTypeCanonical): MatchCriteriaTypeCanonical,
|
|
||||||
string(MatchCriteriaTypeFinal): MatchCriteriaTypeFinal,
|
|
||||||
string(MatchCriteriaTypeExec): MatchCriteriaTypeExec,
|
|
||||||
string(MatchCriteriaTypeLocalNetwork): MatchCriteriaTypeLocalNetwork,
|
|
||||||
string(MatchCriteriaTypeHost): MatchCriteriaTypeHost,
|
|
||||||
string(MatchCriteriaTypeOriginalHost): MatchCriteriaTypeOriginalHost,
|
|
||||||
string(MatchCriteriaTypeTagged): MatchCriteriaTypeTagged,
|
|
||||||
string(MatchCriteriaTypeUser): MatchCriteriaTypeUser,
|
|
||||||
string(MatchCriteriaTypeLocalUser): MatchCriteriaTypeLocalUser,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *matchParserListener) EnterCriteria(ctx *parser.CriteriaContext) {
|
|
||||||
location := common.CharacterRangeFromCtx(ctx.BaseParserRuleContext).ShiftHorizontal(s.matchContext.startCharacter)
|
location := common.CharacterRangeFromCtx(ctx.BaseParserRuleContext).ShiftHorizontal(s.matchContext.startCharacter)
|
||||||
location.ChangeBothLines(s.matchContext.line)
|
location.ChangeBothLines(s.matchContext.line)
|
||||||
|
|
||||||
value := commonparser.ParseRawString(ctx.GetText(), commonparser.FullFeatures)
|
value := commonparser.ParseRawString(ctx.GetText(), commonparser.FullFeatures)
|
||||||
|
|
||||||
criteria, found := availableCriteria[value.Value]
|
criteria, found := availableCriteria[strings.ToLower(value.Value)]
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
s.Errors = append(s.Errors, common.LSPError{
|
s.Errors = append(s.Errors, common.LSPError{
|
||||||
@ -97,6 +85,42 @@ func (s *matchParserListener) EnterCriteria(ctx *parser.CriteriaContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *matchParserListener) EnterCriteriaWithValue(ctx *parser.CriteriaWithValueContext) {
|
||||||
|
location := common.CharacterRangeFromCtx(ctx.BaseParserRuleContext).ShiftHorizontal(s.matchContext.startCharacter)
|
||||||
|
location.ChangeBothLines(s.matchContext.line)
|
||||||
|
|
||||||
|
value := commonparser.ParseRawString(ctx.GetText(), commonparser.FullFeatures)
|
||||||
|
|
||||||
|
criteria, found := availableCriteria[strings.ToLower(value.Value)]
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
s.Errors = append(s.Errors, common.LSPError{
|
||||||
|
Range: location,
|
||||||
|
Err: errors.New(fmt.Sprintf("Unknown criteria: %s; It must be one of: %s", ctx.GetText(), strings.Join(utils.KeysOfMap(availableCriteria), ", "))),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.matchContext.currentEntry.Criteria = MatchCriteria{
|
||||||
|
LocationRange: location,
|
||||||
|
Type: criteria,
|
||||||
|
Value: value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var availableCriteria = map[string]MatchCriteriaType{
|
||||||
|
string(MatchCriteriaTypeAll): MatchCriteriaTypeAll,
|
||||||
|
string(MatchCriteriaTypeCanonical): MatchCriteriaTypeCanonical,
|
||||||
|
string(MatchCriteriaTypeFinal): MatchCriteriaTypeFinal,
|
||||||
|
string(MatchCriteriaTypeExec): MatchCriteriaTypeExec,
|
||||||
|
string(MatchCriteriaTypeLocalNetwork): MatchCriteriaTypeLocalNetwork,
|
||||||
|
string(MatchCriteriaTypeHost): MatchCriteriaTypeHost,
|
||||||
|
string(MatchCriteriaTypeOriginalHost): MatchCriteriaTypeOriginalHost,
|
||||||
|
string(MatchCriteriaTypeTagged): MatchCriteriaTypeTagged,
|
||||||
|
string(MatchCriteriaTypeUser): MatchCriteriaTypeUser,
|
||||||
|
string(MatchCriteriaTypeLocalUser): MatchCriteriaTypeLocalUser,
|
||||||
|
}
|
||||||
|
|
||||||
func (s *matchParserListener) EnterSeparator(ctx *parser.SeparatorContext) {
|
func (s *matchParserListener) EnterSeparator(ctx *parser.SeparatorContext) {
|
||||||
location := common.CharacterRangeFromCtx(ctx.BaseParserRuleContext).ShiftHorizontal(s.matchContext.startCharacter)
|
location := common.CharacterRangeFromCtx(ctx.BaseParserRuleContext).ShiftHorizontal(s.matchContext.startCharacter)
|
||||||
location.ChangeBothLines(s.matchContext.line)
|
location.ChangeBothLines(s.matchContext.line)
|
||||||
|
@ -12,6 +12,7 @@ type Match struct {
|
|||||||
type MatchCriteriaType string
|
type MatchCriteriaType string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
MatchCriteriaTypeAll MatchCriteriaType = "all"
|
||||||
MatchCriteriaTypeCanonical MatchCriteriaType = "canonical"
|
MatchCriteriaTypeCanonical MatchCriteriaType = "canonical"
|
||||||
MatchCriteriaTypeFinal MatchCriteriaType = "final"
|
MatchCriteriaTypeFinal MatchCriteriaType = "final"
|
||||||
MatchCriteriaTypeExec MatchCriteriaType = "exec"
|
MatchCriteriaTypeExec MatchCriteriaType = "exec"
|
||||||
|
@ -4,23 +4,48 @@ null
|
|||||||
null
|
null
|
||||||
null
|
null
|
||||||
null
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
'"'
|
||||||
|
|
||||||
token symbolic names:
|
token symbolic names:
|
||||||
null
|
null
|
||||||
COMMA
|
COMMA
|
||||||
|
ALL
|
||||||
|
CANONICAL
|
||||||
|
FINAL
|
||||||
|
EXEC
|
||||||
|
LOCALNETWORK
|
||||||
|
HOST
|
||||||
|
ORIGINALHOST
|
||||||
|
TAGGED
|
||||||
|
USER
|
||||||
|
LOCALUSER
|
||||||
STRING
|
STRING
|
||||||
WHITESPACE
|
WHITESPACE
|
||||||
QUOTED_STRING
|
QUOTED_STRING
|
||||||
|
QUOTE
|
||||||
|
|
||||||
rule names:
|
rule names:
|
||||||
root
|
root
|
||||||
matchEntry
|
matchEntry
|
||||||
|
entrySingle
|
||||||
|
entryWithValue
|
||||||
separator
|
separator
|
||||||
criteria
|
|
||||||
values
|
values
|
||||||
value
|
value
|
||||||
|
criteriaSingle
|
||||||
|
criteriaWithValue
|
||||||
string
|
string
|
||||||
|
|
||||||
|
|
||||||
atn:
|
atn:
|
||||||
[4, 1, 4, 56, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 3, 0, 16, 8, 0, 1, 0, 1, 0, 3, 0, 20, 8, 0, 5, 0, 22, 8, 0, 10, 0, 12, 0, 25, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 31, 8, 1, 1, 1, 3, 1, 34, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 3, 4, 41, 8, 4, 1, 4, 1, 4, 3, 4, 45, 8, 4, 5, 4, 47, 8, 4, 10, 4, 12, 4, 50, 9, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 0, 0, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 2, 0, 2, 2, 4, 4, 56, 0, 15, 1, 0, 0, 0, 2, 28, 1, 0, 0, 0, 4, 35, 1, 0, 0, 0, 6, 37, 1, 0, 0, 0, 8, 40, 1, 0, 0, 0, 10, 51, 1, 0, 0, 0, 12, 53, 1, 0, 0, 0, 14, 16, 3, 2, 1, 0, 15, 14, 1, 0, 0, 0, 15, 16, 1, 0, 0, 0, 16, 23, 1, 0, 0, 0, 17, 19, 5, 3, 0, 0, 18, 20, 3, 2, 1, 0, 19, 18, 1, 0, 0, 0, 19, 20, 1, 0, 0, 0, 20, 22, 1, 0, 0, 0, 21, 17, 1, 0, 0, 0, 22, 25, 1, 0, 0, 0, 23, 21, 1, 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 26, 1, 0, 0, 0, 25, 23, 1, 0, 0, 0, 26, 27, 5, 0, 0, 1, 27, 1, 1, 0, 0, 0, 28, 30, 3, 6, 3, 0, 29, 31, 3, 4, 2, 0, 30, 29, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 33, 1, 0, 0, 0, 32, 34, 3, 8, 4, 0, 33, 32, 1, 0, 0, 0, 33, 34, 1, 0, 0, 0, 34, 3, 1, 0, 0, 0, 35, 36, 5, 3, 0, 0, 36, 5, 1, 0, 0, 0, 37, 38, 3, 12, 6, 0, 38, 7, 1, 0, 0, 0, 39, 41, 3, 10, 5, 0, 40, 39, 1, 0, 0, 0, 40, 41, 1, 0, 0, 0, 41, 48, 1, 0, 0, 0, 42, 44, 5, 1, 0, 0, 43, 45, 3, 10, 5, 0, 44, 43, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 47, 1, 0, 0, 0, 46, 42, 1, 0, 0, 0, 47, 50, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 48, 49, 1, 0, 0, 0, 49, 9, 1, 0, 0, 0, 50, 48, 1, 0, 0, 0, 51, 52, 3, 12, 6, 0, 52, 11, 1, 0, 0, 0, 53, 54, 7, 0, 0, 0, 54, 13, 1, 0, 0, 0, 8, 15, 19, 23, 30, 33, 40, 44, 48]
|
[4, 1, 15, 80, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 3, 0, 22, 8, 0, 1, 0, 1, 0, 3, 0, 26, 8, 0, 5, 0, 28, 8, 0, 10, 0, 12, 0, 31, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 37, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 3, 3, 43, 8, 3, 1, 3, 3, 3, 46, 8, 3, 1, 4, 1, 4, 1, 5, 3, 5, 51, 8, 5, 1, 5, 1, 5, 3, 5, 55, 8, 5, 5, 5, 57, 8, 5, 10, 5, 12, 5, 60, 9, 5, 1, 6, 1, 6, 1, 7, 3, 7, 65, 8, 7, 1, 7, 1, 7, 3, 7, 69, 8, 7, 1, 8, 3, 8, 72, 8, 8, 1, 8, 1, 8, 3, 8, 76, 8, 8, 1, 9, 1, 9, 1, 9, 0, 0, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 3, 1, 0, 2, 4, 1, 0, 5, 11, 2, 0, 12, 12, 14, 14, 82, 0, 21, 1, 0, 0, 0, 2, 36, 1, 0, 0, 0, 4, 38, 1, 0, 0, 0, 6, 40, 1, 0, 0, 0, 8, 47, 1, 0, 0, 0, 10, 50, 1, 0, 0, 0, 12, 61, 1, 0, 0, 0, 14, 64, 1, 0, 0, 0, 16, 71, 1, 0, 0, 0, 18, 77, 1, 0, 0, 0, 20, 22, 3, 2, 1, 0, 21, 20, 1, 0, 0, 0, 21, 22, 1, 0, 0, 0, 22, 29, 1, 0, 0, 0, 23, 25, 5, 13, 0, 0, 24, 26, 3, 2, 1, 0, 25, 24, 1, 0, 0, 0, 25, 26, 1, 0, 0, 0, 26, 28, 1, 0, 0, 0, 27, 23, 1, 0, 0, 0, 28, 31, 1, 0, 0, 0, 29, 27, 1, 0, 0, 0, 29, 30, 1, 0, 0, 0, 30, 32, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 32, 33, 5, 0, 0, 1, 33, 1, 1, 0, 0, 0, 34, 37, 3, 4, 2, 0, 35, 37, 3, 6, 3, 0, 36, 34, 1, 0, 0, 0, 36, 35, 1, 0, 0, 0, 37, 3, 1, 0, 0, 0, 38, 39, 3, 14, 7, 0, 39, 5, 1, 0, 0, 0, 40, 42, 3, 16, 8, 0, 41, 43, 3, 8, 4, 0, 42, 41, 1, 0, 0, 0, 42, 43, 1, 0, 0, 0, 43, 45, 1, 0, 0, 0, 44, 46, 3, 10, 5, 0, 45, 44, 1, 0, 0, 0, 45, 46, 1, 0, 0, 0, 46, 7, 1, 0, 0, 0, 47, 48, 5, 13, 0, 0, 48, 9, 1, 0, 0, 0, 49, 51, 3, 12, 6, 0, 50, 49, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 58, 1, 0, 0, 0, 52, 54, 5, 1, 0, 0, 53, 55, 3, 12, 6, 0, 54, 53, 1, 0, 0, 0, 54, 55, 1, 0, 0, 0, 55, 57, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 57, 60, 1, 0, 0, 0, 58, 56, 1, 0, 0, 0, 58, 59, 1, 0, 0, 0, 59, 11, 1, 0, 0, 0, 60, 58, 1, 0, 0, 0, 61, 62, 3, 18, 9, 0, 62, 13, 1, 0, 0, 0, 63, 65, 5, 15, 0, 0, 64, 63, 1, 0, 0, 0, 64, 65, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 68, 7, 0, 0, 0, 67, 69, 5, 15, 0, 0, 68, 67, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 15, 1, 0, 0, 0, 70, 72, 5, 15, 0, 0, 71, 70, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 73, 1, 0, 0, 0, 73, 75, 7, 1, 0, 0, 74, 76, 5, 15, 0, 0, 75, 74, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 17, 1, 0, 0, 0, 77, 78, 7, 2, 0, 0, 78, 19, 1, 0, 0, 0, 13, 21, 25, 29, 36, 42, 45, 50, 54, 58, 64, 68, 71, 75]
|
@ -1,5 +1,17 @@
|
|||||||
COMMA=1
|
COMMA=1
|
||||||
STRING=2
|
ALL=2
|
||||||
WHITESPACE=3
|
CANONICAL=3
|
||||||
QUOTED_STRING=4
|
FINAL=4
|
||||||
|
EXEC=5
|
||||||
|
LOCALNETWORK=6
|
||||||
|
HOST=7
|
||||||
|
ORIGINALHOST=8
|
||||||
|
TAGGED=9
|
||||||
|
USER=10
|
||||||
|
LOCALUSER=11
|
||||||
|
STRING=12
|
||||||
|
WHITESPACE=13
|
||||||
|
QUOTED_STRING=14
|
||||||
|
QUOTE=15
|
||||||
','=1
|
','=1
|
||||||
|
'"'=15
|
||||||
|
@ -4,19 +4,52 @@ null
|
|||||||
null
|
null
|
||||||
null
|
null
|
||||||
null
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
null
|
||||||
|
'"'
|
||||||
|
|
||||||
token symbolic names:
|
token symbolic names:
|
||||||
null
|
null
|
||||||
COMMA
|
COMMA
|
||||||
|
ALL
|
||||||
|
CANONICAL
|
||||||
|
FINAL
|
||||||
|
EXEC
|
||||||
|
LOCALNETWORK
|
||||||
|
HOST
|
||||||
|
ORIGINALHOST
|
||||||
|
TAGGED
|
||||||
|
USER
|
||||||
|
LOCALUSER
|
||||||
STRING
|
STRING
|
||||||
WHITESPACE
|
WHITESPACE
|
||||||
QUOTED_STRING
|
QUOTED_STRING
|
||||||
|
QUOTE
|
||||||
|
|
||||||
rule names:
|
rule names:
|
||||||
COMMA
|
COMMA
|
||||||
|
ALL
|
||||||
|
CANONICAL
|
||||||
|
FINAL
|
||||||
|
EXEC
|
||||||
|
LOCALNETWORK
|
||||||
|
HOST
|
||||||
|
ORIGINALHOST
|
||||||
|
TAGGED
|
||||||
|
USER
|
||||||
|
LOCALUSER
|
||||||
STRING
|
STRING
|
||||||
WHITESPACE
|
WHITESPACE
|
||||||
QUOTED_STRING
|
QUOTED_STRING
|
||||||
|
QUOTE
|
||||||
|
|
||||||
channel names:
|
channel names:
|
||||||
DEFAULT_TOKEN_CHANNEL
|
DEFAULT_TOKEN_CHANNEL
|
||||||
@ -26,4 +59,4 @@ mode names:
|
|||||||
DEFAULT_MODE
|
DEFAULT_MODE
|
||||||
|
|
||||||
atn:
|
atn:
|
||||||
[4, 0, 4, 39, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1, 0, 1, 0, 1, 1, 4, 1, 13, 8, 1, 11, 1, 12, 1, 14, 1, 2, 4, 2, 18, 8, 2, 11, 2, 12, 2, 19, 1, 3, 1, 3, 3, 3, 24, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 29, 8, 3, 10, 3, 12, 3, 32, 9, 3, 1, 3, 3, 3, 35, 8, 3, 1, 3, 3, 3, 38, 8, 3, 0, 0, 4, 1, 1, 3, 2, 5, 3, 7, 4, 1, 0, 2, 5, 0, 9, 10, 13, 13, 32, 32, 35, 35, 44, 44, 2, 0, 9, 9, 32, 32, 44, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 9, 1, 0, 0, 0, 3, 12, 1, 0, 0, 0, 5, 17, 1, 0, 0, 0, 7, 21, 1, 0, 0, 0, 9, 10, 5, 44, 0, 0, 10, 2, 1, 0, 0, 0, 11, 13, 8, 0, 0, 0, 12, 11, 1, 0, 0, 0, 13, 14, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 15, 1, 0, 0, 0, 15, 4, 1, 0, 0, 0, 16, 18, 7, 1, 0, 0, 17, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 17, 1, 0, 0, 0, 19, 20, 1, 0, 0, 0, 20, 6, 1, 0, 0, 0, 21, 23, 5, 34, 0, 0, 22, 24, 3, 5, 2, 0, 23, 22, 1, 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 30, 1, 0, 0, 0, 25, 26, 3, 3, 1, 0, 26, 27, 3, 5, 2, 0, 27, 29, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 29, 32, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 34, 1, 0, 0, 0, 32, 30, 1, 0, 0, 0, 33, 35, 3, 3, 1, 0, 34, 33, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 37, 1, 0, 0, 0, 36, 38, 5, 34, 0, 0, 37, 36, 1, 0, 0, 0, 37, 38, 1, 0, 0, 0, 38, 8, 1, 0, 0, 0, 7, 0, 14, 19, 23, 30, 34, 37, 0]
|
[4, 0, 15, 141, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 4, 11, 113, 8, 11, 11, 11, 12, 11, 114, 1, 12, 4, 12, 118, 8, 12, 11, 12, 12, 12, 119, 1, 13, 1, 13, 3, 13, 124, 8, 13, 1, 13, 1, 13, 1, 13, 5, 13, 129, 8, 13, 10, 13, 12, 13, 132, 9, 13, 1, 13, 3, 13, 135, 8, 13, 1, 13, 3, 13, 138, 8, 13, 1, 14, 1, 14, 0, 0, 15, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 1, 0, 20, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 67, 67, 99, 99, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 73, 73, 105, 105, 2, 0, 70, 70, 102, 102, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120, 2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 82, 82, 114, 114, 2, 0, 75, 75, 107, 107, 2, 0, 72, 72, 104, 104, 2, 0, 83, 83, 115, 115, 2, 0, 71, 71, 103, 103, 2, 0, 68, 68, 100, 100, 2, 0, 85, 85, 117, 117, 5, 0, 9, 10, 13, 13, 32, 32, 35, 35, 44, 44, 2, 0, 9, 9, 32, 32, 146, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 1, 31, 1, 0, 0, 0, 3, 33, 1, 0, 0, 0, 5, 37, 1, 0, 0, 0, 7, 47, 1, 0, 0, 0, 9, 53, 1, 0, 0, 0, 11, 58, 1, 0, 0, 0, 13, 71, 1, 0, 0, 0, 15, 76, 1, 0, 0, 0, 17, 89, 1, 0, 0, 0, 19, 96, 1, 0, 0, 0, 21, 101, 1, 0, 0, 0, 23, 112, 1, 0, 0, 0, 25, 117, 1, 0, 0, 0, 27, 121, 1, 0, 0, 0, 29, 139, 1, 0, 0, 0, 31, 32, 5, 44, 0, 0, 32, 2, 1, 0, 0, 0, 33, 34, 7, 0, 0, 0, 34, 35, 7, 1, 0, 0, 35, 36, 7, 1, 0, 0, 36, 4, 1, 0, 0, 0, 37, 38, 7, 2, 0, 0, 38, 39, 7, 0, 0, 0, 39, 40, 7, 3, 0, 0, 40, 41, 7, 4, 0, 0, 41, 42, 7, 3, 0, 0, 42, 43, 7, 5, 0, 0, 43, 44, 7, 2, 0, 0, 44, 45, 7, 0, 0, 0, 45, 46, 7, 1, 0, 0, 46, 6, 1, 0, 0, 0, 47, 48, 7, 6, 0, 0, 48, 49, 7, 5, 0, 0, 49, 50, 7, 3, 0, 0, 50, 51, 7, 0, 0, 0, 51, 52, 7, 1, 0, 0, 52, 8, 1, 0, 0, 0, 53, 54, 7, 7, 0, 0, 54, 55, 7, 8, 0, 0, 55, 56, 7, 7, 0, 0, 56, 57, 7, 2, 0, 0, 57, 10, 1, 0, 0, 0, 58, 59, 7, 1, 0, 0, 59, 60, 7, 4, 0, 0, 60, 61, 7, 2, 0, 0, 61, 62, 7, 0, 0, 0, 62, 63, 7, 1, 0, 0, 63, 64, 7, 3, 0, 0, 64, 65, 7, 7, 0, 0, 65, 66, 7, 9, 0, 0, 66, 67, 7, 10, 0, 0, 67, 68, 7, 4, 0, 0, 68, 69, 7, 11, 0, 0, 69, 70, 7, 12, 0, 0, 70, 12, 1, 0, 0, 0, 71, 72, 7, 13, 0, 0, 72, 73, 7, 4, 0, 0, 73, 74, 7, 14, 0, 0, 74, 75, 7, 9, 0, 0, 75, 14, 1, 0, 0, 0, 76, 77, 7, 4, 0, 0, 77, 78, 7, 11, 0, 0, 78, 79, 7, 5, 0, 0, 79, 80, 7, 15, 0, 0, 80, 81, 7, 5, 0, 0, 81, 82, 7, 3, 0, 0, 82, 83, 7, 0, 0, 0, 83, 84, 7, 1, 0, 0, 84, 85, 7, 13, 0, 0, 85, 86, 7, 4, 0, 0, 86, 87, 7, 14, 0, 0, 87, 88, 7, 9, 0, 0, 88, 16, 1, 0, 0, 0, 89, 90, 7, 9, 0, 0, 90, 91, 7, 0, 0, 0, 91, 92, 7, 15, 0, 0, 92, 93, 7, 15, 0, 0, 93, 94, 7, 7, 0, 0, 94, 95, 7, 16, 0, 0, 95, 18, 1, 0, 0, 0, 96, 97, 7, 17, 0, 0, 97, 98, 7, 14, 0, 0, 98, 99, 7, 7, 0, 0, 99, 100, 7, 11, 0, 0, 100, 20, 1, 0, 0, 0, 101, 102, 7, 1, 0, 0, 102, 103, 7, 4, 0, 0, 103, 104, 7, 2, 0, 0, 104, 105, 7, 0, 0, 0, 105, 106, 7, 1, 0, 0, 106, 107, 7, 17, 0, 0, 107, 108, 7, 14, 0, 0, 108, 109, 7, 7, 0, 0, 109, 110, 7, 11, 0, 0, 110, 22, 1, 0, 0, 0, 111, 113, 8, 18, 0, 0, 112, 111, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 24, 1, 0, 0, 0, 116, 118, 7, 19, 0, 0, 117, 116, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0, 120, 26, 1, 0, 0, 0, 121, 123, 3, 29, 14, 0, 122, 124, 3, 25, 12, 0, 123, 122, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 130, 1, 0, 0, 0, 125, 126, 3, 23, 11, 0, 126, 127, 3, 25, 12, 0, 127, 129, 1, 0, 0, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 135, 3, 23, 11, 0, 134, 133, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 137, 1, 0, 0, 0, 136, 138, 3, 29, 14, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 28, 1, 0, 0, 0, 139, 140, 5, 34, 0, 0, 140, 30, 1, 0, 0, 0, 7, 0, 114, 119, 123, 130, 134, 137, 0]
|
@ -1,5 +1,17 @@
|
|||||||
COMMA=1
|
COMMA=1
|
||||||
STRING=2
|
ALL=2
|
||||||
WHITESPACE=3
|
CANONICAL=3
|
||||||
QUOTED_STRING=4
|
FINAL=4
|
||||||
|
EXEC=5
|
||||||
|
LOCALNETWORK=6
|
||||||
|
HOST=7
|
||||||
|
ORIGINALHOST=8
|
||||||
|
TAGGED=9
|
||||||
|
USER=10
|
||||||
|
LOCALUSER=11
|
||||||
|
STRING=12
|
||||||
|
WHITESPACE=13
|
||||||
|
QUOTED_STRING=14
|
||||||
|
QUOTE=15
|
||||||
','=1
|
','=1
|
||||||
|
'"'=15
|
||||||
|
@ -33,18 +33,24 @@ func (s *BaseMatchListener) EnterMatchEntry(ctx *MatchEntryContext) {}
|
|||||||
// ExitMatchEntry is called when production matchEntry is exited.
|
// ExitMatchEntry is called when production matchEntry is exited.
|
||||||
func (s *BaseMatchListener) ExitMatchEntry(ctx *MatchEntryContext) {}
|
func (s *BaseMatchListener) ExitMatchEntry(ctx *MatchEntryContext) {}
|
||||||
|
|
||||||
|
// EnterEntrySingle is called when production entrySingle is entered.
|
||||||
|
func (s *BaseMatchListener) EnterEntrySingle(ctx *EntrySingleContext) {}
|
||||||
|
|
||||||
|
// ExitEntrySingle is called when production entrySingle is exited.
|
||||||
|
func (s *BaseMatchListener) ExitEntrySingle(ctx *EntrySingleContext) {}
|
||||||
|
|
||||||
|
// EnterEntryWithValue is called when production entryWithValue is entered.
|
||||||
|
func (s *BaseMatchListener) EnterEntryWithValue(ctx *EntryWithValueContext) {}
|
||||||
|
|
||||||
|
// ExitEntryWithValue is called when production entryWithValue is exited.
|
||||||
|
func (s *BaseMatchListener) ExitEntryWithValue(ctx *EntryWithValueContext) {}
|
||||||
|
|
||||||
// EnterSeparator is called when production separator is entered.
|
// EnterSeparator is called when production separator is entered.
|
||||||
func (s *BaseMatchListener) EnterSeparator(ctx *SeparatorContext) {}
|
func (s *BaseMatchListener) EnterSeparator(ctx *SeparatorContext) {}
|
||||||
|
|
||||||
// ExitSeparator is called when production separator is exited.
|
// ExitSeparator is called when production separator is exited.
|
||||||
func (s *BaseMatchListener) ExitSeparator(ctx *SeparatorContext) {}
|
func (s *BaseMatchListener) ExitSeparator(ctx *SeparatorContext) {}
|
||||||
|
|
||||||
// EnterCriteria is called when production criteria is entered.
|
|
||||||
func (s *BaseMatchListener) EnterCriteria(ctx *CriteriaContext) {}
|
|
||||||
|
|
||||||
// ExitCriteria is called when production criteria is exited.
|
|
||||||
func (s *BaseMatchListener) ExitCriteria(ctx *CriteriaContext) {}
|
|
||||||
|
|
||||||
// EnterValues is called when production values is entered.
|
// EnterValues is called when production values is entered.
|
||||||
func (s *BaseMatchListener) EnterValues(ctx *ValuesContext) {}
|
func (s *BaseMatchListener) EnterValues(ctx *ValuesContext) {}
|
||||||
|
|
||||||
@ -57,6 +63,18 @@ func (s *BaseMatchListener) EnterValue(ctx *ValueContext) {}
|
|||||||
// ExitValue is called when production value is exited.
|
// ExitValue is called when production value is exited.
|
||||||
func (s *BaseMatchListener) ExitValue(ctx *ValueContext) {}
|
func (s *BaseMatchListener) ExitValue(ctx *ValueContext) {}
|
||||||
|
|
||||||
|
// EnterCriteriaSingle is called when production criteriaSingle is entered.
|
||||||
|
func (s *BaseMatchListener) EnterCriteriaSingle(ctx *CriteriaSingleContext) {}
|
||||||
|
|
||||||
|
// ExitCriteriaSingle is called when production criteriaSingle is exited.
|
||||||
|
func (s *BaseMatchListener) ExitCriteriaSingle(ctx *CriteriaSingleContext) {}
|
||||||
|
|
||||||
|
// EnterCriteriaWithValue is called when production criteriaWithValue is entered.
|
||||||
|
func (s *BaseMatchListener) EnterCriteriaWithValue(ctx *CriteriaWithValueContext) {}
|
||||||
|
|
||||||
|
// ExitCriteriaWithValue is called when production criteriaWithValue is exited.
|
||||||
|
func (s *BaseMatchListener) ExitCriteriaWithValue(ctx *CriteriaWithValueContext) {}
|
||||||
|
|
||||||
// EnterString is called when production string is entered.
|
// EnterString is called when production string is entered.
|
||||||
func (s *BaseMatchListener) EnterString(ctx *StringContext) {}
|
func (s *BaseMatchListener) EnterString(ctx *StringContext) {}
|
||||||
|
|
||||||
|
@ -43,34 +43,85 @@ func matchlexerLexerInit() {
|
|||||||
"DEFAULT_MODE",
|
"DEFAULT_MODE",
|
||||||
}
|
}
|
||||||
staticData.LiteralNames = []string{
|
staticData.LiteralNames = []string{
|
||||||
"", "','",
|
"", "','", "", "", "", "", "", "", "", "", "", "", "", "", "", "'\"'",
|
||||||
}
|
}
|
||||||
staticData.SymbolicNames = []string{
|
staticData.SymbolicNames = []string{
|
||||||
"", "COMMA", "STRING", "WHITESPACE", "QUOTED_STRING",
|
"", "COMMA", "ALL", "CANONICAL", "FINAL", "EXEC", "LOCALNETWORK", "HOST",
|
||||||
|
"ORIGINALHOST", "TAGGED", "USER", "LOCALUSER", "STRING", "WHITESPACE",
|
||||||
|
"QUOTED_STRING", "QUOTE",
|
||||||
}
|
}
|
||||||
staticData.RuleNames = []string{
|
staticData.RuleNames = []string{
|
||||||
"COMMA", "STRING", "WHITESPACE", "QUOTED_STRING",
|
"COMMA", "ALL", "CANONICAL", "FINAL", "EXEC", "LOCALNETWORK", "HOST",
|
||||||
|
"ORIGINALHOST", "TAGGED", "USER", "LOCALUSER", "STRING", "WHITESPACE",
|
||||||
|
"QUOTED_STRING", "QUOTE",
|
||||||
}
|
}
|
||||||
staticData.PredictionContextCache = antlr.NewPredictionContextCache()
|
staticData.PredictionContextCache = antlr.NewPredictionContextCache()
|
||||||
staticData.serializedATN = []int32{
|
staticData.serializedATN = []int32{
|
||||||
4, 0, 4, 39, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 1,
|
4, 0, 15, 141, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2,
|
||||||
0, 1, 0, 1, 1, 4, 1, 13, 8, 1, 11, 1, 12, 1, 14, 1, 2, 4, 2, 18, 8, 2,
|
4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2,
|
||||||
11, 2, 12, 2, 19, 1, 3, 1, 3, 3, 3, 24, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 29,
|
10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0,
|
||||||
8, 3, 10, 3, 12, 3, 32, 9, 3, 1, 3, 3, 3, 35, 8, 3, 1, 3, 3, 3, 38, 8,
|
1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
|
||||||
3, 0, 0, 4, 1, 1, 3, 2, 5, 3, 7, 4, 1, 0, 2, 5, 0, 9, 10, 13, 13, 32, 32,
|
1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4,
|
||||||
35, 35, 44, 44, 2, 0, 9, 9, 32, 32, 44, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0,
|
1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5,
|
||||||
0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 1, 9, 1, 0, 0, 0, 3, 12, 1, 0, 0,
|
1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7,
|
||||||
0, 5, 17, 1, 0, 0, 0, 7, 21, 1, 0, 0, 0, 9, 10, 5, 44, 0, 0, 10, 2, 1,
|
1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8,
|
||||||
0, 0, 0, 11, 13, 8, 0, 0, 0, 12, 11, 1, 0, 0, 0, 13, 14, 1, 0, 0, 0, 14,
|
1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1,
|
||||||
12, 1, 0, 0, 0, 14, 15, 1, 0, 0, 0, 15, 4, 1, 0, 0, 0, 16, 18, 7, 1, 0,
|
10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 4, 11, 113,
|
||||||
0, 17, 16, 1, 0, 0, 0, 18, 19, 1, 0, 0, 0, 19, 17, 1, 0, 0, 0, 19, 20,
|
8, 11, 11, 11, 12, 11, 114, 1, 12, 4, 12, 118, 8, 12, 11, 12, 12, 12, 119,
|
||||||
1, 0, 0, 0, 20, 6, 1, 0, 0, 0, 21, 23, 5, 34, 0, 0, 22, 24, 3, 5, 2, 0,
|
1, 13, 1, 13, 3, 13, 124, 8, 13, 1, 13, 1, 13, 1, 13, 5, 13, 129, 8, 13,
|
||||||
23, 22, 1, 0, 0, 0, 23, 24, 1, 0, 0, 0, 24, 30, 1, 0, 0, 0, 25, 26, 3,
|
10, 13, 12, 13, 132, 9, 13, 1, 13, 3, 13, 135, 8, 13, 1, 13, 3, 13, 138,
|
||||||
3, 1, 0, 26, 27, 3, 5, 2, 0, 27, 29, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 29,
|
8, 13, 1, 14, 1, 14, 0, 0, 15, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13,
|
||||||
32, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 34, 1, 0, 0,
|
7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 1, 0,
|
||||||
0, 32, 30, 1, 0, 0, 0, 33, 35, 3, 3, 1, 0, 34, 33, 1, 0, 0, 0, 34, 35,
|
20, 2, 0, 65, 65, 97, 97, 2, 0, 76, 76, 108, 108, 2, 0, 67, 67, 99, 99,
|
||||||
1, 0, 0, 0, 35, 37, 1, 0, 0, 0, 36, 38, 5, 34, 0, 0, 37, 36, 1, 0, 0, 0,
|
2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 73, 73, 105, 105,
|
||||||
37, 38, 1, 0, 0, 0, 38, 8, 1, 0, 0, 0, 7, 0, 14, 19, 23, 30, 34, 37, 0,
|
2, 0, 70, 70, 102, 102, 2, 0, 69, 69, 101, 101, 2, 0, 88, 88, 120, 120,
|
||||||
|
2, 0, 84, 84, 116, 116, 2, 0, 87, 87, 119, 119, 2, 0, 82, 82, 114, 114,
|
||||||
|
2, 0, 75, 75, 107, 107, 2, 0, 72, 72, 104, 104, 2, 0, 83, 83, 115, 115,
|
||||||
|
2, 0, 71, 71, 103, 103, 2, 0, 68, 68, 100, 100, 2, 0, 85, 85, 117, 117,
|
||||||
|
5, 0, 9, 10, 13, 13, 32, 32, 35, 35, 44, 44, 2, 0, 9, 9, 32, 32, 146, 0,
|
||||||
|
1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0,
|
||||||
|
9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0,
|
||||||
|
0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0,
|
||||||
|
0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 1, 31, 1, 0,
|
||||||
|
0, 0, 3, 33, 1, 0, 0, 0, 5, 37, 1, 0, 0, 0, 7, 47, 1, 0, 0, 0, 9, 53, 1,
|
||||||
|
0, 0, 0, 11, 58, 1, 0, 0, 0, 13, 71, 1, 0, 0, 0, 15, 76, 1, 0, 0, 0, 17,
|
||||||
|
89, 1, 0, 0, 0, 19, 96, 1, 0, 0, 0, 21, 101, 1, 0, 0, 0, 23, 112, 1, 0,
|
||||||
|
0, 0, 25, 117, 1, 0, 0, 0, 27, 121, 1, 0, 0, 0, 29, 139, 1, 0, 0, 0, 31,
|
||||||
|
32, 5, 44, 0, 0, 32, 2, 1, 0, 0, 0, 33, 34, 7, 0, 0, 0, 34, 35, 7, 1, 0,
|
||||||
|
0, 35, 36, 7, 1, 0, 0, 36, 4, 1, 0, 0, 0, 37, 38, 7, 2, 0, 0, 38, 39, 7,
|
||||||
|
0, 0, 0, 39, 40, 7, 3, 0, 0, 40, 41, 7, 4, 0, 0, 41, 42, 7, 3, 0, 0, 42,
|
||||||
|
43, 7, 5, 0, 0, 43, 44, 7, 2, 0, 0, 44, 45, 7, 0, 0, 0, 45, 46, 7, 1, 0,
|
||||||
|
0, 46, 6, 1, 0, 0, 0, 47, 48, 7, 6, 0, 0, 48, 49, 7, 5, 0, 0, 49, 50, 7,
|
||||||
|
3, 0, 0, 50, 51, 7, 0, 0, 0, 51, 52, 7, 1, 0, 0, 52, 8, 1, 0, 0, 0, 53,
|
||||||
|
54, 7, 7, 0, 0, 54, 55, 7, 8, 0, 0, 55, 56, 7, 7, 0, 0, 56, 57, 7, 2, 0,
|
||||||
|
0, 57, 10, 1, 0, 0, 0, 58, 59, 7, 1, 0, 0, 59, 60, 7, 4, 0, 0, 60, 61,
|
||||||
|
7, 2, 0, 0, 61, 62, 7, 0, 0, 0, 62, 63, 7, 1, 0, 0, 63, 64, 7, 3, 0, 0,
|
||||||
|
64, 65, 7, 7, 0, 0, 65, 66, 7, 9, 0, 0, 66, 67, 7, 10, 0, 0, 67, 68, 7,
|
||||||
|
4, 0, 0, 68, 69, 7, 11, 0, 0, 69, 70, 7, 12, 0, 0, 70, 12, 1, 0, 0, 0,
|
||||||
|
71, 72, 7, 13, 0, 0, 72, 73, 7, 4, 0, 0, 73, 74, 7, 14, 0, 0, 74, 75, 7,
|
||||||
|
9, 0, 0, 75, 14, 1, 0, 0, 0, 76, 77, 7, 4, 0, 0, 77, 78, 7, 11, 0, 0, 78,
|
||||||
|
79, 7, 5, 0, 0, 79, 80, 7, 15, 0, 0, 80, 81, 7, 5, 0, 0, 81, 82, 7, 3,
|
||||||
|
0, 0, 82, 83, 7, 0, 0, 0, 83, 84, 7, 1, 0, 0, 84, 85, 7, 13, 0, 0, 85,
|
||||||
|
86, 7, 4, 0, 0, 86, 87, 7, 14, 0, 0, 87, 88, 7, 9, 0, 0, 88, 16, 1, 0,
|
||||||
|
0, 0, 89, 90, 7, 9, 0, 0, 90, 91, 7, 0, 0, 0, 91, 92, 7, 15, 0, 0, 92,
|
||||||
|
93, 7, 15, 0, 0, 93, 94, 7, 7, 0, 0, 94, 95, 7, 16, 0, 0, 95, 18, 1, 0,
|
||||||
|
0, 0, 96, 97, 7, 17, 0, 0, 97, 98, 7, 14, 0, 0, 98, 99, 7, 7, 0, 0, 99,
|
||||||
|
100, 7, 11, 0, 0, 100, 20, 1, 0, 0, 0, 101, 102, 7, 1, 0, 0, 102, 103,
|
||||||
|
7, 4, 0, 0, 103, 104, 7, 2, 0, 0, 104, 105, 7, 0, 0, 0, 105, 106, 7, 1,
|
||||||
|
0, 0, 106, 107, 7, 17, 0, 0, 107, 108, 7, 14, 0, 0, 108, 109, 7, 7, 0,
|
||||||
|
0, 109, 110, 7, 11, 0, 0, 110, 22, 1, 0, 0, 0, 111, 113, 8, 18, 0, 0, 112,
|
||||||
|
111, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115,
|
||||||
|
1, 0, 0, 0, 115, 24, 1, 0, 0, 0, 116, 118, 7, 19, 0, 0, 117, 116, 1, 0,
|
||||||
|
0, 0, 118, 119, 1, 0, 0, 0, 119, 117, 1, 0, 0, 0, 119, 120, 1, 0, 0, 0,
|
||||||
|
120, 26, 1, 0, 0, 0, 121, 123, 3, 29, 14, 0, 122, 124, 3, 25, 12, 0, 123,
|
||||||
|
122, 1, 0, 0, 0, 123, 124, 1, 0, 0, 0, 124, 130, 1, 0, 0, 0, 125, 126,
|
||||||
|
3, 23, 11, 0, 126, 127, 3, 25, 12, 0, 127, 129, 1, 0, 0, 0, 128, 125, 1,
|
||||||
|
0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0,
|
||||||
|
0, 131, 134, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 135, 3, 23, 11, 0,
|
||||||
|
134, 133, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 137, 1, 0, 0, 0, 136,
|
||||||
|
138, 3, 29, 14, 0, 137, 136, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 28,
|
||||||
|
1, 0, 0, 0, 139, 140, 5, 34, 0, 0, 140, 30, 1, 0, 0, 0, 7, 0, 114, 119,
|
||||||
|
123, 130, 134, 137, 0,
|
||||||
}
|
}
|
||||||
deserializer := antlr.NewATNDeserializer(nil)
|
deserializer := antlr.NewATNDeserializer(nil)
|
||||||
staticData.atn = deserializer.Deserialize(staticData.serializedATN)
|
staticData.atn = deserializer.Deserialize(staticData.serializedATN)
|
||||||
@ -112,7 +163,18 @@ func NewMatchLexer(input antlr.CharStream) *MatchLexer {
|
|||||||
// MatchLexer tokens.
|
// MatchLexer tokens.
|
||||||
const (
|
const (
|
||||||
MatchLexerCOMMA = 1
|
MatchLexerCOMMA = 1
|
||||||
MatchLexerSTRING = 2
|
MatchLexerALL = 2
|
||||||
MatchLexerWHITESPACE = 3
|
MatchLexerCANONICAL = 3
|
||||||
MatchLexerQUOTED_STRING = 4
|
MatchLexerFINAL = 4
|
||||||
|
MatchLexerEXEC = 5
|
||||||
|
MatchLexerLOCALNETWORK = 6
|
||||||
|
MatchLexerHOST = 7
|
||||||
|
MatchLexerORIGINALHOST = 8
|
||||||
|
MatchLexerTAGGED = 9
|
||||||
|
MatchLexerUSER = 10
|
||||||
|
MatchLexerLOCALUSER = 11
|
||||||
|
MatchLexerSTRING = 12
|
||||||
|
MatchLexerWHITESPACE = 13
|
||||||
|
MatchLexerQUOTED_STRING = 14
|
||||||
|
MatchLexerQUOTE = 15
|
||||||
)
|
)
|
||||||
|
@ -14,18 +14,27 @@ type MatchListener interface {
|
|||||||
// EnterMatchEntry is called when entering the matchEntry production.
|
// EnterMatchEntry is called when entering the matchEntry production.
|
||||||
EnterMatchEntry(c *MatchEntryContext)
|
EnterMatchEntry(c *MatchEntryContext)
|
||||||
|
|
||||||
|
// EnterEntrySingle is called when entering the entrySingle production.
|
||||||
|
EnterEntrySingle(c *EntrySingleContext)
|
||||||
|
|
||||||
|
// EnterEntryWithValue is called when entering the entryWithValue production.
|
||||||
|
EnterEntryWithValue(c *EntryWithValueContext)
|
||||||
|
|
||||||
// EnterSeparator is called when entering the separator production.
|
// EnterSeparator is called when entering the separator production.
|
||||||
EnterSeparator(c *SeparatorContext)
|
EnterSeparator(c *SeparatorContext)
|
||||||
|
|
||||||
// EnterCriteria is called when entering the criteria production.
|
|
||||||
EnterCriteria(c *CriteriaContext)
|
|
||||||
|
|
||||||
// EnterValues is called when entering the values production.
|
// EnterValues is called when entering the values production.
|
||||||
EnterValues(c *ValuesContext)
|
EnterValues(c *ValuesContext)
|
||||||
|
|
||||||
// EnterValue is called when entering the value production.
|
// EnterValue is called when entering the value production.
|
||||||
EnterValue(c *ValueContext)
|
EnterValue(c *ValueContext)
|
||||||
|
|
||||||
|
// EnterCriteriaSingle is called when entering the criteriaSingle production.
|
||||||
|
EnterCriteriaSingle(c *CriteriaSingleContext)
|
||||||
|
|
||||||
|
// EnterCriteriaWithValue is called when entering the criteriaWithValue production.
|
||||||
|
EnterCriteriaWithValue(c *CriteriaWithValueContext)
|
||||||
|
|
||||||
// EnterString is called when entering the string production.
|
// EnterString is called when entering the string production.
|
||||||
EnterString(c *StringContext)
|
EnterString(c *StringContext)
|
||||||
|
|
||||||
@ -35,18 +44,27 @@ type MatchListener interface {
|
|||||||
// ExitMatchEntry is called when exiting the matchEntry production.
|
// ExitMatchEntry is called when exiting the matchEntry production.
|
||||||
ExitMatchEntry(c *MatchEntryContext)
|
ExitMatchEntry(c *MatchEntryContext)
|
||||||
|
|
||||||
|
// ExitEntrySingle is called when exiting the entrySingle production.
|
||||||
|
ExitEntrySingle(c *EntrySingleContext)
|
||||||
|
|
||||||
|
// ExitEntryWithValue is called when exiting the entryWithValue production.
|
||||||
|
ExitEntryWithValue(c *EntryWithValueContext)
|
||||||
|
|
||||||
// ExitSeparator is called when exiting the separator production.
|
// ExitSeparator is called when exiting the separator production.
|
||||||
ExitSeparator(c *SeparatorContext)
|
ExitSeparator(c *SeparatorContext)
|
||||||
|
|
||||||
// ExitCriteria is called when exiting the criteria production.
|
|
||||||
ExitCriteria(c *CriteriaContext)
|
|
||||||
|
|
||||||
// ExitValues is called when exiting the values production.
|
// ExitValues is called when exiting the values production.
|
||||||
ExitValues(c *ValuesContext)
|
ExitValues(c *ValuesContext)
|
||||||
|
|
||||||
// ExitValue is called when exiting the value production.
|
// ExitValue is called when exiting the value production.
|
||||||
ExitValue(c *ValueContext)
|
ExitValue(c *ValueContext)
|
||||||
|
|
||||||
|
// ExitCriteriaSingle is called when exiting the criteriaSingle production.
|
||||||
|
ExitCriteriaSingle(c *CriteriaSingleContext)
|
||||||
|
|
||||||
|
// ExitCriteriaWithValue is called when exiting the criteriaWithValue production.
|
||||||
|
ExitCriteriaWithValue(c *CriteriaWithValueContext)
|
||||||
|
|
||||||
// ExitString is called when exiting the string production.
|
// ExitString is called when exiting the string production.
|
||||||
ExitString(c *StringContext)
|
ExitString(c *StringContext)
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -140,4 +140,135 @@ func TestIncompleteBetweenValuesExample(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSimpleSingleCriteriaExample(
|
||||||
|
t *testing.T,
|
||||||
|
) {
|
||||||
|
input := "all"
|
||||||
|
|
||||||
|
match := NewMatch()
|
||||||
|
errors := match.Parse(input, 0, 0)
|
||||||
|
|
||||||
|
if len(errors) > 0 {
|
||||||
|
t.Fatalf("Expected no errors, but got %v", errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(len(match.Entries) == 1) {
|
||||||
|
t.Errorf("Expected 1 entries, but got %v", len(match.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Criteria.Type == MatchCriteriaTypeAll) {
|
||||||
|
t.Errorf("Expected criteria to be of type 'all', but got %v", match.Entries[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Values == nil) {
|
||||||
|
t.Errorf("Expected values to be nil, but got %v", match.Entries[0].Values)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMixedCriteriaComplexExample(
|
||||||
|
t *testing.T,
|
||||||
|
) {
|
||||||
|
input := "all user root localnetwork 192.168.1.1 final"
|
||||||
|
|
||||||
|
match := NewMatch()
|
||||||
|
errors := match.Parse(input, 0, 0)
|
||||||
|
|
||||||
|
if len(errors) > 0 {
|
||||||
|
t.Fatalf("Expected no errors, but got %v", errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(len(match.Entries) == 4) {
|
||||||
|
t.Errorf("Expected 4 entries, but got %v", len(match.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Criteria.Type == MatchCriteriaTypeAll) {
|
||||||
|
t.Errorf("Expected criteria to be of type 'all', but got %v", match.Entries[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[1].Criteria.Type == MatchCriteriaTypeUser) {
|
||||||
|
t.Errorf("Expected criteria to be of type 'user', but got %v", match.Entries[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[2].Criteria.Type == MatchCriteriaTypeLocalNetwork) {
|
||||||
|
t.Errorf("Expected criteria to be of type 'localnetwork', but got %v", match.Entries[2])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[3].Criteria.Type == MatchCriteriaTypeFinal) {
|
||||||
|
t.Errorf("Expected criteria to be of type 'final', but got %v", match.Entries[3])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[1].Values.Values[0].Value.Value == "root") {
|
||||||
|
t.Errorf("Expected value to be 'root', but got %v", match.Entries[1].Values.Values[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[2].Values.Values[0].Value.Value == "192.168.1.1") {
|
||||||
|
t.Errorf("Expected value to be '192.168.1.1', but got %v", match.Entries[2].Values.Values[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIncompleteWithSingleCriteriaExample(
|
||||||
|
t *testing.T,
|
||||||
|
) {
|
||||||
|
input := `all `
|
||||||
|
|
||||||
|
match := NewMatch()
|
||||||
|
errors := match.Parse(input, 0, 0)
|
||||||
|
|
||||||
|
if len(errors) > 0 {
|
||||||
|
t.Fatalf("Expected no errors, but got %v", errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(len(match.Entries) == 1) {
|
||||||
|
t.Errorf("Expected 1 entries, but got %v", len(match.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Criteria.Type == MatchCriteriaTypeAll) {
|
||||||
|
t.Errorf("Expected Host, but got %v", match.Entries[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Values == nil) {
|
||||||
|
t.Errorf("Expected nil, but got %v", match.Entries[0].Values)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIncompleteWithValueCriteriaExample(
|
||||||
|
t *testing.T,
|
||||||
|
) {
|
||||||
|
input := `user `
|
||||||
|
|
||||||
|
match := NewMatch()
|
||||||
|
errors := match.Parse(input, 0, 0)
|
||||||
|
|
||||||
|
if len(errors) > 0 {
|
||||||
|
t.Fatalf("Expected no errors, but got %v", errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(len(match.Entries) == 1) {
|
||||||
|
t.Errorf("Expected 1 entries, but got %v", len(match.Entries))
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(match.Entries[0].Criteria.Type == MatchCriteriaTypeUser) {
|
||||||
|
t.Errorf("Expected User, but got %v", match.Entries[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
if match.Entries[0].Values == nil {
|
||||||
|
t.Errorf("Expected slice, but got %v", match.Entries[0].Values)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIncompleteExampleWithNotFullyTypedCriteriaExample(
|
||||||
|
t *testing.T,
|
||||||
|
) {
|
||||||
|
input := `us`
|
||||||
|
|
||||||
|
match := NewMatch()
|
||||||
|
errors := match.Parse(input, 0, 0)
|
||||||
|
|
||||||
|
if !(len(errors) == 1) {
|
||||||
|
t.Fatalf("Expected no errors, but got %v", errors)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(len(match.Entries) == 0) {
|
||||||
|
t.Errorf("Expected 0 entries, but got %v", len(match.Entries))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package sshconfig
|
package sshconfig
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"config-lsp/handlers/ssh_config/indexes"
|
|
||||||
"config-lsp/handlers/ssh_config/ast"
|
"config-lsp/handlers/ssh_config/ast"
|
||||||
|
"config-lsp/handlers/ssh_config/indexes"
|
||||||
|
|
||||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||||
)
|
)
|
||||||
@ -13,4 +13,3 @@ type SSHDocument struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var DocumentParserMap = map[protocol.DocumentUri]*SSHDocument{}
|
var DocumentParserMap = map[protocol.DocumentUri]*SSHDocument{}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user