源代码快速定位工具-qwandry

原创 2014年07月03日 14:51:35

https://github.com/adamsanderson/qwandry


qwandry 能快速定位到我们需要找到 库文件, 项目 的工具。 

Ruby中实现快速定位的方法有好多种,我知道的有三个:

  1. 使用bundle
    命令是

    cd `bundle show activerecord`

    这个方法不方便的地方是 只能在支持bundle的环境下运行,而且只能打开指定的gem目录

  2. 通过tag方法(tag 定位更精确,可以定位到方法级别)

    局限:  只能在对应的编辑器里运行

  3. 或者通过 qwandry

安装


gem install qwandry


使用

qw matrix        # opens ruby's matrix class in your editor
qw rails         # will ask you which version of rails you want to open
qw activerec 3.1 # will find the gem activerecord 3.1 and open it
You can also use Qwandry with other common languages:
qw -r python numpy # opens python's numpy library
qw -r perl URI     # open perl's URI library
qw -r node express # open express if it is installed for node



指定编辑器打开

EDITOR=subl qw activerecord 3.2.14



如何自定义?


touch ~/.qwandry/init.rb


然后copy如下内容到文件中

register 'projects' do
  add 'your project path'
end

default :ruby, :gem, :projects

解释

register 方法是 将指定的目录打包
add 将目录加入到搜索中 

default 是设置默认的搜索范围 


实现的基本原理

  1. 通过配置 config 将很多目录打包成 Package, 然后将 Package 打包成 Repository(仓库)
  2. 初始化一个Launcher(有Editor等)
  3. 根据输入的名称找到对应的Repository中的package(实际上是一个目录地址)
  4. 执行系统命令: editor(vim) path

源代码分析

qwandry中比较重要的几个类

Repository

是一个基类,职责是存储所有的可以搜索的库目录和名称. 继承与它的子类必须实现  scan 方法。

它有两个子类: LibraryRepository 和 FlatRepository 


Configuration

是一个用于配置搜索库的目录的类,可以动态的添加新的搜索路径。 实现的方法比较track, 用的是万恶得 eval 方法。


Launcher

是用于打开指定目录的关键类。它有两个关键方法: find 和  launch 

find方法的实现

    # Searches all of the loaded repositories for `name`
    def find(*pattern)
      # Create a glob pattern from the user's input, for instance
      # ["rails","2.3"] => "rails*2.3*"
      pattern = pattern.join('*')
      pattern << '*' unless pattern =~ /\*$/
      
      packages = []
      repositories = Qwandry::Configuration.repositories
      repositories.each do |repo|
        packages.concat(repo.scan(pattern))
      end
      
      differentiate packages
      packages
    end

就是从仓库中找到合适得 Package 


launch 方法的实现

    # Launches a Package or path represented by a String. Unless `editor` will
    # check against the environment by default.
    def launch(package, editor=nil)
      editor ||= @editor || ENV['QWANDRY_EDITOR'] || ENV['VISUAL'] || ENV['EDITOR']
      
      if (!editor) || (editor =~ /^\s*$/) # if the editor is not set, or is blank, exit with a message:
        puts "Please set QWANDRY_EDITOR, VISUAL or EDITOR, or pass in an editor to use"
        exit 1
      end
      
      paths = package.is_a?(String) ? [package] : package.paths
      # Editors may have options, 'mate -w' for instance
      editor_and_options = editor.strip.split(/\s+/)
      
      Dir.chdir(File.dirname paths.first) do
        # Launch the editor with its options and any paths that we have been passed
        system(*(editor_and_options + paths))
      end
    end

基本的思路就是找到对应的editor打开指定的目录,打开目录的方法很简单

system(*(editor_and_options + paths))






快速定位Emacs_Lisp源代码

使用Emacs的过程中,经常会要查看各种库,函数或变量定义的源代码. 一般的方法是使用C-h f(describe-function), C-h v (describe-variable) 和 C-h...
  • lujun9972
  • lujun9972
  • 2015年05月26日 07:37
  • 494

如何定位某个java类在哪个jar文件

当你的classpath非常长,包含上百个.jar文件时,如果知道某个类在哪个.jar里呢?以前经常碰到这种问题,因为忙,没有管它,今天写了个小shellfindclass.sh:for i in ....
  • mildwind
  • mildwind
  • 2005年10月12日 15:14
  • 1074

拿到一份开源项目,快速定位感兴趣的功能代码

http://drakeet.me/quickly-locate-the-function-code 现在越来越多的开源项目了,令人收藏不暇,有时只是觉得对方的某个 feature 特别喜欢...
  • lijinhua7602
  • lijinhua7602
  • 2016年01月29日 18:23
  • 607

Linux下内存泄漏定位常用工具介绍

写在前面: 本人只是一个linux开发新手,对linux
  • u011466536
  • u011466536
  • 2014年10月04日 10:36
  • 1668

HTML页面中快速定位

a href="#bottom">链接到底部a> div style="height:1000px;">centerdiv> div style="border:1px solid #F00; hei...
  • llwan
  • llwan
  • 2012年08月24日 11:05
  • 8892

快速导入源代码到word 软件著作权源代码需要

使用word软件 点击插入->对象-文件中的文字->然后浏览任意后缀名文件选择大量文件夹或者文件选择导入即可。...
  • u010042660
  • u010042660
  • 2017年10月12日 17:23
  • 528

Android定位的实现

原文地址:http://blog.csdn.net/limb99/article/details/8765584
  • shiguangbianjing
  • shiguangbianjing
  • 2014年04月14日 09:42
  • 4350

玩转gps 快速定位

先来说两个基本概念:   1.TTFF:Time To First Fix,首次定位时间,这是衡量GPS芯片定位能力的重要参数,严格意义来说,这是没有AGPS时冷启动(清除了GPS内存中所有的数...
  • lqxandroid2012
  • lqxandroid2012
  • 2015年11月12日 18:28
  • 1016

eclipse 快速定位一个类

ctrl+shift+Rctrl+shift+T
  • zwhfyy
  • zwhfyy
  • 2009年01月09日 10:06
  • 4918

java 线上问题定位工具

java 线上问题定位工具
  • u012719556
  • u012719556
  • 2016年10月02日 15:29
  • 688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:源代码快速定位工具-qwandry
举报原因:
原因补充:

(最多只允许输入30个字)