diff --git a/__tests__/feedbackMessage.test.js b/__tests__/feedbackMessage.test.js
index de365e6..ffb353d 100644
--- a/__tests__/feedbackMessage.test.js
+++ b/__tests__/feedbackMessage.test.js
@@ -1,17 +1,28 @@
const buildFeedbackMessage = require('../feedbackMessage');
-const noError = require('./fixtures/eslint-results/frontEndNoError.json');
-const oneError = require('./fixtures/eslint-results/oneError.json');
const multipleErrorsOneFile = require('./fixtures/eslint-results/multipleErrorsOneFile.json');
+const multipleWarningsOneFile = require('./fixtures/eslint-results/multipleWarningsOneFile.json');
+const multipleWarningsAndErrorsOneFile = require('./fixtures/eslint-results/multipleWarningsAndErrorsOneFile.json');
const multipleErrorsMultipleFiles = require('./fixtures/eslint-results/multipleErrorsMultipleFiles.json');
+const multipleWarningsMultipleFiles = require('./fixtures/eslint-results/multipleWarningsMultipleFiles.json');
+const noError = require('./fixtures/eslint-results/frontEndNoError.json');
+const oneError = require('./fixtures/eslint-results/oneError.json');
+const oneErrorOneFileMultipleWarningsAnotherFile = require('./fixtures/eslint-results/oneErrorOneFileMultipleWarningsAnotherFile.json');
+const oneWarning = require('./fixtures/eslint-results/oneWarning.json');
describe('Feedback message', () => {
- describe('No error is found', () => {
- test('When there is no file to be evaluated, a no error encountered message is returned', () => {
- expect(buildFeedbackMessage([], './')).toBe('### Nenhum erro encontrado.')
+ describe('No issue is found', () => {
+ test('When there is no file to be evaluated, a no issue encountered message is returned', () => {
+ expect(buildFeedbackMessage([], './')).toBe(
+ '### Nenhum erro encontrado.\n' +
+ '### Nenhum aviso encontrado.'
+ )
});
- test('When there are files to be evaluated, a no error encountered message is returned', () => {
- expect(buildFeedbackMessage(noError, './')).toBe('### Nenhum erro encontrado.')
+ test('When there are files to be evaluated, a no issue encountered message is returned', () => {
+ expect(buildFeedbackMessage(noError, './')).toBe(
+ '### Nenhum erro encontrado.\n' +
+ '### Nenhum aviso encontrado.'
+ )
});
});
@@ -21,7 +32,9 @@ describe('Feedback message', () => {
'\n' +
'#### Arquivo `/my-project/index.js`\n' +
'\n' +
- '- Linha **1**: Function \'isPentagon\' has too many parameters (5). Maximum allowed is 4.\n'
+ '- Linha **1**: Function \'isPentagon\' has too many parameters (5). Maximum allowed is 4.\n' +
+ '\n' +
+ '### Nenhum aviso encontrado.'
);
});
@@ -35,7 +48,9 @@ describe('Feedback message', () => {
'- Linha **3**: \'name\' is missing in props validation\n' +
'- Linha **3**: `Hello, ` must be placed on a new line\n' +
'- Linha **3**: `{name}` must be placed on a new line\n' +
- '- Linha **5**: Missing semicolon.\n'
+ '- Linha **5**: Missing semicolon.\n' +
+ '\n' +
+ '### Nenhum aviso encontrado.'
);
});
@@ -51,7 +66,86 @@ describe('Feedback message', () => {
'' +
'#### Arquivo `/my-react-project/src/components/Greeting.js`\n' +
'\n' +
- '- Linha **3**: \'name\' is missing in props validation\n'
+ '- Linha **3**: \'name\' is missing in props validation\n' +
+ '\n' +
+ '### Nenhum aviso encontrado.'
+ );
+ });
+ });
+
+ test('When one warning is found, a message showing the warning is returned', () => {
+ expect(buildFeedbackMessage(oneWarning, './')).toBe(
+ '### Nenhum erro encontrado.\n' +
+ '### Foi encontrado 1 aviso.\n' +
+ '\n' +
+ '#### Arquivo `/back-end/index.js`\n' +
+ '\n' +
+ '- Linha **8**: Unexpected console statement.\n'
+ );
+ });
+
+ describe('Multiple warnings are found', () => {
+ test('When all warnings are contained in one file, a message listing all those warnings is returned', () => {
+ expect(buildFeedbackMessage(multipleWarningsOneFile, './')).toBe(
+ '### Nenhum erro encontrado.\n' +
+ '### Foram encontrados 2 avisos.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/App.js`\n' +
+ '\n' +
+ '- Linha **7**: Unexpected console statement.\n' +
+ '- Linha **28**: Unexpected alert.\n'
+ );
+ });
+
+ test('When the warnings span multiple files, a message listing all those warnings is returned', () => {
+ expect(buildFeedbackMessage(multipleWarningsMultipleFiles, './')).toBe(
+ '### Nenhum erro encontrado.\n' +
+ '### Foram encontrados 3 avisos.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/App.js`\n' +
+ '\n' +
+ '- Linha **7**: Unexpected console statement.\n' +
+ '- Linha **28**: Unexpected alert.\n' +
+ '' +
+ '#### Arquivo `/front-end/src/components/Greeting.js`\n' +
+ '\n' +
+ '- Linha **7**: Missing trailing comma.\n'
+ );
+ });
+ });
+
+ describe('Errors and warnings are found', () => {
+ test('When all errors and warnings are contained in one file, a message listing both errors and warnings is returned', () => {
+ expect(buildFeedbackMessage(multipleWarningsAndErrorsOneFile, './')).toBe(
+ '### Foi encontrado 1 erro.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/App.js`\n'+
+ '\n' +
+ '- Linha **33**: Newline required at end of file but not found.\n' +
+ '\n' +
+ '### Foram encontrados 2 avisos.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/App.js`\n'+
+ '\n' +
+ '- Linha **7**: Unexpected console statement.\n' +
+ '- Linha **28**: Unexpected alert.\n'
+ );
+ });
+
+ test('When errors are in one file and warnings are in another one, a message listing both errors and warnings for those files is returned', () => {
+ expect(buildFeedbackMessage(oneErrorOneFileMultipleWarningsAnotherFile, './')).toBe(
+ '### Foi encontrado 1 erro.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/components/Greeting.js`\n'+
+ '\n' +
+ '- Linha **2**: Missing semicolon.\n' +
+ '\n' +
+ '### Foram encontrados 2 avisos.\n' +
+ '\n' +
+ '#### Arquivo `/front-end/src/App.js`\n'+
+ '\n' +
+ '- Linha **7**: Unexpected console statement.\n' +
+ '- Linha **28**: Unexpected alert.\n'
);
});
});
@@ -68,7 +162,9 @@ describe('Feedback message', () => {
'' +
'#### Arquivo `/src/components/Greeting.js`\n' +
'\n' +
- '- Linha **3**: \'name\' is missing in props validation\n'
+ '- Linha **3**: \'name\' is missing in props validation\n' +
+ '\n' +
+ '### Nenhum aviso encontrado.'
);
});
});
diff --git a/__tests__/fixtures/eslint-results/multipleWarningsAndErrorsOneFile.json b/__tests__/fixtures/eslint-results/multipleWarningsAndErrorsOneFile.json
new file mode 100644
index 0000000..57e298a
--- /dev/null
+++ b/__tests__/fixtures/eslint-results/multipleWarningsAndErrorsOneFile.json
@@ -0,0 +1,74 @@
+[
+ {
+ "filePath": "/front-end/src/App.js",
+ "messages": [
+ {
+ "ruleId": "no-console",
+ "severity": 1,
+ "message": "Unexpected console statement.",
+ "line": 7,
+ "column": 3,
+ "nodeType": "MemberExpression",
+ "messageId": "unexpected",
+ "endLine": 7,
+ "endColumn": 14
+ },
+ {
+ "ruleId": "no-alert",
+ "severity": 1,
+ "message": "Unexpected alert.",
+ "line": 28,
+ "column": 44,
+ "nodeType": "CallExpression",
+ "messageId": "unexpected",
+ "endLine": 28,
+ "endColumn": 68
+ },
+ {
+ "ruleId": "eol-last",
+ "severity": 2,
+ "message": "Newline required at end of file but not found.",
+ "line": 33,
+ "column": 20,
+ "nodeType": "Program",
+ "messageId": "missing",
+ "fix": {
+ "range": [
+ 774,
+ 774
+ ],
+ "text": "\n"
+ }
+ }
+ ],
+ "errorCount": 1,
+ "warningCount": 2,
+ "fixableErrorCount": 1,
+ "fixableWarningCount": 0,
+ "source": "import React from 'react';\nimport logo from './logo.svg';\nimport './App.css';\nimport Greeting from './components/Greeting';\n\nfunction App() {\n console.log('Rendering App..');\n\n return (\n
\n
\n
\n
\n
\n );\n}\n\nexport default App;"
+ },
+ {
+ "filePath": "/front-end/src/components/Greeting.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/index.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/setupTests.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ }
+]
diff --git a/__tests__/fixtures/eslint-results/multipleWarningsMultipleFiles.json b/__tests__/fixtures/eslint-results/multipleWarningsMultipleFiles.json
new file mode 100644
index 0000000..452d656
--- /dev/null
+++ b/__tests__/fixtures/eslint-results/multipleWarningsMultipleFiles.json
@@ -0,0 +1,78 @@
+[
+ {
+ "filePath": "/front-end/src/App.js",
+ "messages": [
+ {
+ "ruleId": "no-console",
+ "severity": 1,
+ "message": "Unexpected console statement.",
+ "line": 7,
+ "column": 3,
+ "nodeType": "MemberExpression",
+ "messageId": "unexpected",
+ "endLine": 7,
+ "endColumn": 14
+ },
+ {
+ "ruleId": "no-alert",
+ "severity": 1,
+ "message": "Unexpected alert.",
+ "line": 28,
+ "column": 44,
+ "nodeType": "CallExpression",
+ "messageId": "unexpected",
+ "endLine": 28,
+ "endColumn": 68
+ }
+ ],
+ "errorCount": 0,
+ "warningCount": 2,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0,
+ "source": "import React from 'react';\nimport logo from './logo.svg';\nimport './App.css';\nimport Greeting from './components/Greeting';\n\nfunction App() {\n console.log('Rendering App..');\n\n return (\n \n
\n
\n
\n
\n );\n}\n\nexport default App;\n"
+ },
+ {
+ "filePath": "/front-end/src/components/Greeting.js",
+ "messages": [
+ {
+ "ruleId": "comma-dangle",
+ "severity": 1,
+ "message": "Missing trailing comma.",
+ "line": 7,
+ "column": 36,
+ "nodeType": "Property",
+ "messageId": "missing",
+ "endLine": 8,
+ "endColumn": 1,
+ "fix": {
+ "range": [
+ 183,
+ 183
+ ],
+ "text": ","
+ }
+ }
+ ],
+ "errorCount": 0,
+ "warningCount": 1,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 1,
+ "source": "import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Greeting = ({ name }) => {`Hello, ${name}`}
;\n\nGreeting.propTypes = {\n name: PropTypes.string.isRequired\n};\n\nexport default Greeting;\n"
+ },
+ {
+ "filePath": "/front-end/src/index.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/setupTests.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ }
+]
diff --git a/__tests__/fixtures/eslint-results/multipleWarningsOneFile.json b/__tests__/fixtures/eslint-results/multipleWarningsOneFile.json
new file mode 100644
index 0000000..2b2f4b5
--- /dev/null
+++ b/__tests__/fixtures/eslint-results/multipleWarningsOneFile.json
@@ -0,0 +1,58 @@
+[
+ {
+ "filePath": "/front-end/src/App.js",
+ "messages": [
+ {
+ "ruleId": "no-console",
+ "severity": 1,
+ "message": "Unexpected console statement.",
+ "line": 7,
+ "column": 3,
+ "nodeType": "MemberExpression",
+ "messageId": "unexpected",
+ "endLine": 7,
+ "endColumn": 14
+ },
+ {
+ "ruleId": "no-alert",
+ "severity": 1,
+ "message": "Unexpected alert.",
+ "line": 28,
+ "column": 44,
+ "nodeType": "CallExpression",
+ "messageId": "unexpected",
+ "endLine": 28,
+ "endColumn": 68
+ }
+ ],
+ "errorCount": 0,
+ "warningCount": 2,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0,
+ "source": "import React from 'react';\nimport logo from './logo.svg';\nimport './App.css';\nimport Greeting from './components/Greeting';\n\nfunction App() {\n console.log('Rendering App..');\n\n return (\n \n
\n
\n
\n
\n );\n}\n\nexport default App;\n"
+ },
+ {
+ "filePath": "/front-end/src/components/Greeting.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/index.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/setupTests.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ }
+]
diff --git a/__tests__/fixtures/eslint-results/oneErrorOneFileMultipleWarningsAnotherFile.json b/__tests__/fixtures/eslint-results/oneErrorOneFileMultipleWarningsAnotherFile.json
new file mode 100644
index 0000000..6b98e20
--- /dev/null
+++ b/__tests__/fixtures/eslint-results/oneErrorOneFileMultipleWarningsAnotherFile.json
@@ -0,0 +1,77 @@
+[
+ {
+ "filePath": "/front-end/src/App.js",
+ "messages": [
+ {
+ "ruleId": "no-console",
+ "severity": 1,
+ "message": "Unexpected console statement.",
+ "line": 7,
+ "column": 3,
+ "nodeType": "MemberExpression",
+ "messageId": "unexpected",
+ "endLine": 7,
+ "endColumn": 14
+ },
+ {
+ "ruleId": "no-alert",
+ "severity": 1,
+ "message": "Unexpected alert.",
+ "line": 28,
+ "column": 44,
+ "nodeType": "CallExpression",
+ "messageId": "unexpected",
+ "endLine": 28,
+ "endColumn": 68
+ }
+ ],
+ "errorCount": 0,
+ "warningCount": 2,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0,
+ "source": "import React from 'react';\nimport logo from './logo.svg';\nimport './App.css';\nimport Greeting from './components/Greeting';\n\nfunction App() {\n console.log('Rendering App..');\n\n return (\n \n
\n
\n
\n
\n );\n}\n\nexport default App;\n"
+ },
+ {
+ "filePath": "/front-end/src/components/Greeting.js",
+ "messages": [
+ {
+ "ruleId": "semi",
+ "severity": 2,
+ "message": "Missing semicolon.",
+ "line": 2,
+ "column": 35,
+ "nodeType": "ImportDeclaration",
+ "endLine": 3,
+ "endColumn": 1,
+ "fix": {
+ "range": [
+ 61,
+ 61
+ ],
+ "text": ";"
+ }
+ }
+ ],
+ "errorCount": 1,
+ "warningCount": 0,
+ "fixableErrorCount": 1,
+ "fixableWarningCount": 0,
+ "source": "import React from 'react';\nimport PropTypes from 'prop-types'\n\nconst Greeting = ({ name }) => {`Hello, ${name}`}
;\n\nGreeting.propTypes = {\n name: PropTypes.string.isRequired,\n};\n\nexport default Greeting;\n"
+ },
+ {
+ "filePath": "/front-end/src/index.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ },
+ {
+ "filePath": "/front-end/src/setupTests.js",
+ "messages": [],
+ "errorCount": 0,
+ "warningCount": 0,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0
+ }
+]
diff --git a/__tests__/fixtures/eslint-results/oneWarning.json b/__tests__/fixtures/eslint-results/oneWarning.json
new file mode 100644
index 0000000..fa3df1b
--- /dev/null
+++ b/__tests__/fixtures/eslint-results/oneWarning.json
@@ -0,0 +1,24 @@
+[
+ {
+ "filePath": "/back-end/index.js",
+ "messages": [
+ {
+ "ruleId": "no-console",
+ "severity": 1,
+ "message": "Unexpected console statement.",
+ "line": 8,
+ "column": 5,
+ "nodeType": "MemberExpression",
+ "messageId": "unexpected",
+ "endLine": 8,
+ "endColumn": 16
+ }
+ ],
+ "errorCount": 0,
+ "warningCount": 1,
+ "fixableErrorCount": 0,
+ "fixableWarningCount": 0,
+ "source": "var bar = function (x, y, z, a) {\n return x + y + z + a;\n}\n\nvar isEven = function (number) {\n var isNumberOdd = number % 2 === 0;\n\n console.log('Is number even?', isNumberOdd);\n\n return isNumberOdd;\n}\n",
+ "usedDeprecatedRules": []
+ }
+]
diff --git a/dist/index.js b/dist/index.js
index 15944c0..1ee0289 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -200,45 +200,72 @@ function onceStrict (fn) {
/***/ 51:
/***/ (function(module) {
-const getErrorsCount = (eslintOutcomes) => (
- eslintOutcomes.reduce((acc, { errorCount }) => acc + errorCount, 0)
-);
+const countageFieldNameByType = (issueType) => (issueType === 'erro' ? 'errorCount' : 'warningCount');
+
+const issueSeverityToConsider = (issueType) => (issueType === 'erro' ? 2 : 1);
+
+const getIssuesCount = (eslintOutcomes, issueType) => {
+ const countageToConsider = countageFieldNameByType(issueType);
+
+ return eslintOutcomes.reduce((acc, eslintOutcome) => acc + eslintOutcome[countageToConsider], 0);
+};
-const buildErrorMessage = ({ line, message }) => `- Linha **${line}**: ${message}`;
+const buildIssueMessage = ({ line, message }) => `- Linha **${line}**: ${message}`;
const buildFileSection = (filePath) => `#### Arquivo \`${filePath}\``;
-const buildFileErrors = ({ errorCount, filePath, messages }, root) => {
- if (errorCount === 0) return '';
+const filterMessagesByIssueType = (messages, issueType) => {
+ const severityToConsider = issueSeverityToConsider(issueType);
+
+ return messages.filter(({ severity }) => severity === severityToConsider);
+};
+
+const buildFileIssues = (eslintOutcomeOnFile, root, issueType) => {
+ const countageTypeToConsider = countageFieldNameByType(issueType);
+ const issuesCount = eslintOutcomeOnFile[countageTypeToConsider];
+ if (issuesCount === 0) return '';
+
+ const { filePath, messages } = eslintOutcomeOnFile;
const relativePathFile = filePath.replace(root, '');
const fileSection = `${buildFileSection(relativePathFile)}\n\n`;
+ const messagesToConsider = filterMessagesByIssueType(messages, issueType);
- return messages.reduce((acc, error) => `${acc}${buildErrorMessage(error)}\n`, fileSection);
+ return messagesToConsider.reduce((acc, issue) => `${acc}${buildIssueMessage(issue)}\n`, fileSection);
};
-const listErrors = (eslintOutcomes, root) => (
- eslintOutcomes.reduce((acc, currentFile) => acc + buildFileErrors(currentFile, root), '')
+const listIssues = (eslintOutcomes, root, issueType) => (
+ eslintOutcomes.reduce((acc, currentFile) => acc + buildFileIssues(currentFile, root, issueType), '')
);
-const getSummaryMessage = (eslintOutcomes) => {
- const errorsCount = getErrorsCount(eslintOutcomes);
+const getSummaryMessage = (eslintOutcomes, issueType) => {
+ const issuesCount = getIssuesCount(eslintOutcomes, issueType);
- if (errorsCount === 0) return '### Nenhum erro encontrado.';
- if (errorsCount === 1) return '### Foi encontrado 1 erro.';
- return `### Foram encontrados ${errorsCount} erros.`;
+ if (issuesCount === 0) return `### Nenhum ${issueType} encontrado.`;
+ if (issuesCount === 1) return `### Foi encontrado 1 ${issueType}.`;
+ return `### Foram encontrados ${issuesCount} ${issueType}s.`;
};
-const buildFeedbackMessage = (eslintOutcomes, root) => {
- let feedbackMessage = getSummaryMessage(eslintOutcomes);
+const buildFeedbackByIssueType = (eslintOutcomes, root, issueType) => {
+ let feedbackMessage = getSummaryMessage(eslintOutcomes, issueType);
- if (feedbackMessage !== '### Nenhum erro encontrado.') {
- feedbackMessage = `${feedbackMessage}\n\n${listErrors(eslintOutcomes, root)}`;
+ if (feedbackMessage !== `### Nenhum ${issueType} encontrado.`) {
+ feedbackMessage = `${feedbackMessage}\n\n${listIssues(eslintOutcomes, root, issueType)}`;
}
return feedbackMessage;
};
+const buildFeedbackMessage = (eslintOutcomes, root) => {
+ const issueTypes = ['erro', 'aviso'];
+
+ const feedbackMessages = issueTypes.map(
+ (issueType) => buildFeedbackByIssueType(eslintOutcomes, root, issueType)
+ );
+
+ return feedbackMessages.join('\n');
+};
+
module.exports = buildFeedbackMessage;
diff --git a/feedbackMessage.js b/feedbackMessage.js
index 12ad165..cf85c1e 100644
--- a/feedbackMessage.js
+++ b/feedbackMessage.js
@@ -1,40 +1,67 @@
-const getErrorsCount = (eslintOutcomes) => (
- eslintOutcomes.reduce((acc, { errorCount }) => acc + errorCount, 0)
-);
+const countageFieldNameByType = (issueType) => (issueType === 'erro' ? 'errorCount' : 'warningCount');
+
+const issueSeverityToConsider = (issueType) => (issueType === 'erro' ? 2 : 1);
+
+const getIssuesCount = (eslintOutcomes, issueType) => {
+ const countageToConsider = countageFieldNameByType(issueType);
+
+ return eslintOutcomes.reduce((acc, eslintOutcome) => acc + eslintOutcome[countageToConsider], 0);
+};
-const buildErrorMessage = ({ line, message }) => `- Linha **${line}**: ${message}`;
+const buildIssueMessage = ({ line, message }) => `- Linha **${line}**: ${message}`;
const buildFileSection = (filePath) => `#### Arquivo \`${filePath}\``;
-const buildFileErrors = ({ errorCount, filePath, messages }, root) => {
- if (errorCount === 0) return '';
+const filterMessagesByIssueType = (messages, issueType) => {
+ const severityToConsider = issueSeverityToConsider(issueType);
+
+ return messages.filter(({ severity }) => severity === severityToConsider);
+};
+
+const buildFileIssues = (eslintOutcomeOnFile, root, issueType) => {
+ const countageTypeToConsider = countageFieldNameByType(issueType);
+ const issuesCount = eslintOutcomeOnFile[countageTypeToConsider];
+ if (issuesCount === 0) return '';
+
+ const { filePath, messages } = eslintOutcomeOnFile;
const relativePathFile = filePath.replace(root, '');
const fileSection = `${buildFileSection(relativePathFile)}\n\n`;
+ const messagesToConsider = filterMessagesByIssueType(messages, issueType);
- return messages.reduce((acc, error) => `${acc}${buildErrorMessage(error)}\n`, fileSection);
+ return messagesToConsider.reduce((acc, issue) => `${acc}${buildIssueMessage(issue)}\n`, fileSection);
};
-const listErrors = (eslintOutcomes, root) => (
- eslintOutcomes.reduce((acc, currentFile) => acc + buildFileErrors(currentFile, root), '')
+const listIssues = (eslintOutcomes, root, issueType) => (
+ eslintOutcomes.reduce((acc, currentFile) => acc + buildFileIssues(currentFile, root, issueType), '')
);
-const getSummaryMessage = (eslintOutcomes) => {
- const errorsCount = getErrorsCount(eslintOutcomes);
+const getSummaryMessage = (eslintOutcomes, issueType) => {
+ const issuesCount = getIssuesCount(eslintOutcomes, issueType);
- if (errorsCount === 0) return '### Nenhum erro encontrado.';
- if (errorsCount === 1) return '### Foi encontrado 1 erro.';
- return `### Foram encontrados ${errorsCount} erros.`;
+ if (issuesCount === 0) return `### Nenhum ${issueType} encontrado.`;
+ if (issuesCount === 1) return `### Foi encontrado 1 ${issueType}.`;
+ return `### Foram encontrados ${issuesCount} ${issueType}s.`;
};
-const buildFeedbackMessage = (eslintOutcomes, root) => {
- let feedbackMessage = getSummaryMessage(eslintOutcomes);
+const buildFeedbackByIssueType = (eslintOutcomes, root, issueType) => {
+ let feedbackMessage = getSummaryMessage(eslintOutcomes, issueType);
- if (feedbackMessage !== '### Nenhum erro encontrado.') {
- feedbackMessage = `${feedbackMessage}\n\n${listErrors(eslintOutcomes, root)}`;
+ if (feedbackMessage !== `### Nenhum ${issueType} encontrado.`) {
+ feedbackMessage = `${feedbackMessage}\n\n${listIssues(eslintOutcomes, root, issueType)}`;
}
return feedbackMessage;
};
+const buildFeedbackMessage = (eslintOutcomes, root) => {
+ const issueTypes = ['erro', 'aviso'];
+
+ const feedbackMessages = issueTypes.map(
+ (issueType) => buildFeedbackByIssueType(eslintOutcomes, root, issueType)
+ );
+
+ return feedbackMessages.join('\n');
+};
+
module.exports = buildFeedbackMessage;