diff --git a/.gitignore b/.gitignore index 853c518..7cd5a78 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ dump.rdb /app/assets/builds/* !/app/assets/builds/.keep + +# Ignore generated ctags +*.tags diff --git a/lib/tasks/ctags.rake b/lib/tasks/ctags.rake new file mode 100644 index 0000000..908fcc8 --- /dev/null +++ b/lib/tasks/ctags.rake @@ -0,0 +1,29 @@ +module Kosmos + class Ctags + def self.generate_app_tags + excludes = %w[.git gitno log tmp public].join(" --exclude ") + cmd = "ctags -R --languages=ruby --exclude #{excludes} ." + system cmd + end + + def self.generate_bundler_tags + runtime = ::Bundler::Runtime.new Dir.pwd, ::Bundler.definition + paths = runtime.specs.map(&:full_gem_path) + generate_tags(paths, "gems.tags") + end + + def self.generate_tags(paths, tag_file) + paths = paths.join(' ').strip + cmd = "find #{paths} -ignore_readdir_race -type f -name '*.rb' 2>/dev/null | ctags -f #{tag_file} -L -" + system cmd + end + end +end + +namespace :ctags do + desc 'generate ctags' + task :create do + Kosmos::Ctags.generate_app_tags + Kosmos::Ctags.generate_bundler_tags + end +end