У Джулии есть @edit
, @less
и т. д., которые очень удобны для чтения реализации функций. Однако вам необходимо указать «достаточно хороший» набор параметров (типа), чтобы они могли найти расположение кода.
Вместо этого InteractiveCodeSearch
предоставляет несколько макросов для интерактивного выбора кода, который вы хотите прочитать.
@search show
, выражению вызова функции @search show(stdout, "hello")
, сигнатуре вызова функции @search show(::IO, ::String)
, имени модуля @search Base
, значение аргумента @searchmethods 1
и тип аргумента @searchmethods ::Int
. using InteractiveCodeSearch
@search show # search method definitions
@searchmethods 1 # search methods defined for integer
@searchhistory # search history (Julia ≥ 0.7)
Интерактивная команда сопоставления. Например:
@search
@search x [:shallow | :s | :recursive | :r]
Перечислите местоположения файлов, в которых x
определены в интерактивном сопоставителе, а затем откройте выбранное местоположение в редакторе.
Когда x
является модулем, поиск выполняется только в определениях верхнего уровня. Чтобы выполнить поиск по всем определениям в подмодуле, передайте флаг :recursive
или :r
.
@search
Если выражение не указано, найдите метод, возвращенный предыдущим выполнением; т. е. x
по умолчанию имеет значение ans
.
Примеры
@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
Обратите внимание, что @search
оценивает сложное выражение с помощью .
и []
например, и найдите возвращаемое значение или его тип:
@search Base . Multimedia . displays[ 2 ] . repl
@searchmethods
@searchmethods x
@searchmethods ::X
Выполняйте интерактивный поиск по methodswith(typeof(x))
или methodswith(X)
.
Примеры
@searchmethods 1 # search methods defined for integer
@searchmethods :: Int # search methods defined for a specified type
@searchhistory
@searchhistory
История поиска в интерактивном режиме. В интерактивном режиме сужает код, который вы ищете, из истории REPL.
Ограничение/функция в IJulia : В IJulia @searchhistory
ищет историю REPL терминала, а не историю текущего сеанса IJulia.
InteractiveCodeSearch.CONFIG
Интерфейс конфигурации для InteractiveCodeSearch
.
Примеры
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
Использование InteractiveCodeSearch.jl по умолчанию
Поместите следующий код в ваш ~/.julia/config/startup.jl
(≥ Julia 0.7) или ~/.juliarc.jl
(Julia 0.6):
using InteractiveCodeSearch
# InteractiveCodeSearch.CONFIG.interactive_matcher = ...