From e94a1e22df2ab813eaa58be706387106bbb8de82 Mon Sep 17 00:00:00 2001 From: Chris Lane Date: Wed, 20 Nov 2019 18:55:24 -0500 Subject: [PATCH 1/3] chore: updates vendored dependencies --- go.sum | 2 - vendor/gopkg.in/yaml.v2/.travis.yml | 18 ++++--- vendor/gopkg.in/yaml.v2/scannerc.go | 78 ++++++++++++++++------------- vendor/gopkg.in/yaml.v2/yaml.go | 2 +- vendor/modules.txt | 2 +- 5 files changed, 55 insertions(+), 47 deletions(-) diff --git a/go.sum b/go.sum index 45c69b4..8a9f00d 100644 --- a/go.sum +++ b/go.sum @@ -60,7 +60,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 h1:POO/ycCATvegFmVuPpQzZFJ+pGZeX22Ufu6fibxDVjU= gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= -gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7 h1:VUgggvou5XRW9mHwD/yXxIYSMtY0zoKQf/v226p2nyo= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/gopkg.in/yaml.v2/.travis.yml b/vendor/gopkg.in/yaml.v2/.travis.yml index 9f55693..055480b 100644 --- a/vendor/gopkg.in/yaml.v2/.travis.yml +++ b/vendor/gopkg.in/yaml.v2/.travis.yml @@ -1,12 +1,16 @@ language: go go: - - 1.4 - - 1.5 - - 1.6 - - 1.7 - - 1.8 - - 1.9 - - tip + - "1.4.x" + - "1.5.x" + - "1.6.x" + - "1.7.x" + - "1.8.x" + - "1.9.x" + - "1.10.x" + - "1.11.x" + - "1.12.x" + - "1.13.x" + - "tip" go_import_path: gopkg.in/yaml.v2 diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go index 570b8ec..b33bdba 100644 --- a/vendor/gopkg.in/yaml.v2/scannerc.go +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -634,13 +634,14 @@ func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool { need_more_tokens = true } else { // Check if any potential simple key may occupy the head position. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - - for i := range parser.simple_keys { + for i := len(parser.simple_keys) - 1; i >= 0; i-- { simple_key := &parser.simple_keys[i] - if simple_key.possible && simple_key.token_number == parser.tokens_parsed { + if simple_key.token_number < parser.tokens_parsed { + break + } + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + } else if valid && simple_key.token_number == parser.tokens_parsed { need_more_tokens = true break } @@ -678,11 +679,6 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { return false } - // Remove obsolete potential simple keys. - if !yaml_parser_stale_simple_keys(parser) { - return false - } - // Check the indentation level against the current column. if !yaml_parser_unroll_indent(parser, parser.mark.column) { return false @@ -837,29 +833,30 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t) bool { "found character that cannot start any token") } -// Check the list of potential simple keys and remove the positions that -// cannot contain simple keys anymore. -func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool { - // Check for a potential simple key for each flow level. - for i := range parser.simple_keys { - simple_key := &parser.simple_keys[i] - - // The specification requires that a simple key - // - // - is limited to a single line, - // - is shorter than 1024 characters. - if simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) { - - // Check if the potential simple key to be removed is required. - if simple_key.required { - return yaml_parser_set_scanner_error(parser, - "while scanning a simple key", simple_key.mark, - "could not find expected ':'") - } - simple_key.possible = false - } +func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) { + if !simple_key.possible { + return false, true } - return true + + // The 1.2 specification says: + // + // "If the ? indicator is omitted, parsing needs to see past the + // implicit key to recognize it as such. To limit the amount of + // lookahead required, the “:” indicator must appear at most 1024 + // Unicode characters beyond the start of the key. In addition, the key + // is restricted to a single line." + // + if simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index { + // Check if the potential simple key to be removed is required. + if simple_key.required { + return false, yaml_parser_set_scanner_error(parser, + "while scanning a simple key", simple_key.mark, + "could not find expected ':'") + } + simple_key.possible = false + return false, true + } + return true, true } // Check if a simple key may start at the current position and add it if @@ -879,8 +876,8 @@ func yaml_parser_save_simple_key(parser *yaml_parser_t) bool { possible: true, required: required, token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, } - simple_key.mark = parser.mark if !yaml_parser_remove_simple_key(parser) { return false @@ -912,7 +909,12 @@ const max_flow_level = 10000 // Increase the flow level and resize the simple key list if needed. func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool { // Reset the simple key on the next level. - parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{}) + parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{ + possible: false, + required: false, + token_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head), + mark: parser.mark, + }) // Increase the flow level. parser.flow_level++ @@ -1286,7 +1288,11 @@ func yaml_parser_fetch_value(parser *yaml_parser_t) bool { simple_key := &parser.simple_keys[len(parser.simple_keys)-1] // Have we found a simple key? - if simple_key.possible { + if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok { + return false + + } else if valid { + // Create the KEY token and insert it into the queue. token := yaml_token_t{ typ: yaml_KEY_TOKEN, diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go index de85aa4..89650e2 100644 --- a/vendor/gopkg.in/yaml.v2/yaml.go +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -89,7 +89,7 @@ func UnmarshalStrict(in []byte, out interface{}) (err error) { return unmarshal(in, out, true) } -// A Decorder reads and decodes YAML values from an input stream. +// A Decoder reads and decodes YAML values from an input stream. type Decoder struct { strict bool parser *parser diff --git a/vendor/modules.txt b/vendor/modules.txt index 622d09b..9d28daa 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -53,5 +53,5 @@ github.com/mitchellh/go-homedir golang.org/x/sys/unix # gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 gopkg.in/yaml.v1 -# gopkg.in/yaml.v2 v2.2.5 +# gopkg.in/yaml.v2 v2.2.7 gopkg.in/yaml.v2 From daa43d3867c18a12cab7afed07e23708096f05e6 Mon Sep 17 00:00:00 2001 From: Chris Lane Date: Wed, 20 Nov 2019 18:47:17 -0500 Subject: [PATCH 2/3] feat: implements filter on `-l` Implements filtering by pattern with `-l`. Resolves #504. --- cmd/cheat/cmd_list.go | 34 ++++++++++++++++++++++++++++++++++ cmd/cheat/docopt.txt | 3 +++ cmd/cheat/str_usage.go | 3 +++ 3 files changed, 40 insertions(+) diff --git a/cmd/cheat/cmd_list.go b/cmd/cheat/cmd_list.go index 6ed59da..6f03318 100644 --- a/cmd/cheat/cmd_list.go +++ b/cmd/cheat/cmd_list.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os" + "regexp" "sort" "strings" "text/tabwriter" @@ -45,6 +46,39 @@ func cmdList(opts map[string]interface{}, conf config.Config) { return flattened[i].Title < flattened[j].Title }) + // filter if was specified + // NB: our docopt specification is misleading here. When used in conjunction + // with `-l`, `` is really a pattern against which to filter + // sheet titles. + if opts[""] != nil { + + // initialize a slice of filtered sheets + filtered := []sheet.Sheet{} + + // initialize our filter pattern + pattern := "(?i)" + opts[""].(string) + + // compile the regex + reg, err := regexp.Compile(pattern) + if err != nil { + fmt.Fprintln( + os.Stderr, + fmt.Sprintf("failed to compile regexp: %s, %v", pattern, err), + ) + os.Exit(1) + } + + // iterate over each cheatsheet, and pass-through those which match the + // filter pattern + for _, s := range flattened { + if reg.MatchString(s.Title) { + filtered = append(filtered, s) + } + } + + flattened = filtered + } + // exit early if no cheatsheets are available if len(flattened) == 0 { os.Exit(0) diff --git a/cmd/cheat/docopt.txt b/cmd/cheat/docopt.txt index 609f209..5877aab 100644 --- a/cmd/cheat/docopt.txt +++ b/cmd/cheat/docopt.txt @@ -35,6 +35,9 @@ Examples: To list all available cheatsheets: cheat -l + To list all cheatsheets whose titles match "apt": + cheat -l apt + To list all tags in use: cheat -T diff --git a/cmd/cheat/str_usage.go b/cmd/cheat/str_usage.go index dfcc96c..49d7678 100644 --- a/cmd/cheat/str_usage.go +++ b/cmd/cheat/str_usage.go @@ -44,6 +44,9 @@ Examples: To list all available cheatsheets: cheat -l + To list all cheatsheets whose titles match "apt": + cheat -l apt + To list all tags in use: cheat -T From a01a3491a46569d5fedd15f07c9345151e8662f8 Mon Sep 17 00:00:00 2001 From: Chris Lane Date: Wed, 20 Nov 2019 18:56:50 -0500 Subject: [PATCH 3/3] chore: version bump Bumps version to 3.2.0. --- cmd/cheat/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cheat/main.go b/cmd/cheat/main.go index b205f11..0e46cfa 100755 --- a/cmd/cheat/main.go +++ b/cmd/cheat/main.go @@ -13,7 +13,7 @@ import ( "github.com/cheat/cheat/internal/config" ) -const version = "3.1.1" +const version = "3.2.0" func main() {