textbringer 0.2.9 → 0.3.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 +4 -4
- data/CHANGES.md +5 -0
- data/README.md +0 -1
- data/lib/textbringer/modes/ruby_mode.rb +46 -40
- data/lib/textbringer/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f61a01528e59c0b8185339a9120fd528602e4df0c8db6b859a3756043309ac2
|
4
|
+
data.tar.gz: cd1eef029b832c4fcdd9b7bdf709c29c3e60676d79f7084028ac2c683ca7ef82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 501f358854f97ca17dafdbd3d908d1a29a2ea32f103a596958b48e1f11c7397178334e75dfa369ac779e7df77d92958632790c77d2ffd520e6959a6a071e32a6
|
7
|
+
data.tar.gz: d1c443c92cd12df433bdee6df2af8d211ebca023946c268386f813c3292bcc195f4f9cd2b6e17e010ff1d168e31d8ba3da92c75c181644585fe3fdb15d21b532
|
data/CHANGES.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Textbringer
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/textbringer)
|
4
|
-
[](https://gemnasium.com/shugo/textbringer)
|
5
4
|
[](https://travis-ci.org/shugo/textbringer)
|
6
5
|
[](https://ci.appveyor.com/project/shugo31737/textbringer)
|
7
6
|
[](https://codecov.io/gh/shugo/textbringer)
|
@@ -160,39 +160,14 @@ module Textbringer
|
|
160
160
|
def toggle_test
|
161
161
|
case @buffer.file_name
|
162
162
|
when %r'(.*)/test/(.*/)?test_(.*?)\.rb\z'
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
if !paths.empty?
|
169
|
-
find_file(paths.first)
|
170
|
-
return
|
171
|
-
end
|
172
|
-
end
|
173
|
-
paths = Dir.glob("#{base}/{lib,app}/**/#{name}.rb")
|
174
|
-
if !paths.empty?
|
175
|
-
find_file(paths.first)
|
176
|
-
return
|
177
|
-
end
|
178
|
-
raise EditorError, "Test subject not found"
|
163
|
+
path = find_test_target_path($1, $2, $3)
|
164
|
+
find_file(path)
|
165
|
+
when %r'(.*)/spec/(.*/)?(.*?)_spec\.rb\z'
|
166
|
+
path = find_test_target_path($1, $2, $3)
|
167
|
+
find_file(path)
|
179
168
|
when %r'(.*)/(?:lib|app)/(.*/)?(.*?)\.rb\z'
|
180
|
-
|
181
|
-
|
182
|
-
name = $3
|
183
|
-
if namespace
|
184
|
-
paths = Dir.glob("#{base}/test/**/#{namespace}test_#{name}.rb")
|
185
|
-
if !paths.empty?
|
186
|
-
find_file(paths.first)
|
187
|
-
return
|
188
|
-
end
|
189
|
-
end
|
190
|
-
paths = Dir.glob("#{base}/test/**/test_#{name}.rb")
|
191
|
-
if !paths.empty?
|
192
|
-
find_file(paths.first)
|
193
|
-
return
|
194
|
-
end
|
195
|
-
raise EditorError, "Test not found"
|
169
|
+
path = find_test_path($1, $2, $3)
|
170
|
+
find_file(path)
|
196
171
|
else
|
197
172
|
raise EditorError, "Unknown file type"
|
198
173
|
end
|
@@ -227,6 +202,7 @@ module Textbringer
|
|
227
202
|
end
|
228
203
|
@buffer.save_excursion do
|
229
204
|
@buffer.beginning_of_line
|
205
|
+
start_with_period = @buffer.looking_at?(/[ \t]*\./)
|
230
206
|
bol_pos = @buffer.point
|
231
207
|
base_indentation = beginning_of_indentation
|
232
208
|
start_pos = @buffer.point
|
@@ -240,8 +216,9 @@ module Textbringer
|
|
240
216
|
event == :on_tstring_content
|
241
217
|
return nil
|
242
218
|
end
|
243
|
-
|
244
|
-
|
219
|
+
i = find_nearest_beginning_token(tokens)
|
220
|
+
(line, column), event, = i ? tokens[i] : nil
|
221
|
+
if event == :on_lparen && tokens.dig(i + 1, 1) != :on_ignored_nl
|
245
222
|
return column + 1
|
246
223
|
end
|
247
224
|
if line
|
@@ -272,10 +249,11 @@ module Textbringer
|
|
272
249
|
_, last_event, last_text = tokens.reverse_each.find { |_, e, _|
|
273
250
|
e != :on_sp && e != :on_nl && e != :on_ignored_nl
|
274
251
|
}
|
275
|
-
if
|
252
|
+
if start_with_period ||
|
253
|
+
(last_event == :on_op && last_text != "|") ||
|
276
254
|
last_event == :on_period ||
|
277
|
-
(last_event == :on_comma &&
|
278
|
-
event != :
|
255
|
+
(last_event == :on_comma && event != :on_lbrace &&
|
256
|
+
event != :on_lparen && event != :on_lbracket)
|
279
257
|
indentation += @buffer[:indent_level]
|
280
258
|
end
|
281
259
|
indentation
|
@@ -291,7 +269,7 @@ module Textbringer
|
|
291
269
|
def find_nearest_beginning_token(tokens)
|
292
270
|
stack = []
|
293
271
|
(tokens.size - 1).downto(0) do |i|
|
294
|
-
(line,
|
272
|
+
(line, ), event, text = tokens[i]
|
295
273
|
case event
|
296
274
|
when :on_kw
|
297
275
|
_, prev_event, _ = tokens[i - 1]
|
@@ -305,7 +283,7 @@ module Textbringer
|
|
305
283
|
next if t && !(t[1] == :on_op && t[2] == "=")
|
306
284
|
end
|
307
285
|
if stack.empty?
|
308
|
-
return
|
286
|
+
return i
|
309
287
|
end
|
310
288
|
if stack.last != "end"
|
311
289
|
raise EditorError, "#{@buffer.name}:#{line}: Unmatched #{text}"
|
@@ -318,7 +296,7 @@ module Textbringer
|
|
318
296
|
stack.push(text)
|
319
297
|
when :on_lbrace, :on_lparen, :on_lbracket, :on_tlambeg
|
320
298
|
if stack.empty?
|
321
|
-
return
|
299
|
+
return i
|
322
300
|
end
|
323
301
|
if stack.last != BLOCK_END[text]
|
324
302
|
raise EditorError, "#{@buffer.name}:#{line}: Unmatched #{text}"
|
@@ -329,6 +307,34 @@ module Textbringer
|
|
329
307
|
return nil
|
330
308
|
end
|
331
309
|
|
310
|
+
def find_test_target_path(base, namespace, name)
|
311
|
+
patterns = []
|
312
|
+
if namespace
|
313
|
+
patterns.push("#{base}/{lib,app}/**/#{namespace}#{name}.rb")
|
314
|
+
end
|
315
|
+
patterns.push("#{base}/{lib,app}/**/#{name}.rb")
|
316
|
+
find_first_path(patterns) or raise EditorError, "Test target not found"
|
317
|
+
end
|
318
|
+
|
319
|
+
def find_test_path(base, namespace, name)
|
320
|
+
patterns = []
|
321
|
+
if namespace
|
322
|
+
patterns.push("#{base}/test/**/#{namespace}test_#{name}.rb")
|
323
|
+
patterns.push("#{base}/spec/**/#{namespace}#{name}_spec.rb")
|
324
|
+
end
|
325
|
+
patterns.push("#{base}/test/**/test_#{name}.rb")
|
326
|
+
patterns.push("#{base}/spec/**/#{name}_spec.rb")
|
327
|
+
find_first_path(patterns) or raise EditorError, "Test not found"
|
328
|
+
end
|
329
|
+
|
330
|
+
def find_first_path(patterns)
|
331
|
+
patterns.each do |pattern|
|
332
|
+
paths = Dir.glob(pattern)
|
333
|
+
return paths.first if !paths.empty?
|
334
|
+
end
|
335
|
+
nil
|
336
|
+
end
|
337
|
+
|
332
338
|
class PartialLiteralAnalyzer < Ripper
|
333
339
|
def self.in_literal?(src)
|
334
340
|
new(src).in_literal?
|
data/lib/textbringer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: textbringer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -260,7 +260,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
260
260
|
version: '0'
|
261
261
|
requirements: []
|
262
262
|
rubyforge_project:
|
263
|
-
rubygems_version:
|
263
|
+
rubygems_version: 2.7.6
|
264
264
|
signing_key:
|
265
265
|
specification_version: 4
|
266
266
|
summary: An Emacs-like text editor
|