commands/FBComponentCommands.py (98 lines of code) (raw):

#!/usr/bin/python # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. import fbchisellldbbase as fb import fbchisellldbviewhelpers as viewHelpers def lldbcommands(): return [ FBComponentsDebugCommand(), FBComponentsPrintCommand(), FBComponentsReflowCommand(), ] class FBComponentsDebugCommand(fb.FBCommand): def name(self): return "dcomponents" def description(self): return "Set debugging options for components." def options(self): return [ fb.FBCommandArgument( short="-s", long="--set", arg="set", help="Set debug mode for components", boolean=True, ), fb.FBCommandArgument( short="-u", long="--unset", arg="unset", help="Unset debug mode for components", boolean=True, ), ] def run(self, arguments, options): if options.set: fb.evaluateEffect("[CKComponentDebugController setDebugMode:YES]") print("Debug mode for ComponentKit has been set.") elif options.unset: fb.evaluateEffect("[CKComponentDebugController setDebugMode:NO]") print("Debug mode for ComponentKit has been unset.") else: print("No option for ComponentKit Debug mode specified.") class FBComponentsPrintCommand(fb.FBCommand): def name(self): return "pcomponents" def description(self): return ( "Print a recursive description of components found starting from <aView>." ) def options(self): return [ fb.FBCommandArgument( short="-u", long="--up", arg="upwards", boolean=True, default=False, help="Print only the component hierarchy found on the first superview that has them, carrying the search up to its window.", ), fb.FBCommandArgument( short="-v", long="--show-views", arg="showViews", type="BOOL", default="YES", help="Prints the component hierarchy and does not print the views if the supplied argument is 'NO'. Supply either a 'YES' or a 'NO'. The default is to show views.", ), ] def args(self): return [ fb.FBCommandArgument( arg="aView", type="UIView* or CKComponent*", help="The view or component from which the search for components begins.", default="(id)[[UIApplication sharedApplication] keyWindow]", ) ] def run(self, arguments, options): upwards = "YES" if options.upwards else "NO" showViews = "YES" if options.showViews == "YES" else "NO" view = fb.evaluateInputExpression(arguments[0]) if not viewHelpers.isView(view): # assume it's a CKComponent view = fb.evaluateExpression("((CKComponent *)%s).viewContext.view" % view) print( fb.describeObject( "[CKComponentHierarchyDebugHelper componentHierarchyDescriptionForView:(UIView *)" + view + " searchUpwards:" + upwards + " showViews:" + showViews + "]" ) ) class FBComponentsReflowCommand(fb.FBCommand): def name(self): return "rcomponents" def description(self): return "Synchronously reflow and update all components." def run(self, arguments, options): fb.evaluateEffect("[CKComponentDebugController reflowComponents]")