Skip to content
Permalink
Browse files

Use Metro support for auto-collapsing internal stack frames (#25839)

Summary:
Pull Request resolved: #25839

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: b0b035618cb000935a555796523637b5f0a688d3
  • Loading branch information...
motiz88 authored and facebook-github-bot committed Jul 29, 2019
1 parent 6f4c4b5 commit 77125a1ac364a6b7e2382fdc86cc19a3e2eba089
@@ -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
*/
@@ -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 {
@@ -18,6 +18,7 @@ export type StackFrame = {|
file: string,
lineNumber: number,
methodName: string,
collapse?: boolean,
|};

export type ExceptionData = {
@@ -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:
@@ -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
{

0 comments on commit 77125a1

Please sign in to comment.
You can’t perform that action at this time.