import { HoverMerged } from '@sourcegraph/codeintellify/lib/types';
import { SymbolLocationInformation } from 'javascript-typescript-langserver/lib/request-type';
import { Observable } from 'rxjs';
import { Definition, Location, TextDocumentDecoration } from 'sourcegraph/module/protocol/plainTypes';
import { ExtensionsControllerProps } from '../extensions/ExtensionsClientCommonContext';
import { AbsoluteRepo, AbsoluteRepoFile } from '../repo';
import { LSPReferencesParams, LSPSelector, LSPTextDocumentPositionParams, XReferenceOptions } from './lsp';
/**
 * Specifies an LSP mode.
 */
export interface ModeSpec {
    /** The LSP mode, which identifies the language server to use. */
    mode: string;
}
export { HoverMerged };
/**
 * Fetches hover information for the given location.
 *
 * @param ctx the location
 * @return hover for the location
 */
export declare function getHover(ctx: LSPTextDocumentPositionParams, { extensionsController }: ExtensionsControllerProps): Observable<HoverMerged | null>;
/**
 * Fetches definitions (in the same repository) for the given location.
 *
 * @param ctx the location
 * @return definitions of the symbol at the location
 */
export declare function getDefinition(ctx: LSPTextDocumentPositionParams, { extensionsController }: ExtensionsControllerProps): Observable<Definition>;
/**
 * Fetches the destination URL for the "Go to definition" action in the hover.
 *
 * Only the first URL is returned, even if there are results from multiple providers or a provider returns
 * multiple results.
 *
 * @param ctx the location containing the token whose definition to jump to
 * @return destination URL
 */
export declare function getJumpURL(ctx: LSPTextDocumentPositionParams, extensions: ExtensionsControllerProps): Observable<string | null>;
/**
 * Fetches the repository-independent symbol descriptor for the given location.
 *
 * Only the first result is returned, even if there are results from multiple providers.
 *
 * @param ctx the location
 * @return information about the symbol at the location
 */
export declare function getXdefinition(ctx: LSPTextDocumentPositionParams): Observable<SymbolLocationInformation | undefined>;
/**
 * Fetches references (in the same repository) to the symbol at the given location.
 *
 * @param ctx the location
 * @return references to the symbol at the location
 */
export declare function getReferences(ctx: LSPTextDocumentPositionParams & LSPReferencesParams, { extensionsController }: ExtensionsControllerProps): Observable<Location[]>;
/**
 * Fetches implementations (in the same repository) of the symbol at the given location.
 *
 * @param ctx the location
 * @return implementations of the symbol at the location
 */
export declare function getImplementations(ctx: LSPTextDocumentPositionParams, { extensionsController }: ExtensionsControllerProps): Observable<Location[]>;
/**
 * Fetches references in the repository to the symbol described by the repository-independent symbol descriptor.
 *
 * @param ctx the symbol descriptor and repository to search in
 * @return references to the symbol
 */
export declare function getXreferences(ctx: XReferenceOptions & AbsoluteRepo & LSPSelector): Observable<Location[]>;
/**
 * Fetches decorations for the given file.
 *
 * @param ctx the file
 * @return decorations
 */
export declare function getDecorations(ctx: AbsoluteRepoFile & LSPSelector, { extensionsController }: ExtensionsControllerProps): Observable<TextDocumentDecoration[] | null>;
//# sourceMappingURL=features.d.ts.map