mirror of
https://github.com/github/codeql-action.git
synced 2025-12-08 16:58:06 +08:00
Previously, we were always using `**` in the include path. the effect of this was to always count lines in the entire repository unless explicitly added to the paths-ignore. This was incorrect behaviour. Now we only using `**` if the include path is otherwise empty.
89 lines
3.6 KiB
JavaScript
Generated
89 lines
3.6 KiB
JavaScript
Generated
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const github_linguist_1 = require("github-linguist");
|
|
const languages_1 = require("./languages");
|
|
const util_1 = require("./util");
|
|
// Map from linguist language names to language prefixes used in the action and codeql
|
|
const linguistToMetrics = {
|
|
c: languages_1.Language.cpp,
|
|
"c++": languages_1.Language.cpp,
|
|
"c#": languages_1.Language.csharp,
|
|
go: languages_1.Language.go,
|
|
java: languages_1.Language.java,
|
|
javascript: languages_1.Language.javascript,
|
|
python: languages_1.Language.python,
|
|
typescript: languages_1.Language.javascript,
|
|
};
|
|
const nameToLinguist = Object.entries(linguistToMetrics).reduce((obj, [key, name]) => {
|
|
if (!obj[name]) {
|
|
obj[name] = [];
|
|
}
|
|
obj[name].push(key);
|
|
return obj;
|
|
}, {});
|
|
function getIdPrefix(language) {
|
|
switch (language) {
|
|
case languages_1.Language.cpp:
|
|
return "cpp";
|
|
case languages_1.Language.csharp:
|
|
return "cs";
|
|
case languages_1.Language.go:
|
|
return "go";
|
|
case languages_1.Language.java:
|
|
return "java";
|
|
case languages_1.Language.javascript:
|
|
return "js";
|
|
case languages_1.Language.python:
|
|
return "py";
|
|
default:
|
|
util_1.assertNever(language);
|
|
}
|
|
}
|
|
exports.getIdPrefix = getIdPrefix;
|
|
/**
|
|
* Count the lines of code of the specified language using the include
|
|
* and exclude glob paths.
|
|
*
|
|
* @param cwd the root directory to start the count from
|
|
* @param include glob patterns to include in the search for relevant files
|
|
* @param exclude glob patterns to exclude in the search for relevant files
|
|
* @param dbLanguages list of languages to include in the results
|
|
* @param logger object to log results
|
|
*/
|
|
async function countLoc(cwd, include, exclude, dbLanguages, logger) {
|
|
const result = await new github_linguist_1.LocDir({
|
|
cwd,
|
|
include: Array.isArray(include) && include.length > 0 ? include : ["**"],
|
|
exclude,
|
|
analysisLanguages: dbLanguages.flatMap((lang) => nameToLinguist[lang]),
|
|
}).loadInfo();
|
|
// The analysis counts LoC in all languages. We need to
|
|
// extract the languages we care about. Also, note that
|
|
// the analysis uses slightly different names for language.
|
|
const lineCounts = Object.entries(result.languages).reduce((obj, [language, { code }]) => {
|
|
const metricsLanguage = linguistToMetrics[language];
|
|
if (metricsLanguage && dbLanguages.includes(metricsLanguage)) {
|
|
obj[metricsLanguage] = code + (obj[metricsLanguage] || 0);
|
|
}
|
|
return obj;
|
|
}, {});
|
|
if (Object.keys(lineCounts).length) {
|
|
logger.debug("Lines of code count:");
|
|
for (const [language, count] of Object.entries(lineCounts)) {
|
|
logger.debug(` ${language}: ${count}`);
|
|
}
|
|
}
|
|
else {
|
|
logger.info("Could not determine the total number of lines of code in this repository. " +
|
|
"Because of this, it will not be possible to compare the number of lines " +
|
|
"of code analyzed by code scanning with the total number of lines of " +
|
|
"code in the repository. This will not affect the results produced by code " +
|
|
"scanning. If you have any questions, you can raise an issue at " +
|
|
"https://github.com/github/codeql-action/issues. Please include a link " +
|
|
"to the repository if public, or otherwise information about the code scanning " +
|
|
"workflow you are using.");
|
|
}
|
|
return lineCounts;
|
|
}
|
|
exports.countLoc = countLoc;
|
|
//# sourceMappingURL=count-loc.js.map
|