import Graph from 'graphology';
import { SyntaxNode } from 'web-tree-sitter';
import { EdgeKind } from './edge/EdgeKind';
import { ImportWithRefs } from './model/ImportWithRefs';
import { Symbol } from './model/Symbol';
import { TextRange } from './model/TextRange';
import { LocalDef } from './node/LocalDef';
import { LocalImport } from './node/LocalImport';
import { LocalScope, ScopeStack } from './node/LocalScope';
import { NodeKind } from './node/NodeKind';
import { Reference } from './node/Reference';
import { LanguageProfile } from "../../code-context/base/LanguageProfile";
import { ScopeDebug } from "../../test/ScopeDebug";
export type NodeIndex = string;
export declare class ScopeGraph {
    graph: Graph<NodeKind>;
    private rootIndex;
    private languageProfile;
    constructor(rootNode: SyntaxNode, languageProfile: LanguageProfile);
    getNode(node: NodeIndex): NodeKind;
    getEdge(edge: string): EdgeKind;
    insertLocalScope(scope: LocalScope): void;
    insertLocalDef(localDef: LocalDef): void;
    insertHoistedDef(localDef: LocalDef): void;
    insertGlobalDef(localDef: LocalDef): void;
    insertLocalImport(import_: LocalImport): void;
    insertRef(reference: Reference, sourceCode: string): void;
    scopeStack(start: NodeIndex): ScopeStack;
    private scopeByRange;
    private parentScope;
    hoverableRanges(): TextRange[];
    definitions(referenceNode: NodeIndex): NodeIndex[];
    imports(referenceNode: NodeIndex): NodeIndex[];
    references(definitionNode: NodeIndex): NodeIndex[];
    nodeByRange(startByte: number, endByte: number): NodeIndex | undefined;
    debug(src: NodeIndex, language: LanguageProfile): ScopeDebug;
    nodeByPosition(line: number, column: number): NodeIndex | undefined;
    allLocalDefs(): NodeKind[];
    allImportsBySource(src: string): string[];
    allImports(src: string): ImportWithRefs[];
    symbols(): Symbol[];
    symbolNameOf(idx: NodeIndex): string | undefined;
}
