import { Project, ProjectFile } from "@atomist/automation-client";
export interface Language {
    name: string;
    /**
     * First extension must be definitive one to pass to SLOC
     */
    extensions: string[];
}
/**
 * Statistics about a particular language. See sloc API for further information
 */
export interface CodeStats {
    language: Language;
    /**
     * Total number of lines
     */
    total: number;
    /**
     * Number of lines of source code
     */
    source: number;
    /**
     * Number of comment lines
     */
    comment: number;
    single: number;
    block: number;
}
export interface FileReport {
    stats: CodeStats;
    file: ProjectFile;
}
export interface LanguageStats {
    language: Language;
    stats: CodeStats;
}
/**
 * Report about a project's files in a given language
 */
export declare class LanguageReport implements LanguageStats {
    language: Language;
    fileReports: FileReport[];
    constructor(language: Language, fileReports: FileReport[]);
    /**
     * Return stats for each language
     * @return {CodeStats[]}
     */
    readonly stats: CodeStats;
}
/**
 * Consolidate the given stats for a particular language
 * @param {Language} language
 * @param {CodeStats[]} stats
 * @return {CodeStats}
 */
export declare function consolidate(language: Language, stats: CodeStats[]): CodeStats;
/**
 * Report about lines of code in various languages.
 */
export declare class LanguagesReport {
    languageReports: LanguageReport[];
    constructor(languageReports: LanguageReport[]);
    readonly languagesScanned: Language[];
    /**
     * Return only the found languages
     * @return {CodeStats[]}
     */
    readonly relevantLanguageReports: LanguageReport[];
}
export interface LanguageReportRequest {
    language: Language;
    /**
     * Narrow down search--eg to exclude test
     */
    glob?: string;
}
/**
 * Use the sloc library to compute code statistics
 * @param {Project} p
 * @param {string} request
 * @return {Promise<LanguageReport>}
 */
export declare function reportForLanguage(p: Project, request: LanguageReportRequest): Promise<LanguageReport>;
export declare function reportForLanguages(p: Project, requests?: LanguageReportRequest[]): Promise<LanguagesReport>;
