Skip to content

Commit

Permalink
Use Metro support for auto-collapsing internal stack frames
Browse files Browse the repository at this point in the history
Summary:
Changes `ExceptionsManager` to respect the `collapse` field in each symbolicated stack frame returned from Metro. This is ultimately driven by a Metro config option (which will have a default set in react-native-community/cli#596).

This is part of a redesign of work done originally in #24662.

Reviewed By: cpojer

Differential Revision: D16500277

fbshipit-source-id: bded9a7b037b9f944b27125d43e35fcce5bd109a
  • Loading branch information
motiz88 authored and facebook-github-bot committed Jul 29, 2019
1 parent 59db059 commit 015c9d3
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 12 deletions.
15 changes: 3 additions & 12 deletions Libraries/Core/ExceptionsManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,6 @@

import type {ExtendedError} from './Devtools/parseErrorStack';

const INTERNAL_CALLSITES_REGEX = new RegExp(
[
'/Libraries/Renderer/oss/ReactNativeRenderer-dev\\.js$',
'/Libraries/BatchedBridge/MessageQueue\\.js$',
].join('|'),
);

/**
* Handles the developer-visible aspect of errors and exceptions
*/
Expand Down Expand Up @@ -50,14 +43,12 @@ function reportException(e: ExtendedError, isFatal: boolean) {
symbolicateStackTrace(stack)
.then(prettyStack => {
if (prettyStack) {
const stackWithoutInternalCallsites = prettyStack.filter(
frame =>
frame.file &&
frame.file.match(INTERNAL_CALLSITES_REGEX) === null,
const stackWithoutCollapsedFrames = prettyStack.filter(
frame => !frame.collapse,
);
NativeExceptionsManager.updateExceptionMessage(
message,
stackWithoutInternalCallsites,
stackWithoutCollapsedFrames,
currentExceptionID,
);
} else {
Expand Down
1 change: 1 addition & 0 deletions Libraries/Core/NativeExceptionsManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export type StackFrame = {|
file: string,
lineNumber: number,
methodName: string,
collapse?: boolean,
|};

export type ExceptionData = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,7 @@ namespace JS {
NSString *file() const;
double lineNumber() const;
NSString *methodName() const;
folly::Optional<bool> collapse() const;

StackFrame(NSDictionary *const v) : _v(v) {}
private:
Expand Down Expand Up @@ -2649,6 +2650,11 @@ inline NSString *JS::NativeExceptionsManager::StackFrame::methodName() const
id const p = _v[@"methodName"];
return RCTBridgingToString(p);
}
inline folly::Optional<bool> JS::NativeExceptionsManager::StackFrame::collapse() const
{
id const p = _v[@"collapse"];
return RCTBridgingToOptionalBool(p);
}

inline NSString *JS::NativeExceptionsManager::ExceptionData::message() const
{
Expand Down

0 comments on commit 015c9d3

Please sign in to comment.