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))

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

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

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  2. JUC源码分析-其它工具类(一)ThreadLocalRandom

    JUC源码分析-其它工具类(一)ThreadLocalRandom ThreadLocalRandom 是 JDK7 在 JUC 包下新增的随机数生成器,它解决了 Random 在多线程下多个线程竞争 ...

  3. 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01

    百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...

  4. 实例源码--Android小工具源码

      下载源码   技术要点: 1. Android控件布局的使用 2. Http通信 3. XML数据解析 4. 网络状态的监听 5. 源码带有非常详细的中文注释 ...... 详细介绍: 1. An ...

  5. Eclipse与Android源码中ProGuard工具的使用(代码混淆)

    由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的 ...

  6. Java Jar源码反编译工具那家强

    本文介绍下Java Jar常见的反编译工具,并给出使用感受. 反编译JAR能干什么: 排查问题.分析商业软件代码逻辑,学习优秀的源码思路. JD-GUI 下载地址:http://java-decomp ...

  7. APICloud案例源码、模块源码、考试源码、开发工具大集合!赶快收藏

    APICloud专注于APP开发定制技术,多年来不停为开发者奉献更多的资源.此次,APICloud将以往的的资源进行更新.整合,以合集的形式分享给广大的用户. APICloud应用案例源码合集 API ...

  8. 实例源码--Android理财工具源码

      下载源码   技术要点: 1.Sqlite数据库的综合使用 2.控件的综合使用 3. 源码带详细的中文注释 ...... 详细介绍: 1. Sqlite数据库的综合使用 本套源码采用了Sqlite ...

  9. jQuery源码分析_工具方法(学习笔记)

    expando:生成唯一JQ字符串(内部使用) noConflict():防止冲突 isReady:DOM是否加载完成(内部) readyWait:等待多少文件的计数器(内部) holdReady() ...

随机推荐

  1. Keras简单使用

    Keras简单使用在keras中建立模型测试自己的图片一些有用的函数(持续更新) Keras简单使用 在keras中建立模型 相对于自己写机器学习相关的函数,keras更能快速搭建模型,流程如下: 通 ...

  2. WinForm中DataReader绑定到DataGridView的两种方法

    在WinForm中,DataReader是不能直接绑定到DataGridView的,我想到了用两种方法来实现将DataReader绑定到DataGridView. SqlCommand command ...

  3. 使用asp.net 开发的一个东平人才网招聘程序

    本人用asp.net 工作已经一两年时间了,在单位一般是做管理系统类的开发,针对的客户大都是政府机关,所以都是内网系统,虽然有成就感,但是无法再互联网上展示.虽然技术一般,但还是希望自己做一个网站在互 ...

  4. shopping car 1.0

    #!/usr/bin/env python# -*- coding: utf-8 -*-# @File : 20180510001.py# @Author: Anthony.waa# @Date : ...

  5. 运行Tomcat闪退问题,报的错误:Unsupported major.minor version 51.0

    在MyEclipse中运行tomcat,tomcat闪退并且报以下错误. java.lang.UnsupportedClassVersionError: org/apache/catalina/sta ...

  6. java 抽象工厂模式简单实例

    抽象工厂模式:提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生. 类似于工厂模式:隔离了具体类的生产实现,使得替换具体的工厂实现类很容易.包含有 ...

  7. caffe学习笔记--跑个SampleCode

    Caffe默认情况会安装在CAFFERROOT,就是解压到那个目录,例如: home/username/caffe-master, 所以下面的工作,默认已经切换到了该工作目录.下面的工作主要是,用于测 ...

  8. (转) RabbitMQ学习之helloword(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40835555 amqp-client:http://www.rabbitmq.com/java-c ...

  9. Visual Studio 2015中 安卓环境 cannot find adb.exe in specified sdk path

    安装完成后 发现 C:\Program Files (x86)\Android\android-sdk\platforms 是空的,用SDK Manager进行安装时发现 它需要往C:\Program ...

  10. JDK源码中的英文注释翻译(Enum<E extends Enum<E>>)

    public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializab ...