import { type AstNode, type MaybePromise } from 'langium';
import type { DocumentSymbolProvider, NodeKindProvider } from 'langium/lsp';
import { type DocumentSymbol, SymbolKind } from 'vscode-languageserver-types';
import { type LikeC4LangiumDocument, ast } from '../ast';
import type { LikeC4ModelLocator, LikeC4ModelParser } from '../model';
import type { LikeC4Services } from '../module';
import type { LikeC4NameProvider } from '../references';
export declare class LikeC4DocumentSymbolProvider implements DocumentSymbolProvider {
    private services;
    protected readonly nodeKindProvider: NodeKindProvider;
    protected readonly nameProvider: LikeC4NameProvider;
    protected readonly parser: LikeC4ModelParser;
    protected readonly locator: LikeC4ModelLocator;
    constructor(services: LikeC4Services);
    getSymbols({ parseResult: { value: { specifications, models, deployments, views, likec4lib }, }, }: LikeC4LangiumDocument): MaybePromise<DocumentSymbol[]>;
    protected getLikec4LibSymbol(astLib: ast.LikeC4Lib): DocumentSymbol[];
    protected getSpecSymbol(astSpec: ast.SpecificationRule): DocumentSymbol[];
    protected getModelSymbol(astModel: ast.Model): DocumentSymbol[];
    protected getDeploymentModelSymbol(astModel: ast.ModelDeployments): DocumentSymbol[];
    protected getElementsSymbol(el: ast.Element | ast.Relation | ast.ExtendElement): DocumentSymbol[];
    protected getExtendElementSymbol(astElement: ast.ExtendElement): DocumentSymbol[];
    protected getElementSymbol(astElement: ast.Element): DocumentSymbol[];
    protected getModelViewsSymbol(astViews: ast.ModelViews): DocumentSymbol[];
    protected getKindSymbol(astKind: ast.SpecificationElementKind | ast.SpecificationRelationshipKind): DocumentSymbol | null;
    protected getTagSymbol(astTag: ast.SpecificationTag): DocumentSymbol | null;
    protected getLibIconSymbol(astTag: ast.LibIcon): DocumentSymbol | null;
    protected getViewSymbol(astView: ast.LikeC4View): DocumentSymbol[];
    protected getDeploymentElementSymbol(el: ast.DeploymentElement | ast.DeploymentRelation): DocumentSymbol[];
    protected getDeploymentNodeSymbol(astElement: ast.DeploymentNode): DocumentSymbol[];
    protected getDeployedInstanceSymbol(astElement: ast.DeployedInstance): DocumentSymbol[];
    protected symbolKind(node: AstNode): SymbolKind;
}
