Skip to content

Commit 1250f60

Browse files
committed
feat($scripts): Clean-up errors from Elm Compiler before showing them
Added a function for stripping redundant text from error messages
1 parent 20b25f8 commit 1250f60

File tree

7 files changed

+37
-28
lines changed

7 files changed

+37
-28
lines changed

config/webpack.config.dev.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ module.exports = {
3434
// the line below with these two lines if you prefer the stock client:
3535
// require.resolve('webpack-dev-server/client') + '?/',
3636
// require.resolve('webpack/hot/dev-server'),
37-
require.resolve('react-dev-utils/webpackHotDevClient'),
37+
// require.resolve('react-dev-utils/webpackHotDevClient'),
38+
require.resolve('../scripts/utils/webpackHotDevClient'),
3839

3940
// Errors should be considered fatal in development
4041
require.resolve('react-error-overlay'),

scripts/build.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const paths = require('../config/paths');
2222
const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles');
2323
const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
2424
const FileSizeReporter = require('react-dev-utils/FileSizeReporter');
25-
const highlightElmCompilerErrors = require('./utils/highlightElmCompilerErrors');
25+
const formatElmCompilerErrors = require('./utils/formatElmCompilerErrors');
2626

2727
const measureFileSizesBeforeBuild =
2828
FileSizeReporter.measureFileSizesBeforeBuild;
@@ -90,7 +90,7 @@ function build(previousFileSizes) {
9090
if (err) {
9191
return reject(err);
9292
}
93-
const messages = highlightElmCompilerErrors(
93+
const messages = formatElmCompilerErrors(
9494
formatWebpackMessages(stats.toJson({}, true))
9595
);
9696
if (messages.errors.length) {

scripts/eject.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ function performEject(pkg) {
7272
fs.copySync(path.resolve(__dirname, 'build.js'), './scripts/build.js');
7373
fs.copySync(path.resolve(__dirname, 'start.js'), './scripts/start.js');
7474
fs.copySync(
75-
path.resolve(__dirname, './utils/highlightElmCompilerErrors.js'),
76-
'./scripts/utils/highlightElmCompilerErrors.js'
75+
path.resolve(__dirname, './utils/formatElmCompilerErrors.js'),
76+
'./scripts/utils/formatElmCompilerErrors.js'
7777
);
7878
fs.copySync(path.resolve(__dirname, '../config'), './config');
7979
} catch (err) {

scripts/start.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
2929
const clearConsole = require('react-dev-utils/clearConsole');
3030
const openBrowser = require('react-dev-utils/openBrowser');
3131
const createDevServerConfig = require('../config/webpackDevServer.config');
32-
const highlightElmCompilerErrors = require('./utils/highlightElmCompilerErrors');
32+
const formatElmCompilerErrors = require('./utils/formatElmCompilerErrors');
3333
const paths = require('../config/paths');
3434

3535
if (fs.existsSync('elm-package.json') === false) {
@@ -100,7 +100,7 @@ function createCompiler(webpack, config, appName, urls) {
100100
// We have switched off the default Webpack output in WebpackDevServer
101101
// options so we are going to "massage" the warnings and errors and present
102102
// them in a readable focused way.
103-
const messages = highlightElmCompilerErrors(
103+
const messages = formatElmCompilerErrors(
104104
formatWebpackMessages(stats.toJson({}, true))
105105
);
106106

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
3+
var chalk = require('chalk');
4+
5+
function stripRedundantInfo(error) {
6+
console.log(error);
7+
return error.replace(
8+
/(Module build failed: Error: Compiler process exited with error Compilation failed)\n--/g,
9+
'\n--'
10+
);
11+
}
12+
13+
module.exports = function formatElmCompilerErrors(messages) {
14+
var errors = messages.errors;
15+
var warnings = messages.warnings;
16+
return errors.length > 0
17+
? {
18+
errors: errors.map(x =>
19+
x
20+
.replace(/(--\s[A-Z\s]+-+\s.*\.elm\n)/g, chalk.cyan('$1'))
21+
.replace(/(\n\s*)(\^+)/g, '$1' + chalk.red('$2'))
22+
.replace(/(\d+\|)(>)/g, '$1' + chalk.bold(chalk.red('$2')))
23+
).map(stripRedundantInfo),
24+
warnings: warnings
25+
}
26+
: messages;
27+
};

scripts/utils/highlightElmCompilerErrors.js

Lines changed: 0 additions & 19 deletions
This file was deleted.

scripts/utils/webpackHotDevClient.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var url = require('url');
1515
var launchEditorEndpoint = require('react-dev-utils/launchEditorEndpoint');
1616
var formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
1717
var ErrorOverlay = require('react-error-overlay');
18-
var highlightElmCompilerErrors = require('./highlightElmCompilerErrors');
18+
var formatElmCompilerErrors = require('./formatElmCompilerErrors');
1919

2020
ErrorOverlay.startReportingRuntimeErrors({
2121
launchEditorEndpoint: launchEditorEndpoint,
@@ -142,7 +142,7 @@ function handleErrors(errors) {
142142
hasCompileErrors = true;
143143

144144
// "Massage" webpack messages.
145-
var formatted = highlightElmCompilerErrors(
145+
var formatted = formatElmCompilerErrors(
146146
formatWebpackMessages({
147147
errors: errors,
148148
warnings: []

0 commit comments

Comments
 (0)