| % File src/library/utils/man/rcompgen.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 2008-2014 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{rcompgen} |
| \alias{rcompgen} |
| \alias{rc.settings} |
| \alias{rc.status} |
| \alias{rc.getOption} |
| \alias{rc.options} |
| \alias{.DollarNames} |
| \alias{.DollarNames.default} |
| \alias{.DollarNames.list} |
| \alias{.DollarNames.environment} |
| \alias{completion} |
| |
| \title{A Completion Generator for R} |
| |
| \description{ |
| This page documents a mechanism to generate relevant completions |
| from a partially completed command line. It is not intended to be |
| useful by itself, but rather in conjunction with other mechanisms that |
| use it as a backend. The functions listed in the usage section |
| provide a simple control and query mechanism. The actual interface |
| consists of a few unexported functions described further down. |
| } |
| |
| \usage{ |
| |
| rc.settings(ops, ns, args, dots, func, ipck, S3, data, help, |
| argdb, fuzzy, quotes, files) |
| |
| rc.status() |
| rc.getOption(name) |
| rc.options(\dots) |
| |
| .DollarNames(x, pattern) |
| |
| \S3method{.DollarNames}{default}(x, pattern = "") |
| \S3method{.DollarNames}{list}(x, pattern = "") |
| \S3method{.DollarNames}{environment}(x, pattern = "") |
| |
| } |
| |
| \arguments{ |
| \item{ops, ns, args, dots, func, ipck, S3, data, help, argdb, fuzzy, quotes, files}{ |
| |
| logical, turning some optional completion features on and off. |
| |
| \describe{ |
| \item{\code{ops}:}{ Activates completion after the \code{$} and |
| \code{@} operators. } |
| |
| \item{\code{ns}:}{ Controls namespace related completions. } |
| |
| \item{\code{args}:}{ Enables completion of function arguments. } |
| |
| \item{\code{dots}:}{ If disabled, drops \code{...} from list of |
| function arguments. Relevant only if \code{args} is enabled. |
| } |
| |
| \item{\code{func}:}{ Enables detection of functions. If enabled, |
| a customizable extension (\code{"("} by default) is appended to |
| function names. The process of determining whether a potential |
| completion is a function requires evaluation, including for lazy |
| loaded symbols. This is undesirable for large objects, because |
| of potentially wasteful use of memory in addition to the time |
| overhead associated with loading. For this reason, this feature |
| is disabled by default. } |
| |
| \item{\code{S3}:}{ When \code{args = TRUE}, activates completion on |
| arguments of all S3 methods (otherwise just the generic, which |
| usually has very few arguments). } |
| |
| \item{\code{ipck}:}{ Enables completion of installed package names |
| inside \code{\link{library}} and \code{\link{require}}. } |
| |
| \item{\code{data}:}{ Enables completion of data sets (including |
| those already visible) inside \code{\link{data}}. } |
| |
| \item{\code{help}:}{ Enables completion of help requests starting |
| with a question mark, by looking inside help index files. } |
| |
| \item{\code{argdb}:}{ When \code{args = TRUE}, completion is |
| attempted on function arguments. Generally, the list of valid |
| arguments is determined by dynamic calls to \code{\link{args}}. |
| While this gives results that are technically correct, the use |
| of the \code{\dots} argument often hides some useful arguments. |
| To give more flexibility in this regard, an optional table of |
| valid arguments names for specific functions is retained |
| internally. Setting \code{argdb = TRUE} enables preferential |
| lookup in this internal data base for functions with an entry in |
| it. Of course, this is useful only when the data base contains |
| information about the function of interest. Some functions are |
| already included, and more can be added by the user through the |
| unexported function \code{.addFunctionInfo} (see below). } |
| |
| \item{\code{fuzzy}:}{ Enables fuzzy matching, where close but |
| non-exact matches (e.g., with different case) are considered if |
| no exact matches are found. This feature is experimental and |
| the details can change. } |
| |
| \item{\code{quotes}:}{ Enables completion in \R code when inside |
| quotes. This normally leads to filename completion, but can be |
| otherwise depending on context (for example, when the open quote |
| is preceded by \code{?}), help completion is invoked. Setting |
| this to \code{FALSE} relegates completion to the underlying |
| completion front-end, which may do its own processing (for |
| example, \code{readline} on Unix-alikes will do filename |
| completion). } |
| |
| \item{\code{files}:}{ Deprecated. Use \code{quotes} instead. } |
| |
| } |
| |
| All settings are turned on by default except \code{ipck}, |
| \code{func}, and \code{fuzzy}. Turn more off if your CPU cycles are |
| valuable; you will still retain basic completion on names of objects |
| in the search list. See below for additional details. |
| |
| } |
| \item{name, \dots}{ user-settable options. Currently valid names are |
| \describe{ |
| \item{\code{function.suffix}:}{ default \code{"("} } |
| \item{\code{funarg.suffix}:}{ default \code{" = "} } |
| \item{\code{package.suffix}}{ default \code{"::"} } |
| } |
| Usage is similar to that of \code{\link{options}}. |
| } |
| |
| \item{x}{ An R object for which valid names after \code{"$"} |
| are computed and returned. |
| } |
| |
| \item{pattern}{ A regular expression. Only matching names are |
| returned. |
| } |
| } |
| |
| \details{ |
| There are several types of completion, some of which can be disabled |
| using \code{rc.settings}. The most basic level, which can not be |
| turned off once the completion functionality is activated, provides |
| completion on names visible on the search path, along with a few |
| special keywords (e.g., \code{TRUE}). This type of completion is not |
| attempted if the partial \sQuote{word} (a.k.a. token) being completed |
| is empty (since there would be too many completions). The more |
| advanced types of completion are described below. |
| |
| \describe{ |
| |
| \item{\bold{Completion after extractors \code{$} and \code{@}}:}{ |
| When the \code{ops} setting is turned on, completion after |
| \code{$} and \code{@} is attempted. This requires the prefix to |
| be evaluated, which is attempted unless it involves an explicit |
| function call (implicit function calls involving the use of |
| \code{[}, \code{$}, etc \emph{do not} inhibit evaluation). |
| |
| Valid completions after the \code{$} extractor are determined by |
| the generic function \code{.DollarNames}. Some basic methods are |
| provided, and more can be written for custom classes. |
| } |
| |
| \item{\bold{Completion inside namespaces}:}{ |
| When the \code{ns} setting is turned on, completion inside |
| namespaces is attempted when a token is preceded by the \code{::} |
| or \code{:::} operators. Additionally, the basic completion |
| mechanism is extended to include all loaded namespaces, i.e., |
| \code{foopkg::} becomes a valid completion of \code{foo} if |
| \code{"foopkg"} is a loaded namespace. |
| |
| The completion of package namespaces applies only to already |
| loaded namespaces, i.e.\sspace{}if \code{MASS} is not loaded, |
| \code{MAS} will not complete to \code{MASS::}. However, attempted |
| completion \emph{inside} an apparent namespace will attempt to |
| load the namespace if it is not already loaded, |
| e.g.\sspace{}trying to complete on \code{MASS::fr} will load |
| \code{MASS} if it is not already loaded. |
| } |
| |
| \item{\bold{Completion for help items}:}{ |
| When the \code{help} setting is turned on, completion on help |
| topics is attempted when a token is preceded by \code{?}. |
| Prefixes (such as \code{class}, \code{method}) are supported, as |
| well as quoted help topics containing special characters. |
| } |
| |
| \item{\bold{Completion of function arguments}:}{ |
| When the \code{args} setting is turned on, completion on function |
| arguments is attempted whenever deemed appropriate. The mechanism |
| used will currently fail if the relevant function (at the point |
| where completion is requested) was entered on a previous prompt |
| (which implies in particular that the current line is being typed |
| in response to a continuation prompt, usually \code{+}). Note |
| that separation by newlines is fine. |
| |
| The list of possible argument completions that is generated can be |
| misleading. There is no problem for non-generic functions (except |
| that \code{\dots} is listed as a completion; this is intentional |
| as it signals the fact that the function can accept further |
| arguments). However, for generic functions, it is practically |
| impossible to give a reliable argument list without evaluating |
| arguments (and not even then, in some cases), which is risky (in |
| addition to being difficult to code, which is the real reason it |
| hasn't even been tried), especially when that argument is itself |
| an inline function call. Our compromise is to consider arguments |
| of \emph{all} currently available methods of that generic. This |
| has two drawbacks. First, not all listed completions may be |
| appropriate in the call currently being constructed. Second, for |
| generics with many methods (like \code{print} and \code{plot}), |
| many matches will need to be considered, which may take a |
| noticeable amount of time. Despite these drawbacks, we believe |
| this behaviour to be more useful than the only other practical |
| alternative, which is to list arguments of the generic only. |
| |
| Only S3 methods are currently supported in this fashion, and that |
| can be turned off using the \code{S3} setting. |
| |
| Since arguments can be unnamed in \R function calls, other types |
| of completion are also appropriate whenever argument completion |
| is. Since there are usually many many more visible objects than |
| formal arguments of any particular function, possible argument |
| completions are often buried in a bunch of other possibilities. |
| However, recall that basic completion is suppressed for blank |
| tokens. This can be useful to list possible arguments of a |
| function. For example, trying to complete \code{seq([TAB]} and |
| \code{seq(from = 1, [TAB])} will both list only the arguments of |
| \code{seq} (or any of its methods), whereas trying to complete |
| \code{seq(length[TAB]} will list both the \code{length.out} |
| argument and the \code{length(} function as possible completions. |
| Note that no attempt is made to remove arguments already supplied, |
| as that would incur a further speed penalty. |
| } |
| |
| \item{\bold{Special functions}:}{ |
| For a few special functions (\code{\link{library}}, |
| \code{\link{data}}, etc), the first argument is treated specially, |
| in the sense that normal completion is suppressed, and some |
| function specific completions are enabled if so requested by the |
| settings. The \code{ipck} setting, which controls whether |
| \code{\link{library}} and \code{\link{require}} will complete on |
| \emph{installed packages}, is disabled by default because the |
| first call to \code{\link{installed.packages}} is potentially time |
| consuming (e.g., when packages are installed on a remote network |
| file server). Note, however, that the results of a call to |
| \code{\link{installed.packages}} is cached, so subsequent calls |
| are usually fast, so turning this option on is not particularly |
| onerous even in such situations. |
| } |
| |
| } |
| } |
| |
| \value{ |
| If \code{rc.settings} is called without any arguments, it returns the |
| current settings as a named logical vector. Otherwise, it returns |
| \code{NULL} invisibly. |
| |
| \code{rc.status} returns, as a list, the contents of an internal |
| (unexported) environment that is used to record the results of the |
| last completion attempt. This can be useful for debugging. For such |
| use, one must resist the temptation to use completion when typing the |
| call to \code{rc.status} itself, as that then becomes the last attempt |
| by the time the call is executed. |
| |
| The items of primary interest in the returned list are: |
| |
| \item{comps}{ The possible completions generated by the last |
| call to \code{.completeToken}, as a character vector. } |
| \item{token}{ The token that was (or, is to be) completed, as |
| set by the last call to \code{.assignToken} (possibly inside a call |
| to \code{.guessTokenFromLine}). } |
| \item{linebuffer}{ The full line, as set by the last call to |
| \code{.assignLinebuffer}. } |
| \item{start}{ The start position of the token in the line |
| buffer, as set by the last call to \code{.assignStart}. } |
| \item{end}{ The end position of the token in the line |
| buffer, as set by the last call to \code{.assignEnd}. } |
| \item{fileName}{ Logical, indicating whether the cursor is |
| currently inside quotes. } |
| \item{fguess}{ The name of the function the cursor is currently inside. } |
| \item{isFirstArg}{ Logical. If cursor is inside a function, is it the |
| first argument? } |
| |
| In addition, the components \code{settings} and \code{options} give |
| the current values of settings and options respectively. |
| |
| \code{rc.getOption} and \code{rc.options} behave much like |
| \code{\link{getOption}} and \code{\link{options}} respectively. |
| } |
| |
| |
| \section{Unexported API}{ |
| |
| There are several unexported functions in the package. Of these, |
| a few are special because they provide the API through which other |
| mechanisms can make use of the facilities provided by this package |
| (they are unexported because they are not meant to be called directly |
| by users). The usage of these functions are: |
| |
| \preformatted{ .assignToken(text) |
| .assignLinebuffer(line) |
| .assignStart(start) |
| .assignEnd(end) |
| |
| .completeToken() |
| .retrieveCompletions() |
| .getFileComp() |
| |
| .guessTokenFromLine() |
| .win32consoleCompletion(linebuffer, cursorPosition, |
| check.repeat = TRUE, |
| minlength = -1) |
| |
| .addFunctionInfo(...) |
| } |
| |
| The first four functions set up a completion attempt by specifying the |
| token to be completed (\code{text}), and indicating where |
| (\code{start} and \code{end}, which should be integers) the token is |
| placed within the complete line typed so far (\code{line}). |
| |
| Potential completions of the token are generated by |
| \code{.completeToken}, and the completions can be retrieved as an \R |
| character vector using \code{.retrieveCompletions}. It is possible for |
| the user to specify a replacement for this function by setting |
| \code{rc.options("custom.completer")}; if not \code{NULL}, this |
| function is called to compute potential completions. This facility is |
| meant to help in situations where completing as R code is not |
| appropriate. See source code for more details. |
| |
| If the cursor is inside quotes, completion may be suppressed. The |
| function \code{.getFileComp} can be used after a call to |
| \code{.completeToken} to determine if this is the case (returns |
| \code{TRUE}), and alternative completions generated as deemed useful. |
| In most cases, filename completion is a reasonable fallback. |
| |
| The \code{.guessTokenFromLine} function is provided for use with |
| backends that do not already break a line into tokens. It requires |
| the linebuffer and endpoint (cursor position) to be already set, and |
| itself sets the token and the start position. It returns the token as |
| a character string. |
| |
| The \code{.win32consoleCompletion} is similar in spirit, but is more |
| geared towards the Windows GUI (or rather, any front-end that has no |
| completion facilities of its own). It requires the linebuffer |
| and cursor position as arguments, and returns a list with three |
| components, \code{addition}, \code{possible} and \code{comps}. If |
| there is an unambiguous extension at the current position, |
| \code{addition} contains the additional text that should be inserted |
| at the cursor. If there is more than one possibility, these are |
| available either as a character vector of preformatted strings in |
| \code{possible}, or as a single string in \code{comps}. |
| \code{possible} consists of lines formatted using the current |
| \code{width} option, so that printing them on the console one line at |
| a time will be a reasonable way to list them. \code{comps} is a space |
| separated (collapsed) list of the same completions, in case the |
| front-end wishes to display it in some other fashion. |
| |
| The \code{minlength} argument can be used to suppress completion when |
| the token is too short (which can be useful if the front-end is set up |
| to try completion on every keypress). If \code{check.repeat} is |
| \code{TRUE}, it is detected if the same completion is being requested |
| more than once in a row, and ambiguous completions are returned only |
| in that case. This is an attempt to emulate GNU Readline behaviour, |
| where a single TAB completes up to any unambiguous part, and multiple |
| possibilities are reported only on two consecutive TABs. |
| |
| As the various front-end interfaces evolve, the details of these |
| functions are likely to change as well. |
| |
| The function \code{.addFunctionInfo} can be used to add information |
| about the permitted argument names for specific functions. Multiple |
| named arguments are allowed in calls to it, where the tags are names |
| of functions and values are character vectors representing valid |
| arguments. When the \code{argdb} setting is \code{TRUE}, these are |
| used as a source of valid argument names for the relevant functions. |
| } |
| |
| \note{ |
| If you are uncomfortable with unsolicited evaluation of pieces of |
| code, you should set \code{ops = FALSE}. Otherwise, trying to |
| complete \code{foo@ba} will evaluate \code{foo}, trying to complete |
| \code{foo[i, 1:10]$ba} will evaluate \code{foo[i, 1:10]}, etc. This |
| should not be too bad, as explicit function calls (involving |
| parentheses) are not evaluated in this manner. However, this |
| \emph{will} affect promises and lazy loaded symbols. |
| } |
| |
| \author{ Deepayan Sarkar, \email{deepayan.sarkar@r-project.org} } |
| |
| \keyword{IO} |
| \keyword{utilities} |