-
-
Notifications
You must be signed in to change notification settings - Fork 26.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add click-to-open support for build errors #3100
Conversation
@@ -25,6 +25,18 @@ var launchEditorEndpoint = require('./launchEditorEndpoint'); | |||
var formatWebpackMessages = require('./formatWebpackMessages'); | |||
var ErrorOverlay = require('react-error-overlay'); | |||
|
|||
ErrorOverlay.listenToOpenInEditor(function OpenInEditor({ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why a separate function?
Can we just put this back under ErrorOverlay.startReportingRuntimeErrors
under the prop launchEditor
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ErrorOverlay.startReportingRuntimeErrors
and its parameters are specific to runtime errors. But listenToOpenInEditor
will trigger the listener for both runtime and build errors. So isn't that less intuitive to put OpenInEditor
under ErrorOverlay.startReportingRuntimeErrors
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, this makes sense. Thanks!
} = this.props.frame; | ||
// Keep this in sync with react-error-overlay/middleware.js |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This comment was lost when the code was moved.
I assume it might need updating, or is it not relevant anymore?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added an updated comment.
I wonder why Travis CI is failing. 🤔 |
|
@TryingToImprove yes, but the function is present and it works on AppVeyor. I'm interested in why it's failing on Travis specifically, e.g. due to an npm bug, etc. |
I experience the same for kitchensink in my local development environment. Looking further I found it uses bundle.js with old react-error-overlay/index.js. Probably your #3102 will fix this. |
Can you try it with my PR? Feel free to merge it if it resolves it -- I'm in bed. 😄 |
I'll try it in the evening. |
5765617
to
8fe1724
Compare
Rebased with the latest master. No idea why it's still failing. 😕 |
@tharakawj i think it's npm 5 bug... |
see #3105 |
I see. I'll rebase and try after #3107 |
#3107 has been merged. |
8fe1724
to
9064ca9
Compare
Yikes -- looks like CI is still failing. Do you have time to look into this or maybe I could find some time to? |
Yeah! I won't be able to look into this until the weekend. Please have a look if possible. |
Finally, I think I found the actual reason why CI is failing and it will be fixed with #3139. But I'm still curious how it doesn't affect to AppVeyor build. |
9064ca9
to
eba9f53
Compare
Ready to review! 😎 |
Hello! I'm a bot that helps facilitate testing pull requests. Your pull request (commit eba9f53caac2452d8c91687784a66a757fcaf07f) has been released on npm for testing purposes. npm i react-scripts-dangerous@1.0.14-eba9f53.0
# or
yarn add react-scripts-dangerous@1.0.14-eba9f53.0
# or
create-react-app --scripts-version=react-scripts-dangerous@1.0.14-eba9f53.0 folder/ Note that the package has not been reviewed or vetted by the maintainers. Only install it at your own risk! Thanks for your contribution! |
@@ -25,6 +25,16 @@ var launchEditorEndpoint = require('./launchEditorEndpoint'); | |||
var formatWebpackMessages = require('./formatWebpackMessages'); | |||
var ErrorOverlay = require('react-error-overlay'); | |||
|
|||
ErrorOverlay.listenToOpenInEditor(function OpenInEditor(errorLocation) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO, listenToOpenInEditor
is a little ambiguous. e.g. can you listen with more than one function, or is this action reversible?
Questions people might have in mind if they're thinking of an EventEmitter (listeners/observers).
What about setEditorCallback
or setEditorHandler
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I see your point. Just I couldn't think of any better name than this. Let's go with setEditorHandler
.
let currentBuildError: null | string = null; | ||
let currentRuntimeErrorRecords: Array<ErrorRecord> = []; | ||
let currentRuntimeErrorOptions: null | RuntimeReportingOptions = null; | ||
let stopListeningToRuntimeErrors: null | (() => void) = null; | ||
|
||
export function listenToOpenInEditor(listener: OpenInEditorListener) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If this is renamed to setEditorCallback
/setEditorHandler
, we could make this accept OpenInEditorListener | null
so it can be switched off by sending null
.
@@ -168,7 +157,7 @@ class StackFrame extends Component<Props, State> { | |||
} | |||
} | |||
|
|||
const canOpenInEditor = this.getEndpointUrl() !== null; | |||
const canOpenInEditor = this.getErrorLocation() !== null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't this also still consider if overlay has a callback set? We don't want to style the text as clickable if it's a noop (if my understanding is correct here).
Can we do away with the openInEditorListener
and openInEditor
indirection and simply pass what the user has sent all the way through to the component so we can check if it's null?
I'd imagine we could just call update()
when the callback is set to ensure props are updated in components.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I think we should. I'll fix this.
} | ||
|
||
function openInEditor(errorLoc: ErrorLocation) { | ||
if (typeof openInEditorListener === 'function') { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the indirection I'm referencing below. Alternatively, we could add a warning, e.g. "You attempted to open a file in your editor but no handler was set".
I'd like to release this PR in conjunction with #3142 so that we don't have to bump the major version of |
- Remove indirection of openInEditorListener - Check editorHandler for null before styling error clickable
eba9f53
to
a0b3566
Compare
Hello! I'm a bot that helps facilitate testing pull requests. Your pull request (commit ae18e55) has been released on npm for testing purposes. npm i react-scripts-dangerous@1.0.15-ae18e55.0
# or
yarn add react-scripts-dangerous@1.0.15-ae18e55.0
# or
create-react-app --scripts-version=react-scripts-dangerous@1.0.15-ae18e55.0 folder/ Note that the package has not been reviewed or vetted by the maintainers. Only install it at your own risk! Thanks for your contribution! |
Oh, I hope I didn't come off as wanting to release ASAP, I just meant to have it in before the next release. I'll take a look at this soon. 😄 |
What happens if you change Since errLoc is Alternatively, we can make |
Unfortunately, neither of these approaches seem to work. Apparently, flow can't refine the type when we check null/undefined through another variable. Try this snippet if you want to play around it. |
Interesting, it seems flow cannot flow follow those cases; not a problem! I have nothing against the double check. |
…react-app * 'master' of https://github.com/facebookincubator/create-react-app: Update README.md Fix dead link to Jest "expect" docs (facebook#3289) Use production React version for bundled overlay (facebook#3267) Add warning when using `react-error-overlay` in production (facebook#3264) Add external links to deployment services (facebook#3265) `react-error-overlay` has no dependencies now (facebook#3263) Add click-to-open support for build errors (facebook#3100) Update style-loader and disable inclusion of its HMR code in builds (facebook#3236) Update url-loader to 0.6.2 for mime ReDoS vuln (facebook#3246)
…pescript * 'master' of https://github.com/wmonk/create-react-app-typescript: (265 commits) fix typo in changelog Update README For 2.13.0 v2.13.0 Remove tslint-loader from prod build (again) Include TypeScript as devDependency in boilerplate output Documented how to define custom module formats for the TypeScript compiler so that you can import images and other files (references wmonk#172) v2.12.0 Update README For 2.12.0 Update typescript to 2.6.2 v2.11.0 Update changelog for 2.11.0 Fixed problem with tsconfig.json baseUrl and paths Update createJestConfig.js Update changelog for 2.10.0 v2.10.0 Readd transformIgnorePatterns Update react-dev-utils Update package.json dependencies Readd Missing raf Package Update JestConfig Creation Fix Fix Missing Variable Fix package.json Merge pull request wmonk#204 from StefanSchoof/patch-1 Merge pull request wmonk#201 from StefanSchoof/patch-1 Merge pull request wmonk#199 from DorianGrey/master Merge pull request wmonk#165 from johnnyreilly/master Publish Add 1.0.17 changelog (#3402) Use new WebpackDevServer option (#3401) Fix grammar in README (#3394) Add link to VS Code troubleshooting guide (#3399) Update VS Code debug configuration (#3400) Update README.md (#3392) Publish Reorder publishing instructions Changelog for 1.0.16 (#3376) Update favicon description (#3374) Changelog for 1.0.15 (#3357) Replace template literal; fixes #3367 (#3368) CLI@1.4.2 Publish Add preflight CWD check for npm (#3355) Stop using `npm link` in tests (#3345) Fix for add .gitattributes file #3080 (#3122) Mention that start_url needs to be "." for client side routing start using npm-run-all to build scss and js (#2957) Updating the Service Worker opt-out documentation (#3108) Remove an useless negation in registerServiceWorker.js (#3150) Remove output.path from dev webpack config (#3158) Add `.mjs` support (#3239) Add documentation for Enzyme 3 integration (#3286) Make uglify work in Safari 10.0 - fixes #3280 (#3281) Fix favicon sizes value in manifest (#3287) Bump dependencies (#3342) recommend react-snap; react-snapshot isn't upgraded for React 16 (#3328) Update appveyor.cleanup-cache.txt Polyfill rAF in test environment (#3340) Use React 16 in development Use a simpler string replacement for the overlay Clarify the npm precompilation advice --no-edit Update `eslint-plugin-react` (#3146) Add jest coverage configuration docs (#3279) Update link to Jest Expect docs (#3303) Update README.md Fix dead link to Jest "expect" docs (#3289) v2.8.0 Use production React version for bundled overlay (#3267) Add warning when using `react-error-overlay` in production (#3264) Add external links to deployment services (#3265) `react-error-overlay` has no dependencies now (#3263) Add click-to-open support for build errors (#3100) Update style-loader and disable inclusion of its HMR code in builds (#3236) Update url-loader to 0.6.2 for mime ReDoS vuln (#3246) Make error overlay to run in the context of the iframe (#3142) Upgrade to typescript 2.5.3 Fix Windows compatibility (#3232) Fix package management link in README (#3227) Watch for changes in `src/**/node_modules` (#3230) More spec compliant HTML template (#2914) Minor change to highlight dev proxy behaviour (#3075) Correct manual proxy documentation (#3185) Improve grammar in README (#3211) Publish Fix license comments Changelog for 1.0.14 BSD+Patents -> MIT (#3189) Add link to active CSS modules discussion (#3163) Update webpack-dev-server to 2.8.2 (#3157) Part of class fields to stage 3 (#2908) Update unclear wording in webpack config docs (#3160) Display pid in already running message (#3131) Link local react-error-overlay package in kitchensink test Resolved issue #2971 (#2989) Revert "run npm 5.4.0 in CI (#3026)" (#3107) Updated react-error-overlay to latest Flow (0.54.0) (#3065) Auto-detect running editor on Linux for error overlay (#3077) Clean target directory before compiling overlay (#3102) Rerun prettier and pin version (#3058) ...
Resolves #2805
This a basic implementation of "click to open in editor" feature for build(compile time) errors and We can improve it based on the feedback coming from the community.
Currently, it only supports Babel syntax errors and ESLint errors. What are the other common or known error types that we can consider here?
Also, please note that this includes a refactoring to the programming interface of the error overlay and it will break any project that uses the package separately without CRA.