ffast 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18d062e72ef849cb0b6533af8c6dc37a6612036faead3c53e1d0427a001e8f24
4
- data.tar.gz: 55b4dfdd79ee4b789fa7652760fb3516a49f68b7503d827042b78c5101fecee6
3
+ metadata.gz: 3942d57d80b4c4a1cd1c8ff40f18cc56508a51f4b6cae53480536f7c36a60b05
4
+ data.tar.gz: b60976ea570cf722ae6face8541881c6a1231b2d645727f25231a05c9f33f7ee
5
5
  SHA512:
6
- metadata.gz: 813ca8cbe0bad2ce3f6dce1477820b68c00ac06021a3fd4263df9ea5634a6510ae0cac6cd178ffc8342b31bf7e956522a482d809dbcbe3500a488b6bc609a78a
7
- data.tar.gz: 7fb04918062ca0f972622fe69e8d6bb77631b1e7df9ba9aa5b1e37385c0cdbcd802324d6e46801a89e53d4f30b7fe92edf51ad3eba0252cf6fce5183c76f60de
6
+ metadata.gz: c4df11570f2b2cc164dbd43815a37443541c98c955d6c84ea0b24564fd03b8534cf73479844393ecd72c794231ad40baf678784f9863a8f90c157ac8477f3c9d
7
+ data.tar.gz: d9481952776fc77d251a3c9f518f41e20d672298e9ff01b53b8673a0c0bc38f4919e4dd7234365e8044f5cef8e0738823d847900bea790f9796e6d8554342a06
@@ -8,11 +8,114 @@ AllCops:
8
8
  Exclude:
9
9
  - 'tmp/**/*'
10
10
  - 'examples/*'
11
- TargetRubyVersion: 2.3
11
+ TargetRubyVersion: 2.6
12
12
 
13
13
  Layout/LineLength:
14
14
  Enabled: false
15
15
 
16
+ Layout/EmptyLinesAroundAttributeAccessor:
17
+ Enabled: false
18
+
19
+ Layout/SpaceAroundMethodCallOperator:
20
+ Enabled: false
21
+
22
+ Lint/BinaryOperatorWithIdenticalOperands:
23
+ Enabled: true
24
+
25
+ Lint/DuplicateElsifCondition:
26
+ Enabled: false
27
+
28
+ Lint/DuplicateRescueException:
29
+ Enabled: false
30
+
31
+ Lint/EmptyConditionalBody:
32
+ Enabled: false
33
+
34
+ Lint/FloatComparison:
35
+ Enabled: false
36
+
37
+ Lint/MissingSuper:
38
+ Enabled: false
39
+
40
+ Lint/OutOfRangeRegexpRef:
41
+ Enabled: false
42
+
43
+ Lint/SelfAssignment:
44
+ Enabled: false
45
+
46
+ Lint/TopLevelReturnWithArgument:
47
+ Enabled: false
48
+
49
+ Lint/UnreachableLoop:
50
+ Enabled: false
51
+
52
+
53
+ Lint/DeprecatedOpenSSLConstant:
54
+ Enabled: false
55
+
56
+ Lint/MixedRegexpCaptureTypes:
57
+ Enabled: false
58
+
59
+ Lint/RaiseException:
60
+ Enabled: true
61
+
62
+ Lint/StructNewOverride:
63
+ Enabled: true
64
+
65
+ Style/AccessorGrouping:
66
+ Enabled: false
67
+
68
+ Style/ArrayCoercion:
69
+ Enabled: false
70
+
71
+ Style/BisectedAttrAccessor:
72
+ Enabled: true
73
+
74
+ Style/CaseLikeIf:
75
+ Enabled: true
76
+
77
+ Style/ExplicitBlockArgument:
78
+ Enabled: false
79
+
80
+ Style/ExponentialNotation:
81
+ Enabled: true
82
+
83
+ Style/GlobalStdStream:
84
+ Enabled: false
85
+
86
+ Style/HashAsLastArrayItem:
87
+ Enabled: false
88
+
89
+ Style/HashLikeCase:
90
+ Enabled: true
91
+
92
+ Style/OptionalBooleanParameter:
93
+ Enabled: true
94
+
95
+ Style/RedundantAssignment:
96
+ Enabled: true
97
+
98
+ Style/RedundantFetchBlock:
99
+ Enabled: true
100
+
101
+ Style/RedundantFileExtensionInRequire:
102
+ Enabled: true
103
+
104
+ Style/SingleArgumentDig:
105
+ Enabled: true
106
+
107
+ Style/StringConcatenation:
108
+ Enabled: true
109
+
110
+ Style/RedundantRegexpCharacterClass:
111
+ Enabled: false
112
+
113
+ Style/RedundantRegexpEscape:
114
+ Enabled: false
115
+
116
+ Style/SlicingWithRange:
117
+ Enabled: true
118
+
16
119
  Metrics/BlockLength:
17
120
  Exclude:
18
121
  - 'spec/**/*'
@@ -0,0 +1,2 @@
1
+ pull_requests:
2
+ comments: false
@@ -6,7 +6,7 @@ env:
6
6
  rvm:
7
7
  - 2.6.3
8
8
  before_install:
9
- gem install bundler -v 1.16.1
9
+ gem install bundler -v 2.1.4
10
10
  before_script:
11
11
  - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
12
12
  - chmod +x ./cc-test-reporter
data/README.md CHANGED
@@ -32,7 +32,7 @@ The current version of Fast covers the following token elements:
32
32
  to build custom rules.
33
33
  - `.<method-name>` - will call `<method-name>` from the `node`
34
34
 
35
- The syntax is inspired by the [RuboCop Node Pattern](https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/node_pattern.rb).
35
+ The syntax is inspired by the [RuboCop Node Pattern](https://github.com/rubocop-hq/rubocop-ast/blob/master/lib/rubocop/ast/node_pattern.rb).
36
36
 
37
37
  ## Installation
38
38
 
@@ -1,6 +1,10 @@
1
1
  # Videos
2
2
 
3
- - Grepping Ruby code like a boss: [RubyConf Brazil 2019 (Portuguese)](https://www.eventials.com/locaweb/jonatas-paganini-live-coding-grepping-ruby-code-like-a-boss/#_=_)
3
+ - [Ruby Kaigi TakeOut 2020: Grepping Ruby code like a boss](https://www.youtube.com/watch?v=YzcYXB4L2so&amp;feature=youtu.be&amp;t=11855)
4
+
5
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/YzcYXB4L2so?start=11855" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
6
+
7
+ Also, similar livecoding session at [RubyConf Brazil 2019 (Portuguese)](https://www.eventials.com/locaweb/jonatas-paganini-live-coding-grepping-ruby-code-like-a-boss/#_=_).
4
8
 
5
9
  - Introduction to [inline code](https://www.youtube.com/watch?v=KQXglNLUv7o).
6
10
  <iframe width="560" height="315" src="https://www.youtube.com/embed/KQXglNLUv7o" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
@@ -7,7 +7,7 @@ require 'fast/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'ffast'
9
9
  spec.version = Fast::VERSION
10
- spec.required_ruby_version = '>= 2.3'
10
+ spec.required_ruby_version = '>= 2.6'
11
11
  spec.authors = ['Jônatas Davi Paganini']
12
12
  spec.email = ['jonatasdp@gmail.com']
13
13
  spec.homepage = 'https://jonatas.github.io/fast/'
@@ -34,11 +34,12 @@ Gem::Specification.new do |spec|
34
34
  spec.add_development_dependency 'guard-livereload'
35
35
  spec.add_development_dependency 'guard-rspec'
36
36
  spec.add_development_dependency 'pry'
37
+ spec.add_development_dependency 'git'
37
38
  spec.add_development_dependency 'rake'
38
39
  spec.add_development_dependency 'rspec', '~> 3.0'
39
40
  spec.add_development_dependency 'rspec-its', '~> 1.2'
40
41
  spec.add_development_dependency 'rubocop'
41
42
  spec.add_development_dependency 'rubocop-performance'
42
43
  spec.add_development_dependency 'rubocop-rspec'
43
- spec.add_development_dependency 'simplecov'
44
+ spec.add_development_dependency 'simplecov', '~> 0.10', '< 0.18'
44
45
  end
@@ -67,18 +67,86 @@ module Fast
67
67
  %\d # bind extra arguments to the expression
68
68
  /x.freeze
69
69
 
70
+ # Set some convention methods from file.
71
+ class Node < Astrolabe::Node
72
+ # @return [String] with path of the file or simply buffer name.
73
+ def buffer_name
74
+ expression.source_buffer.name
75
+ end
76
+
77
+ # @return [Parser::Source::Range] from the expression
78
+ def expression
79
+ location.expression
80
+ end
81
+
82
+ # @return [String] with the content of the #expression
83
+ def source
84
+ expression.source
85
+ end
86
+
87
+ # @return [Boolean] true if a file exists with the #buffer_name
88
+ def from_file?
89
+ File.exist?(buffer_name)
90
+ end
91
+
92
+ # @return [Array<String>] with authors from the current expression range
93
+ def blame_authors
94
+ `git blame -L #{expression.first_line},#{expression.last_line} #{buffer_name}`.lines.map do |line|
95
+ line.split('(')[1].split(/\d+/).first.strip
96
+ end
97
+ end
98
+
99
+ # @return [String] with the first element from #blame_authors
100
+ def author
101
+ blame_authors.first
102
+ end
103
+
104
+ # Search recursively into a node and its children using a pattern.
105
+ # @param [String] pattern
106
+ # @param [Array] *args extra arguments to interpolate in the pattern.
107
+ # @return [Array<Fast::Node>>] with files and results
108
+ def search(pattern, *args)
109
+ Fast.search(pattern, self, *args)
110
+ end
111
+
112
+ # Captures elements from search recursively
113
+ # @param [String] pattern
114
+ # @param [Array] *args extra arguments to interpolate in the pattern.
115
+ # @return [Array<Fast::Node>>] with files and results
116
+ def capture(pattern, *args)
117
+ Fast.capture(pattern, self, *args)
118
+ end
119
+ end
120
+
121
+ # Custom builder allow us to set a buffer name for each Node
122
+ class Builder < Astrolabe::Builder
123
+ attr_writer :buffer_name
124
+ # Generates {Node} from the given information.
125
+ #
126
+ # @return [Node] the generated node
127
+ def n(type, children, source_map)
128
+ Node.new(type, children, location: source_map, buffer_name: @buffer_name)
129
+ end
130
+ end
131
+
70
132
  class << self
71
- # @return [Astrolabe::Node] from the parsed content
133
+ # @return [Fast::Node] from the parsed content
72
134
  # @example
73
135
  # Fast.ast("1") # => s(:int, 1)
74
136
  # Fast.ast("a.b") # => s(:send, s(:send, nil, :a), :b)
75
137
  def ast(content, buffer_name: '(string)')
76
138
  buffer = Parser::Source::Buffer.new(buffer_name)
77
139
  buffer.source = content
78
- Parser::CurrentRuby.new(Astrolabe::Builder.new).parse(buffer)
140
+ Parser::CurrentRuby.new(builder_for(buffer_name)).parse(buffer)
141
+ end
142
+
143
+ def builder_for(buffer_name)
144
+ builder = Builder.new
145
+ builder.buffer_name = buffer_name
146
+ builder
79
147
  end
80
148
 
81
- # @return [Astrolabe::Node] parsed from file content
149
+ # @return [Fast::Node] parsed from file content
82
150
  # caches the content based on the filename.
83
151
  # @example
84
152
  # Fast.ast_from_file("example.rb") # => s(...)
@@ -96,7 +164,7 @@ module Fast
96
164
  end
97
165
 
98
166
  # Search with pattern directly on file
99
- # @return [Array<Astrolabe::Node>] that matches the pattern
167
+ # @return [Array<Fast::Node>] that matches the pattern
100
168
  def search_file(pattern, file)
101
169
  node = ast_from_file(file)
102
170
  return [] unless node
@@ -107,7 +175,7 @@ module Fast
107
175
  # Search with pattern on a directory or multiple files
108
176
  # @param [String] pattern
109
177
  # @param [Array<String>] *locations where to search. Default is '.'
110
- # @return [Hash<String,Array<Astrolabe::Node>>] with files and results
178
+ # @return [Hash<String,Array<Fast::Node>>] with files and results
111
179
  def search_all(pattern, locations = ['.'], parallel: true, on_result: nil)
112
180
  group_results(build_grouped_search(:search_file, pattern, on_result),
113
181
  locations, parallel: parallel)
@@ -241,7 +309,7 @@ module Fast
241
309
  # Useful to index abstract patterns or similar code structure.
242
310
  # @see https://jonatas.github.io/fast/similarity_tutorial/
243
311
  # @return [String] with an pattern to search from it.
244
- # @param node [Astrolabe::Node]
312
+ # @param node [Fast::Node]
245
313
  # @example
246
314
  # Fast.expression_from(Fast.ast('1')) # => '(int _)'
247
315
  # Fast.expression_from(Fast.ast('a = 1')) # => '(lvasgn _ (int _))'
@@ -250,7 +318,7 @@ module Fast
250
318
  case node
251
319
  when Parser::AST::Node
252
320
  children_expression = node.children.map(&method(:expression_from)).join(' ')
253
- "(#{node.type}#{' ' + children_expression if node.children.any?})"
321
+ "(#{node.type}#{" #{children_expression}" if node.children.any?})"
254
322
  when nil, 'nil'
255
323
  'nil'
256
324
  when Symbol, String, Numeric
@@ -305,14 +373,14 @@ module Fast
305
373
  when '{' then Any.new(parse_until_peek('}'))
306
374
  when '[' then All.new(parse_until_peek(']'))
307
375
  when /^"/ then FindString.new(token[1..-2])
308
- when /^#\w/ then MethodCall.new(token[1..-1])
309
- when /^\.\w[\w\d_]+\?/ then InstanceMethodCall.new(token[1..-1])
376
+ when /^#\w/ then MethodCall.new(token[1..])
377
+ when /^\.\w[\w\d_]+\?/ then InstanceMethodCall.new(token[1..])
310
378
  when '$' then Capture.new(parse)
311
379
  when '!' then (@tokens.any? ? Not.new(parse) : Find.new(token))
312
380
  when '?' then Maybe.new(parse)
313
381
  when '^' then Parent.new(parse)
314
382
  when '\\' then FindWithCapture.new(parse)
315
- when /^%\d/ then FindFromArgument.new(token[1..-1])
383
+ when /^%\d/ then FindFromArgument.new(token[1..])
316
384
  else Find.new(token)
317
385
  end
318
386
  end
@@ -36,12 +36,16 @@ module Fast
36
36
  # @param headless [Boolean] Skip printing the file name and line before content
37
37
  # @example
38
38
  # Fast.highlight(Fast.search(...))
39
- def report(result, show_sexp: false, file: nil, headless: false, colorize: true)
39
+ def report(result, show_link: false, show_sexp: false, file: nil, headless: false, bodyless: false, colorize: true) # rubocop:disable Metrics/ParameterLists
40
40
  if file
41
41
  line = result.loc.expression.line if result.is_a?(Parser::AST::Node)
42
- puts(highlight("# #{file}:#{line}", colorize: colorize)) unless headless
42
+ if show_link
43
+ puts(result.link)
44
+ elsif !headless
45
+ puts(highlight("# #{file}:#{line}", colorize: colorize))
46
+ end
43
47
  end
44
- puts highlight(result, show_sexp: show_sexp, colorize: colorize)
48
+ puts(highlight(result, show_sexp: show_sexp, colorize: colorize)) unless bodyless
45
49
  end
46
50
 
47
51
  # Command Line Interface for Fast
@@ -69,6 +73,11 @@ module Fast
69
73
  @show_sexp = true
70
74
  end
71
75
 
76
+ opts.on('--link', 'Print link to repository URL instead of code') do
77
+ require 'fast/git'
78
+ @show_link = true
79
+ end
80
+
72
81
  opts.on('-p', '--parallel', 'Paralelize search') do
73
82
  @parallel = true
74
83
  end
@@ -81,6 +90,10 @@ module Fast
81
90
  @headless = true
82
91
  end
83
92
 
93
+ opts.on('--bodyless', 'Print results without the code details') do
94
+ @bodyless = true
95
+ end
96
+
84
97
  opts.on('--pry', 'Jump into a pry session with results') do
85
98
  @pry = true
86
99
  require 'pry'
@@ -116,12 +129,13 @@ module Fast
116
129
  end
117
130
 
118
131
  def replace_args_with_shortcut(args)
119
- shortcut = find_shortcut args.first[1..-1]
132
+ shortcut = find_shortcut args.first[1..]
133
+
120
134
  if shortcut.single_run_with_block?
121
135
  shortcut.run
122
136
  exit
123
137
  else
124
- args.one? ? shortcut.args : shortcut.merge_args(args[1..-1])
138
+ args.one? ? shortcut.args : shortcut.merge_args(args[1..])
125
139
  end
126
140
  end
127
141
 
@@ -195,7 +209,13 @@ module Fast
195
209
  # Report results using the actual options binded from command line.
196
210
  # @see Fast.report
197
211
  def report(file, result)
198
- Fast.report(result, file: file, show_sexp: @show_sexp, headless: @headless, colorize: @colorize)
212
+ Fast.report(result,
213
+ file: file,
214
+ show_link: @show_link,
215
+ show_sexp: @show_sexp,
216
+ headless: @headless,
217
+ bodyless: @bodyless,
218
+ colorize: @colorize)
199
219
  end
200
220
 
201
221
  # Find shortcut by name. Preloads all `Fastfiles` before start.
@@ -206,7 +226,6 @@ module Fast
206
226
  Fast.load_fast_files!
207
227
 
208
228
  shortcut = Fast.shortcuts[name] || Fast.shortcuts[name.to_sym]
209
-
210
229
  shortcut || exit_shortcut_not_found(name)
211
230
  end
212
231
 
@@ -290,7 +290,7 @@ module Fast
290
290
  Fast.search(experiment.expression, @ast) || []
291
291
  end
292
292
 
293
- # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
293
+ # rubocop:disable Metrics/MethodLength
294
294
  #
295
295
  # Execute partial replacements generating new file with the
296
296
  # content replaced.
@@ -312,7 +312,6 @@ module Fast
312
312
  new_content
313
313
  end
314
314
 
315
- # rubocop:enable Metrics/AbcSize
316
315
  # rubocop:enable Metrics/MethodLength
317
316
 
318
317
  # Write new file name depending on the combination
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Git plugin for Fast::Node.
4
+ # It allows to easily access metadata from current file.
5
+ module Fast
6
+ # This is not required by default, so to use it, you should require it first.
7
+ #
8
+ # @example
9
+ # require 'fast/git'
10
+ # Fast.ast_from_file('lib/fast.rb').git_log.first.author.name # => "Jonatas Davi Paganini"
11
+ class Node < Astrolabe::Node
12
+ # @return [Git::Base] from current directory
13
+ def git
14
+ require 'git' unless defined? Git
15
+ Git.open('.')
16
+ end
17
+
18
+ # @return [Git::Object::Blob] from current #buffer_name
19
+ def git_blob
20
+ return unless from_file?
21
+
22
+ git.gblob(buffer_name)
23
+ end
24
+
25
+ # @return [Git::Log] from the current #git_blob
26
+ # buffer-name
27
+ def git_log
28
+ git_blob.log
29
+ end
30
+
31
+ # @return [Git::Object::Commit]
32
+ def last_commit
33
+ git_log.first
34
+ end
35
+
36
+ # @return [String] with last commit SHA
37
+ def sha
38
+ last_commit.sha
39
+ end
40
+
41
+ # @return [String] with remote URL
42
+ def remote_url
43
+ git.remote.url
44
+ end
45
+
46
+ # Given #remote_url is "git@github.com:namespace/project.git"
47
+ # Or #remote_url is "https://github.com/namespace/project.git"
48
+ # @return [String] "https://github.com/namespace/project"
49
+ def project_url
50
+ return remote_url.gsub(/\.git$/, '') if remote_url.start_with?('https')
51
+
52
+ remote_url
53
+ .gsub('git@', 'https://')
54
+ .gsub(/:(\w)/, '/\\1')
55
+ .gsub(/\.git$/, '')
56
+ end
57
+
58
+ def file
59
+ buffer_name.gsub("#{Dir.pwd}/", '')
60
+ end
61
+
62
+ # @return
63
+ def line_range
64
+ lines.map { |l| "L#{l}" }.join('-')
65
+ end
66
+
67
+ # @return [Array] with lines range
68
+ def lines
69
+ exp = loc.expression
70
+ first_line = exp.first_line
71
+ last_line = exp.last_line
72
+ [first_line, last_line].uniq
73
+ end
74
+
75
+ # @return [Integer] lines of code from current block
76
+ def lines_of_code
77
+ lines.last - lines.first + 1
78
+ end
79
+
80
+ # @return [String] a markdown link with #md_link_description and #link
81
+ def md_link(text = md_link_description)
82
+ "[#{text}](#{link})"
83
+ end
84
+
85
+ # @return [String] with the source cutting arguments from method calls to be
86
+ # able to create a markdown link without parens.
87
+ def md_link_description
88
+ source[/([^\r\(]+)\(/, 1] || source
89
+ end
90
+
91
+ # @return [String] with formatted repositorym link
92
+ def link
93
+ "#{project_url}/blob/master/#{buffer_name}##{line_range}"
94
+ end
95
+
96
+ # @return [String] with permanent link to the actual commit
97
+ def permalink
98
+ "#{project_url}/blob/#{sha}/#{buffer_name}##{line_range}"
99
+ end
100
+ end
101
+ end
@@ -54,19 +54,16 @@ module Fast
54
54
  @block && @args.nil?
55
55
  end
56
56
 
57
- def options
58
- @args.select { |arg| arg.start_with? '-' }
59
- end
60
-
61
- def params
62
- @args - options
63
- end
64
-
65
57
  # Merge extra arguments from input returning a new arguments array keeping
66
58
  # the options from previous alias and replacing the files with the
67
59
  # @param [Array] extra_args
68
60
  def merge_args(extra_args)
69
- [params[0], *options, *extra_args.select(&File.method(:exists?))]
61
+ all_args = (@args + extra_args).uniq
62
+ options = all_args.select { |arg| arg.start_with? '-' }
63
+ files = extra_args.select(&File.method(:exists?))
64
+ command = (@args - options - files).first
65
+
66
+ [command, *options, *files]
70
67
  end
71
68
 
72
69
  # If the shortcut was defined with a single block and no extra arguments, it
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fast
4
- VERSION = '0.1.9'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffast
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jônatas Davi Paganini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2020-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: astrolabe
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: git
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rake
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -224,16 +238,22 @@ dependencies:
224
238
  name: simplecov
225
239
  requirement: !ruby/object:Gem::Requirement
226
240
  requirements:
227
- - - ">="
241
+ - - "~>"
228
242
  - !ruby/object:Gem::Version
229
- version: '0'
243
+ version: '0.10'
244
+ - - "<"
245
+ - !ruby/object:Gem::Version
246
+ version: '0.18'
230
247
  type: :development
231
248
  prerelease: false
232
249
  version_requirements: !ruby/object:Gem::Requirement
233
250
  requirements:
234
- - - ">="
251
+ - - "~>"
235
252
  - !ruby/object:Gem::Version
236
- version: '0'
253
+ version: '0.10'
254
+ - - "<"
255
+ - !ruby/object:Gem::Version
256
+ version: '0.18'
237
257
  description: Allow you to search for code using node pattern syntax.
238
258
  email:
239
259
  - jonatasdp@gmail.com
@@ -247,6 +267,7 @@ files:
247
267
  - ".projections.json"
248
268
  - ".rspec"
249
269
  - ".rubocop.yml"
270
+ - ".sourcelevel.yml"
250
271
  - ".travis.yml"
251
272
  - CODE_OF_CONDUCT.md
252
273
  - Fastfile
@@ -286,6 +307,7 @@ files:
286
307
  - lib/fast.rb
287
308
  - lib/fast/cli.rb
288
309
  - lib/fast/experiment.rb
310
+ - lib/fast/git.rb
289
311
  - lib/fast/rewriter.rb
290
312
  - lib/fast/shortcut.rb
291
313
  - lib/fast/version.rb
@@ -303,7 +325,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
303
325
  requirements:
304
326
  - - ">="
305
327
  - !ruby/object:Gem::Version
306
- version: '2.3'
328
+ version: '2.6'
307
329
  required_rubygems_version: !ruby/object:Gem::Requirement
308
330
  requirements:
309
331
  - - ">="