UNPKG

@atomist/sdm-pack-sloc

Version:

Extension Pack for an Atomist SDM to integrate code metrics

113 lines 4.21 kB
"use strict"; /* * Copyright © 2018 Atomist, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const automation_client_1 = require("@atomist/automation-client"); const _ = require("lodash"); const sloc = require("sloc"); const languages_1 = require("./languages"); /** * Report about a project's files in a given language */ class LanguageReport { constructor(language, fileReports) { this.language = language; this.fileReports = fileReports; } /** * Return stats for each language * @return {CodeStats[]} */ get stats() { return consolidate(this.language, this.fileReports.map(fr => fr.stats)); } } exports.LanguageReport = LanguageReport; /** * Consolidate the given stats for a particular language * @param {Language} language * @param {CodeStats[]} stats * @return {CodeStats} */ function consolidate(language, stats) { return { language, total: _.sum(stats.map(r => r.total)), source: _.sum(stats.map(r => r.source)), comment: _.sum(stats.map(r => r.comment)), single: _.sum(stats.map(r => r.single)), block: _.sum(stats.map(r => r.block)), }; } exports.consolidate = consolidate; /** * Report about lines of code in various languages. */ class LanguagesReport { constructor(languageReports) { this.languageReports = languageReports; } get languagesScanned() { return _.uniq(this.languageReports.map(lr => lr.language)); } /** * Return only the found languages * @return {CodeStats[]} */ get relevantLanguageReports() { return this.languageReports.filter(lr => lr.stats.total > 0); } } exports.LanguagesReport = LanguagesReport; /** * Use the sloc library to compute code statistics * @param {Project} p * @param {string} request * @return {Promise<LanguageReport>} */ function reportForLanguage(p, request) { return __awaiter(this, void 0, void 0, function* () { const extension = request.language.extensions[0]; const globs = request.language.extensions.map(ext => `**/*.${ext}`); const fileReports = yield automation_client_1.projectUtils.gatherFromFiles(p, globs, (f) => __awaiter(this, void 0, void 0, function* () { const content = yield f.getContent(); const stats = sloc(content, extension); return { stats, file: f, language: request.language, }; })); return new LanguageReport(request.language, fileReports); }); } exports.reportForLanguage = reportForLanguage; function reportForLanguages(p, requests = languages_1.AllLanguages.map(language => ({ language }))) { return __awaiter(this, void 0, void 0, function* () { const languageReports = yield Promise.all(requests.map(r => reportForLanguage(p, r))); return new LanguagesReport(languageReports); }); } exports.reportForLanguages = reportForLanguages; //# sourceMappingURL=slocReport.js.map