源码高速定位工具-qwandry

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打开指定的文件夹,打开文件夹的方法非常easy

system(*(editor_and_options + paths))
时间: 2024-12-16 19:29:38

源码高速定位工具-qwandry的相关文章

Android应用源码带定位和密码找回的锁屏项目

Android应用源码带定位和密码找回的锁屏项目 首先这是个锁屏的应用项目源码,并且有录制手势的功能不过与传统的九宫格不一样,即使源码里面有注释但是至今我也没有弄明白他的手势录制方法, 项目里面貌似还用到了GPS和五次解锁失败就会向指定手机号发送短信,不过我没有细看,源码有比较详细的注释,正在研究锁屏的朋友不要错过,本项目默认编译版本4.4.2编码GBK. 下载地址:http://www.devstore.cn/code/info/173.html    

jQuery源码学习3——工具方法篇

基本工具方法结构如下: jQuery.extend({ init:function(){}, each:function(){}, className:{ add:function(){}, remove:function(){}, has:function(){}, }, swap:function(){}, css:function(){}, curCSS:function(){}, clean:function(){}, expr:{}, token:[], find:function()

Eclipse与Android源码中ProGuard工具的使用

由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的理解和认识简要的做个笔记,有异议或者不解的,可以直接留言. 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类.字段和函数等,达到压缩.优化和混淆代码的功能.具体来说,使用ProGuard工具

jQuery源码学习5——工具方法之attr parents sibling clean

(1).attr attr: function(elem, name, value){ var fix = { "for": "htmlFor", "class": "className", "float": "cssFloat", innerHTML: "innerHTML", className: "className" }; if ( fix

Fortify源码安全检测工具

今天老大让查了一下Fortify和sonarquebe的区别,网上找到的Fortify的介绍,这里转发一下. 源网址为:http://bbs.51testing.com/forum.php?mod=viewthread&tid=1193122&ordertype=1 Fortify Source Code Analysis Suite是目前在全球使用最为广泛的软件源代码安全扫描,分析和软件安全风险管理软件.该软件多次荣获全球著名的软件安全大奖,包括InforWord, Jolt,SC Ma

jquery源码分析(三)——工具函数

jQuery.extend({ expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),//生成字符串,使用Math.random生成随机数并使用正则去掉了非数字字符. //这里它作为HTMLElement或JS对象的属性名 isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function

源码解读之工具--Source Insight

1.Source Insight 这个工具又叫做程序编辑器和代码浏览器,支持C/C++.C#.java等的分析,是一款功能强大的处理大型项目所需的软件,是一个程序员的必备软件: 针对Linux内核的剖析,是几百M大的文件,上百万行的代码,从中快速的浏览,找到你所需要的函数.变量名称,代码的追踪都是很好的,此时不可能一行一行的查找代码,所以就有了这个需求,这款软件就是解决这个问题的. 在工程项目中,它的作用是巨大的,针对几百.上千行的代码没有必要使用这个软件,现在针对的是Linux内核,工欲善其事

反编译Android的apk包得到源码(使用工具:dex2jar和jd-gui)

1. 先从 http://download.csdn.net/detail/dingyuming1991/9618125 下载反编译工具dex2jar和jd-gui(当然也可以google搜索下载): 2. 将要反编译的apk包改扩展名为zip(apk包实则为zip压缩包),解压zip文件: 3. 在解压出来的文件夹中会有个classes.dex文件(程序的二进制文件),在下载dex2jar和jd-gui中找到dex2jar程序,在cmd窗 口中运行  dex2jar classes.dex ,

Windows虚拟地址转物理地址(原理+源码实现,附简单小工具)

                                                                                                     By Lthis 上个月就想写了,一直没时间...网上大概搜了一下,原理与操作倒是一大堆,一直没看到源码实现,总得有人动手,这回轮到我了.东西写得很烂,请大牛勿喷.一直觉得靠源码的方式驱动学习是非常好的一种学习方法,比较直观!声明一下,本教程只有讨论开启PAE与关闭PAE两种,至于PSE是否开启没