• Stars
    star
    106
  • Rank 325,871 (Top 7 %)
  • Language
    Julia
  • License
    Other
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Interactively search Julia code from terminal

InteractiveCodeSearch.jl –- Interactively search Julia code

Build Status codecov.io

gif animation

Julia has @edit, @less, etc. which are very handy for reading the implementation of functions. However, you need to specify a "good enough" set of (type) parameters for them to find the location of the code.

Instead, InteractiveCodeSearch provides a few macros to interactively choose the code you want to read.

Features

  • Interactively choose a method signature before opening the code location in your editor.
  • Various ways to search methods, such as: by function name @search show, function call expression @search show(stdout, "hello"), function call signature @search show(::IO, ::String), module name @search Base, argument value @searchmethods 1, and argument type @searchmethods ::Int.
  • Interactively search history. It works in IJulia as well.

Examples

using InteractiveCodeSearch
@search show             # search method definitions
@searchmethods 1         # search methods defined for integer
@searchhistory           # search history (Julia ≥ 0.7)

Requirements

  • Interactive matching command. For example:

Reference

@search

@search x [:shallow | :s | :recursive | :r]

List file locations at which x are defined in an interactive matcher and then open the chosen location in the editor.

When x is a module, only the top-level definitions are searched. To search all definitions in the submodule, pass :recursive or :r flag.

@search

If no expression is provided, search for the method returned by the previous execution; i.e., x defaults to ans.

Examples

@search show                      # all method definitions
@search @time                     # all macro definitions
@search Base.Enums                # methods and macros in a module
@search REPL :r                   # search the module recursively
@search *(::Integer, ::Integer)   # methods with specified types
@search dot(π, ℯ)                 # methods with inferred types

Note that @search evaluates complex expression with . and [] such as follows and search the returned value or the type of it:

@search Base.Multimedia.displays[2].repl

@searchmethods

@searchmethods x
@searchmethods ::X

Interactively search through methodswith(typeof(x)) or methodswith(X).

Examples

@searchmethods 1         # search methods defined for integer
@searchmethods ::Int     # search methods defined for a specified type

@searchhistory

@searchhistory

Search history interactively. Interactively narrows down the code you looking for from the REPL history.

Limitation/feature in IJulia: In IJulia, @searchhistory searches history of terminal REPL, not the history of the current IJulia session.

InteractiveCodeSearch.CONFIG

Configuration interface for InteractiveCodeSearch.

Examples

using InteractiveCodeSearch
InteractiveCodeSearch.CONFIG.interactive_matcher = `fzf ...`  # default in terminal
InteractiveCodeSearch.CONFIG.interactive_matcher = `peco`
InteractiveCodeSearch.CONFIG.interactive_matcher = `percol`
InteractiveCodeSearch.CONFIG.interactive_matcher =
    `rofi -dmenu -i -p "🔎"`  # use GUI matcher (default in non-terminal
                              # environment like IJulia)
InteractiveCodeSearch.CONFIG.interactive_matcher =
    `rofi -dmenu -i -p "🔎" -fullscreen`  # bigger screen
InteractiveCodeSearch.CONFIG.open = edit  # default
InteractiveCodeSearch.CONFIG.open = less  # use Base.less to read code
InteractiveCodeSearch.CONFIG.auto_open = true   # default
InteractiveCodeSearch.CONFIG.auto_open = false  # open matcher even when there
                                                # is only one candidate
InteractiveCodeSearch.CONFIG.trigger_key = ')'      # insert "@search" on ')' (default)
InteractiveCodeSearch.CONFIG.trigger_key = nothing  # disable shortcut

Using InteractiveCodeSearch.jl by default

Put the following code in your ~/.julia/config/startup.jl (≥ Julia 0.7) or ~/.juliarc.jl (Julia 0.6):

using InteractiveCodeSearch
# InteractiveCodeSearch.CONFIG.interactive_matcher = ...

More Repositories

1

emacs-jedi

Python auto-completion for Emacs
Emacs Lisp
655
star
2

emacs-request

Request.el -- Easy HTTP request for Emacs Lisp
Emacs Lisp
625
star
3

emacs-ipython-notebook

IPython notebook client in Emacs
Emacs Lisp
546
star
4

ThreadsX.jl

Parallelized Base functions
Julia
297
star
5

python-epc

EPC (RPC stack for Emacs Lisp) for Python
Python
89
star
6

rash

Rash Advances Shell History
Python
83
star
7

emacs-jedi-direx

Tree style source code viewer for Python buffer
Emacs Lisp
71
star
8

emacs-python-environment

Python virtualenv API for Emacs Lisp
Emacs Lisp
59
star
9

BenchmarkCI.jl

Julia
52
star
10

org-mode

Emacs Lisp
41
star
11

ipython-hierarchymagic

`%hierarchy` and `%%dot` magics for IPython
Python
40
star
12

Kaleido.jl

Some useful lenses
Julia
33
star
13

ShowCode.jl

A tool for exploring and visualizing Julia code
Julia
24
star
14

Mutabilities.jl

Julia
24
star
15

Try.jl

Zero-overhead and debuggable error handling
Julia
22
star
16

inkscape-export-layers

Export selected layers from Inkscape SVG.
Python
21
star
17

DisplayAs.jl

Julia
19
star
18

Baselet.jl

Base API optimized for tuples
Julia
18
star
19

Run.jl

Julia
17
star
20

ne2wm

E2WM superpack
Emacs Lisp
14
star
21

PublicAPI.jl

PublicAPI.jl provides a simple API for declaring API without exporting the names
Julia
12
star
22

orgviz

Browser based app to view org-mode files from different directions -- calendar / table / histogram / time line
Python
12
star
23

Referenceables.jl

Julia
12
star
24

Terminators.jl

Julia
11
star
25

JuliaCLI.jl

Julia
11
star
26

LyapunovExponents.jl

A hackable Lyapunov exponents calculator
Julia
10
star
27

ipython-sqlitemagic

SQLite magics for IPython
Python
10
star
28

DocumentationOverview.jl

Julia
10
star
29

TaskDAGAnalyzers.jl

Julia
10
star
30

ContextVariablesX.jl

Julia
10
star
31

UnderscoreOh.jl

call graphs as recompilation-free capture-by-value closures
Julia
9
star
32

auto-complete-rst

Auto-complete extension for ReST and Sphinx
Python
9
star
33

conda-julia

Conda recipes for JuliaLang and its packages
Shell
9
star
34

JuliaManager.jl

System image manager for Julia
Python
8
star
35

Restacker.jl

Put immutables back in the stack
Julia
8
star
36

PyBase.jl

Python
8
star
37

matplotlibrc-zenburn

8
star
38

IPython.jl

Run IPython inside Julia to exchange data interactively
Python
8
star
39

ColorfulCodeGen.jl

Syntax-highlighted version of @code_llvm etc.
Julia
7
star
40

git-blackhole

Continuous backup and recoverable trash can for Git
Python
6
star
41

fillplots

Library to plot regions and boundaries given inequalities
Python
6
star
42

Restarts.jl

Julia
6
star
43

ipython-doctestmagic

Run and debug doctest in IPython
Python
6
star
44

auto-complete-chunk

Auto-completion for dot.separated.words.
Emacs Lisp
6
star
45

Awaits.jl

[WIP] Structured concurrency for parallel computing
Julia
6
star
46

InteractiveFormatter.jl

Julia
6
star
47

PyVenvs.jl

Julian interface for Pythonic virtual environments
Julia
6
star
48

Schedulers.jl

Multi-scheduler for/in Julia
Julia
5
star
49

mplchaco

Matplotlib to Chaco converter
Python
5
star
50

balance-tutorial-ja

Python
5
star
51

VegaStreams.jl

"Real-time" plotting with VegaLite.jl and ElectronDisplay.jl
Julia
5
star
52

IndirectImports.jl

Import and extend packages without importing them
Julia
5
star
53

sphinx-eldomain

Emacs Lisp domain -- Sphinx extension for Emacs Lisp
Python
5
star
54

JuliaProjectFormatter.jl

Julia
5
star
55

ThreadedArrays.jl

"Easy" parallelism injection
Julia
5
star
56

railgun

ctypes utilities for faster and easier simulation programming in C and Python
Python
4
star
57

ipython-importfilemagic

Python
4
star
58

julia-code-style-suggesters

4
star
59

ShowGraphviz.jl

Julia
4
star
60

Recalls.jl

Julia
4
star
61

BroadcastableStructs.jl

Julia
4
star
62

SparseXX.jl

Sparse arrays with eXperimental eXtensions
Julia
4
star
63

ipython-tempmagic

Python
4
star
64

julia-python-snippets

Julia
4
star
65

MIMEFileExtensions.jl

Julia
4
star
66

ConsoleProgressMonitor.jl

Julia
4
star
67

uniquify

Python
4
star
68

ExternalDocstrings.jl

Julia
4
star
69

Tofu.jl

◻◻◻
Julia
3
star
70

zeroein

zeoroein is merged to EIN
Python
3
star
71

ParallelIncrements.jl

Julia
3
star
72

emacs-plugin-template

Minimal emacs plug-in template with setup for Travis CI
Emacs Lisp
3
star
73

TmuxDisplays.jl

Julia
3
star
74

NDReducibles.jl

Julia
3
star
75

GroundEffects.jl

Julia
3
star
76

emacs-pythonista

Preconfigured Python modes for Pythonista
Emacs Lisp
3
star
77

Reconstructables.jl

Tools for easy "modification" of nested immutable structs
Julia
3
star
78

ipyjulia_hacks

🐒 Horrible hacks 🐍
Python
3
star
79

traitscli

CLI generator for Python based on class traits
Python
3
star
80

rstcheck

reStructuredText checker
Python
3
star
81

emacs-pinot-search

Use pinot desktop meta search engine via Emacs anything/helm interface
Emacs Lisp
3
star
82

AtBackslash.jl

Julia
3
star
83

ContextManagers.jl

Julia
3
star
84

Kwonly.jl

Macro to generate keyword-only version of a function
Julia
3
star
85

julia-venv

Virtual Julia environments for PyJulia
Python
3
star
86

cheat_sheet

my cheat sheet
2
star
87

reflected-buffers

Indirect buffer-like feature, but without sharing text properties such as font lock.
Emacs Lisp
2
star
88

ChainCutters.jl

Julia
2
star
89

InferableTasks.jl

Julia
2
star
90

mybin

my scripts
Shell
2
star
91

emacs-codethumb

Emacs Lisp
2
star
92

dotfiles

linux dotfiles
Emacs Lisp
2
star
93

websocket-el-pre

Emacs Lisp
2
star
94

BenchmarkConfigSweeps.jl

Julia
2
star
95

PyPreferences.jl

Julia
2
star
96

emacs-deferred-flyspell

Emacs Lisp
2
star
97

EventTracker.jl

Julia
2
star
98

UnsafeFields.jl

Julia
2
star
99

bvcs

Batched VCS command runner
Python
2
star
100

BenchSweeps.jl

Julia
2
star