Module: VER::Methods::Ctags

Included in:
VER::Methods
Defined in:
lib/ver/methods/ctags.rb

Instance Method Summary collapse

Instance Method Details

#ctags_contentObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ver/methods/ctags.rb', line 34

def ctags_content
  dir = filename.dirname
  file = nil

  loop do
    file = dir/'tags'
    break if file.file? || dir.root?
    dir = dir.parent
  end

  return unless file.file?

  file.open 'rb' do |io|
    io.each_line do |line|
      head, tail = line.split(/;"\t/, 2)
      yield(*head.split("\t"))
    end
  end
end

#ctags_execute(file_name, ex_cmd) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ver/methods/ctags.rb', line 16

def ctags_execute(file_name, ex_cmd)
  case ex_cmd
  when /^\d+$/
    view.find_or_create(file_name) do |view|
      view.text.go_line(ex_cmd.to_i)
    end
  when /^\/(.*)\/$/
    source = $1.gsub!(/(?!\\)([()])/, '\\\\\\1')
    regexp = Regexp.new(source)
    self.view.find_or_create(file_name) do |view|
      view.text.tag_all_matching(:search, regexp, Search::SEARCH_HIGHLIGHT)
      view.text.search_next
    end
  else
    raise ArgumentError, "Unknown Ex command: %p" % [ex_cmd]
  end
end

#ctags_find(needle) ⇒ Object



9
10
11
12
13
14
# File 'lib/ver/methods/ctags.rb', line 9

def ctags_find(needle)
  ctags_content do |tag_name, file_name, ex_cmd|
    next unless tag_name == needle
    return ctags_execute(file_name, ex_cmd)
  end
end

#ctags_find_currentObject



4
5
6
7
# File 'lib/ver/methods/ctags.rb', line 4

def ctags_find_current
  word = get('insert wordstart', 'insert wordend')
  ctags_find(word)
end