diff --git a/ruling/snapshots/cognitive-complexity b/ruling/snapshots/cognitive-complexity index 961ca769..40924c9c 100644 --- a/ruling/snapshots/cognitive-complexity +++ b/ruling/snapshots/cognitive-complexity @@ -1,419 +1,237 @@ -src/Chart.js/samples/utils.js: 13 src/Chart.js/src/controllers/controller.bar.js: 380 src/Chart.js/src/controllers/controller.doughnut.js: 147 src/Chart.js/src/controllers/controller.line.js: 39,198 -src/Chart.js/src/controllers/controller.radar.js: 28,75 -src/Chart.js/src/core/core.controller.js: 235 +src/Chart.js/src/controllers/controller.radar.js: 28 src/Chart.js/src/core/core.element.js: 6 -src/Chart.js/src/core/core.helpers.js: 10 -src/Chart.js/src/core/core.layouts.js: 109 -src/Chart.js/src/core/core.scale.js: 381,675 +src/Chart.js/src/core/core.helpers.js: 10,35,235 +src/Chart.js/src/core/core.scale.js: 381,675,713,821 src/Chart.js/src/elements/element.line.js: 27 src/Chart.js/src/elements/element.rectangle.js: 56 src/Chart.js/src/plugins/plugin.filler.js: 99,215 -src/Chart.js/src/plugins/plugin.legend.js: 206,322,470 +src/Chart.js/src/plugins/plugin.legend.js: 470 src/Chart.js/src/plugins/plugin.title.js: 144 -src/Chart.js/src/scales/scale.linear.js: 19 src/Chart.js/src/scales/scale.linearbase.js: 82 -src/Chart.js/src/scales/scale.logarithmic.js: 72 -src/Chart.js/src/scales/scale.radialLinear.js: 467 src/Chart.js/src/scales/scale.time.js: 526 -src/Ghost/core/server/adapters/scheduling/SchedulingDefault.js: 153,196 src/Ghost/core/server/adapters/scheduling/utils.js: 7 src/Ghost/core/server/adapters/storage/index.js: 10 -src/Ghost/core/server/api/index.js: 69,249 -src/Ghost/core/server/api/users.js: 107 -src/Ghost/core/server/api/utils.js: 312 +src/Ghost/core/server/api/index.js: 69 src/Ghost/core/server/controllers/frontend/context.js: 23 -src/Ghost/core/server/controllers/frontend/post-lookup.js: 13 -src/Ghost/core/server/data/importer/importers/data/base.js: 113,194 -src/Ghost/core/server/data/importer/importers/data/index.js: 34 +src/Ghost/core/server/data/importer/importers/data/base.js: 194 src/Ghost/core/server/data/meta/description.js: 4 src/Ghost/core/server/data/meta/structured_data.js: 3 src/Ghost/core/server/data/meta/title.js: 4 src/Ghost/core/server/data/schema/commands.js: 8 -src/Ghost/core/server/data/validation/index.js: 96,179 -src/Ghost/core/server/ghost-server.js: 38 -src/Ghost/core/server/helpers/authors.js: 16 +src/Ghost/core/server/data/validation/index.js: 185 src/Ghost/core/server/helpers/body_class.js: 10 -src/Ghost/core/server/helpers/foreach.js: 19 -src/Ghost/core/server/helpers/ghost_head.js: 93 -src/Ghost/core/server/helpers/has.js: 117 -src/Ghost/core/server/helpers/tags.js: 16 +src/Ghost/core/server/helpers/ghost_head.js: 125 src/Ghost/core/server/lib/common/i18n.js: 195 -src/Ghost/core/server/models/base/index.js: 246,748 -src/Ghost/core/server/models/base/listeners.js: 51 -src/Ghost/core/server/models/plugins/filter.js: 16 -src/Ghost/core/server/models/plugins/pagination.js: 140 -src/Ghost/core/server/models/post.js: 92,166,370,626 +src/Ghost/core/server/models/base/index.js: 246 +src/Ghost/core/server/models/post.js: 92,166,370 src/Ghost/core/server/models/relations/authors.js: 156,251 -src/Ghost/core/server/models/settings.js: 101 -src/Ghost/core/server/models/user.js: 84,400,591 -src/Ghost/core/server/services/auth/auth-strategies.js: 83 -src/Ghost/core/server/services/mail/GhostMailer.js: 48 -src/Ghost/core/server/services/permissions/can-this.js: 27 +src/Ghost/core/server/models/user.js: 84,591 src/Ghost/core/server/services/url/utils.js: 244 -src/Ghost/core/server/update-check.js: 86 -src/Ghost/core/server/web/middleware/serve-public-file.js: 9 -src/angular.js/i18n/ucd/src/extractValues.js: 13 -src/angular.js/lib/grunt/utils.js: 236 -src/angular.js/lib/grunt/validate-angular-files.js: 11 -src/angular.js/scripts/code.angularjs.org-firebase/functions/index.js: 12 -src/angular.js/src/Angular.js: 262,351,871,1084 -src/angular.js/src/auto/injector.js: 93,820,874 -src/angular.js/src/jqLite.js: 336,405,477,680,762 -src/angular.js/src/loader.js: 26 -src/angular.js/src/ng/anchorScroll.js: 174 -src/angular.js/src/ng/animate.js: 67,314 -src/angular.js/src/ng/animateCss.js: 18 -src/angular.js/src/ng/animateRunner.js: 36 -src/angular.js/src/ng/browser.js: 25 -src/angular.js/src/ng/cacheFactory.js: 87 -src/angular.js/src/ng/compile.js: 1187,1314,1588,3781,3797 -src/angular.js/src/ng/controller.js: 57 -src/angular.js/src/ng/directive/form.js: 515 -src/angular.js/src/ng/directive/input.js: 1265,1418,1468,1705 -src/angular.js/src/ng/directive/ngClass.js: 13 -src/angular.js/src/ng/directive/ngIf.js: 89 -src/angular.js/src/ng/directive/ngInclude.js: 195 -src/angular.js/src/ng/directive/ngList.js: 98 -src/angular.js/src/ng/directive/ngModel.js: 599,725 -src/angular.js/src/ng/directive/ngOptions.js: 253,416 -src/angular.js/src/ng/directive/ngPluralize.js: 183 -src/angular.js/src/ng/directive/ngRepeat.js: 465 -src/angular.js/src/ng/directive/ngTransclude.js: 165 -src/angular.js/src/ng/directive/select.js: 382,767 -src/angular.js/src/ng/filter/filter.js: 177,214 -src/angular.js/src/ng/filter/filters.js: 217,292,611 -src/angular.js/src/ng/filter/orderBy.js: 615,674 -src/angular.js/src/ng/http.js: 105,136,432 +src/angular.js/src/Angular.js: 262,351,902,1084 +src/angular.js/src/auto/injector.js: 93 +src/angular.js/src/jqLite.js: 405,477,680,762 +src/angular.js/src/ng/browser.js: 119 +src/angular.js/src/ng/compile.js: 1588,1732,2051,2105,2226,2344,2435,2767,2946,3044,3155,3324,3438,3533 +src/angular.js/src/ng/controller.js: 84 +src/angular.js/src/ng/directive/input.js: 1705 +src/angular.js/src/ng/directive/ngRepeat.js: 533 +src/angular.js/src/ng/filter/filter.js: 214 +src/angular.js/src/ng/filter/filters.js: 217,292 +src/angular.js/src/ng/filter/orderBy.js: 674 +src/angular.js/src/ng/http.js: 136,1350 src/angular.js/src/ng/httpBackend.js: 59 -src/angular.js/src/ng/interpolate.js: 98 -src/angular.js/src/ng/interval.js: 8 -src/angular.js/src/ng/location.js: 211,855 -src/angular.js/src/ng/log.js: 77 -src/angular.js/src/ng/parse.js: 70,180,513,654,906,1312,1781 -src/angular.js/src/ng/rootScope.js: 101 -src/angular.js/src/ng/sce.js: 250 -src/angular.js/src/ng/sniffer.js: 21 -src/angular.js/src/ng/testability.js: 6 -src/angular.js/src/ng/timeout.js: 8 -src/angular.js/src/ngAnimate/animateCss.js: 357 -src/angular.js/src/ngAnimate/animateCssDriver.js: 17 -src/angular.js/src/ngAnimate/animateJs.js: 9 -src/angular.js/src/ngAnimate/animateJsDriver.js: 5 -src/angular.js/src/ngAnimate/animateQueue.js: 106 -src/angular.js/src/ngAnimate/animation.js: 25 -src/angular.js/src/ngAria/aria.js: 253,359 -src/angular.js/src/ngMessages/messages.js: 351,653 -src/angular.js/src/ngMock/angular-mocks.js: 463,1363,1621,1845,2012,2807 +src/angular.js/src/ng/interpolate.js: 240 +src/angular.js/src/ng/location.js: 901 +src/angular.js/src/ng/parse.js: 70,180,513,654,906 +src/angular.js/src/ng/rootScope.js: 606,688,771,1379 +src/angular.js/src/ngAnimate/animateCss.js: 449,889 +src/angular.js/src/ngAnimate/animateJs.js: 13 +src/angular.js/src/ngAnimate/animateQueue.js: 308,620 +src/angular.js/src/ngAria/aria.js: 257 +src/angular.js/src/ngMock/angular-mocks.js: 1363 src/angular.js/src/ngMock/browserTrigger.js: 56 src/angular.js/src/ngParseExt/ucd.js: 6,564 -src/angular.js/src/ngResource/resource.js: 583 -src/angular.js/src/ngRoute/directive/ngView.js: 187 -src/angular.js/src/ngRoute/route.js: 253,353 +src/angular.js/src/ngResource/resource.js: 724 src/angular.js/src/ngSanitize/filter/linky.js: 141 -src/angular.js/src/ngSanitize/sanitize.js: 508,609 -src/angular.js/src/ngTouch/swipe.js: 108 -src/brackets/src/JSUtils/Preferences.js: 80 -src/brackets/src/JSUtils/ScopeManager.js: 124,521,817 -src/brackets/src/JSUtils/Session.js: 350,518,657 -src/brackets/src/JSUtils/node/TernNodeDomain.js: 289,607,840 +src/angular.js/src/ngSanitize/sanitize.js: 508 +src/brackets/src/JSUtils/ScopeManager.js: 521,1117 +src/brackets/src/JSUtils/Session.js: 350,657 +src/brackets/src/JSUtils/node/TernNodeDomain.js: 840 src/brackets/src/LiveDevelopment/Agents/DOMHelpers.js: 66 -src/brackets/src/LiveDevelopment/Agents/RemoteFunctions.js: 33 -src/brackets/src/LiveDevelopment/LiveDevMultiBrowser.js: 356,530 -src/brackets/src/LiveDevelopment/LiveDevelopment.js: 690,1138,1334 -src/brackets/src/LiveDevelopment/MultiBrowserImpl/language/HTMLInstrumentation.js: 733 +src/brackets/src/LiveDevelopment/Agents/RemoteFunctions.js: 809,893 src/brackets/src/LiveDevelopment/MultiBrowserImpl/language/HTMLSimpleDOM.js: 267 -src/brackets/src/LiveDevelopment/MultiBrowserImpl/protocol/remote/DocumentObserver.js: 40 -src/brackets/src/LiveDevelopment/MultiBrowserImpl/protocol/remote/LiveDevProtocolRemote.js: 30 -src/brackets/src/LiveDevelopment/MultiBrowserImpl/transports/node/NodeSocketTransportDomain.js: 79 -src/brackets/src/brackets.js: 232,353 -src/brackets/src/command/DefaultMenus.js: 65 -src/brackets/src/command/KeyBindingManager.js: 242,339,636,1123 +src/brackets/src/LiveDevelopment/MultiBrowserImpl/protocol/remote/LiveDevProtocolRemote.js: 193 +src/brackets/src/command/KeyBindingManager.js: 242,357,636,1134 src/brackets/src/command/Menus.js: 378,562 -src/brackets/src/document/Document.js: 630 -src/brackets/src/document/DocumentCommandHandlers.js: 26 +src/brackets/src/document/DocumentCommandHandlers.js: 149,864 src/brackets/src/document/TextRange.js: 108 -src/brackets/src/editor/CSSInlineEditor.js: 59,165 -src/brackets/src/editor/CodeHintList.js: 185,335 -src/brackets/src/editor/CodeHintManager.js: 417 -src/brackets/src/editor/Editor.js: 748,872,1841,1982,2217 -src/brackets/src/editor/EditorCommandHandlers.js: 184,345,826,950 -src/brackets/src/editor/EditorStatusBar.js: 372 -src/brackets/src/extensibility/ExtensionManager.js: 247,747 -src/brackets/src/extensibility/ExtensionManagerDialog.js: 63,217,307 -src/brackets/src/extensibility/ExtensionManagerView.js: 154,225 -src/brackets/src/extensibility/InstallExtensionDialog.js: 142 -src/brackets/src/extensibility/node/ExtensionManagerDomain.js: 217 -src/brackets/src/extensibility/node/package-validator.js: 183,278 +src/brackets/src/editor/CSSInlineEditor.js: 59 +src/brackets/src/editor/CodeHintList.js: 335 +src/brackets/src/editor/Editor.js: 755,2217 +src/brackets/src/editor/EditorCommandHandlers.js: 184,345,843,973 +src/brackets/src/extensibility/ExtensionManagerView.js: 225 +src/brackets/src/extensibility/node/ExtensionManagerDomain.js: 223 +src/brackets/src/extensibility/node/package-validator.js: 188 src/brackets/src/extensions/default/CSSCodeHints/main.js: 249,372 -src/brackets/src/extensions/default/CodeFolding/foldhelpers/foldcode.js: 16,117 -src/brackets/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js: 50,212 +src/brackets/src/extensions/default/CodeFolding/foldhelpers/foldcode.js: 28 +src/brackets/src/extensions/default/CodeFolding/foldhelpers/foldgutter.js: 50 src/brackets/src/extensions/default/CodeFolding/foldhelpers/handlebarsFold.js: 103 src/brackets/src/extensions/default/CodeFolding/foldhelpers/indentFold.js: 22 -src/brackets/src/extensions/default/DebugCommands/main.js: 173,357,480,530 +src/brackets/src/extensions/default/DebugCommands/main.js: 357,480 src/brackets/src/extensions/default/HTMLCodeHints/main.js: 298,386,476 -src/brackets/src/extensions/default/HealthData/HealthDataManager.js: 51 -src/brackets/src/extensions/default/HealthData/thirdparty/uuid.js: 6 src/brackets/src/extensions/default/InlineColorEditor/ColorEditor.js: 630 -src/brackets/src/extensions/default/InlineColorEditor/thirdparty/tinycolor-min.js: 4 -src/brackets/src/extensions/default/InlineColorEditor/unittests.js: 62 +src/brackets/src/extensions/default/InlineColorEditor/thirdparty/tinycolor-min.js: 4,4 src/brackets/src/extensions/default/InlineTimingFunctionEditor/BezierCurveEditor.js: 435 src/brackets/src/extensions/default/InlineTimingFunctionEditor/TimingFunctionUtils.js: 85,170,315 -src/brackets/src/extensions/default/JavaScriptCodeHints/HintUtils2.js: 49 -src/brackets/src/extensions/default/JavaScriptCodeHints/main.js: 150,482,517,632 -src/brackets/src/extensions/default/JavaScriptCodeHints/thirdparty/requirejs/require.js: 7 -src/brackets/src/extensions/default/JavaScriptCodeHints/unittests.js: 60 -src/brackets/src/extensions/default/JavaScriptQuickEdit/main.js: 114 -src/brackets/src/extensions/default/JavaScriptQuickEdit/unittests.js: 111 +src/brackets/src/extensions/default/JavaScriptCodeHints/main.js: 482,770 +src/brackets/src/extensions/default/JavaScriptCodeHints/thirdparty/requirejs/require.js: 7,10,19,29,29 +src/brackets/src/extensions/default/JavaScriptQuickEdit/unittests.js: 129 src/brackets/src/extensions/default/JavaScriptRefactoring/ExtractToFunction.js: 142 -src/brackets/src/extensions/default/JavaScriptRefactoring/ExtractToVariable.js: 193 src/brackets/src/extensions/default/JavaScriptRefactoring/RefactoringUtils.js: 341 -src/brackets/src/extensions/default/JavaScriptRefactoring/RenameIdentifier.js: 71 src/brackets/src/extensions/default/JavaScriptRefactoring/WrapSelection.js: 122 -src/brackets/src/extensions/default/MDNDocs/main.js: 88 -src/brackets/src/extensions/default/MDNDocs/unittests.js: 36 -src/brackets/src/extensions/default/NavigationAndHistory/NavigationProvider.js: 98 -src/brackets/src/extensions/default/NavigationAndHistory/main.js: 235 src/brackets/src/extensions/default/PrefsCodeHints/main.js: 217,315 -src/brackets/src/extensions/default/QuickView/main.js: 178,447 -src/brackets/src/extensions/default/RecentProjects/main.js: 277 +src/brackets/src/extensions/default/QuickView/main.js: 335,447 src/brackets/src/extensions/default/SVGCodeHints/main.js: 171,261 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/basicAuth.js: 47 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/compress.js: 69 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/cookieSession.js: 51 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/directory.js: 48 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/json.js: 39 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/limit.js: 32 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/logger.js: 90 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/multipart.js: 80 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/session.js: 188 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/middleware/staticCache.js: 59 src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/lib/proto.js: 109 src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/index.js: 131 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/fs.js: 169,247,1158,1255,1395 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js: 139,217,255,452,780,844 -src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/zlib.js: 222,364 +src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/fs.js: 247,1158,1395 +src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/lib/_stream_readable.js: 139,217,255,844 +src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/multiparty/node_modules/readable-stream/zlib.js: 222 src/brackets/src/extensions/default/StaticServer/node/node_modules/connect/node_modules/qs/index.js: 93 -src/brackets/src/extensions/default/StaticServer/unittests.js: 45 -src/brackets/src/extensions/default/UrlCodeHints/main.js: 61,331,399,620,724 -src/brackets/src/filesystem/Directory.js: 138 -src/brackets/src/filesystem/File.js: 152 -src/brackets/src/filesystem/FileSystem.js: 261,596,729 -src/brackets/src/filesystem/FileSystemEntry.js: 183,456,547 -src/brackets/src/filesystem/impls/appshell/AppshellFileSystem.js: 411 -src/brackets/src/filesystem/impls/appshell/node/CSharpWatcher.js: 47 -src/brackets/src/help/HelpCommandHandlers.js: 72 -src/brackets/src/language/CSSUtils.js: 221,305,350,443,543,734,1533 -src/brackets/src/language/CodeInspection.js: 356 +src/brackets/src/extensions/default/UrlCodeHints/main.js: 61,142,331,399,620,724 +src/brackets/src/filesystem/FileSystemEntry.js: 183 +src/brackets/src/language/CSSUtils.js: 221,305,350,443,543,890,926,1046,1149,1218,1533,1563 src/brackets/src/language/HTMLDOMDiff.js: 92,535 src/brackets/src/language/HTMLSimpleDOM.js: 302 src/brackets/src/language/HTMLTokenizer.js: 182 src/brackets/src/language/HTMLUtils.js: 47,131,321 src/brackets/src/language/JSONUtils.js: 95,136,191 -src/brackets/src/language/JSUtils.js: 58,174 -src/brackets/src/language/LanguageManager.js: 926,1051 +src/brackets/src/language/LanguageManager.js: 1059 src/brackets/src/language/XMLUtils.js: 69,156,229 -src/brackets/src/preferences/PreferencesBase.js: 170,1445,1654,1721 -src/brackets/src/project/FileSyncManager.js: 100,278 -src/brackets/src/project/FileViewController.js: 145 -src/brackets/src/project/ProjectManager.js: 822 -src/brackets/src/project/ProjectModel.js: 599,1181 -src/brackets/src/project/WorkingSetView.js: 233 -src/brackets/src/search/FileFilters.js: 210,323 -src/brackets/src/search/FindBar.js: 260 -src/brackets/src/search/FindInFiles.js: 221,487,744 -src/brackets/src/search/FindInFilesUI.js: 155 -src/brackets/src/search/FindReplace.js: 276,416,494 -src/brackets/src/search/FindUtils.js: 239 +src/brackets/src/preferences/PreferencesBase.js: 179,1445,1654,1721 +src/brackets/src/project/FileSyncManager.js: 115 +src/brackets/src/project/ProjectModel.js: 1181 +src/brackets/src/project/WorkingSetView.js: 320 +src/brackets/src/search/FindBar.js: 347 +src/brackets/src/search/FindInFiles.js: 230 +src/brackets/src/search/FindReplace.js: 276 src/brackets/src/search/QuickOpen.js: 433 src/brackets/src/search/QuickSearchField.js: 145 -src/brackets/src/search/ScrollTrackMarkers.js: 29 -src/brackets/src/search/SearchResultsView.js: 150,385 +src/brackets/src/search/SearchResultsView.js: 258,400 src/brackets/src/search/node/FindInFilesDomain.js: 102 -src/brackets/src/utils/Async.js: 86 -src/brackets/src/utils/DragAndDrop.js: 96,178 -src/brackets/src/utils/DropdownEventHandler.js: 73 -src/brackets/src/utils/EventDispatcher.js: 85,136 -src/brackets/src/utils/ExtensionLoader.js: 168 -src/brackets/src/utils/Global.js: 30 +src/brackets/src/utils/DropdownEventHandler.js: 82 +src/brackets/src/utils/EventDispatcher.js: 85 src/brackets/src/utils/NodeConnection.js: 433 -src/brackets/src/utils/Resizer.js: 198 -src/brackets/src/utils/StringMatch.js: 224,507,850 -src/brackets/src/utils/UpdateNotification.js: 116,321 -src/brackets/src/utils/ViewUtils.js: 186,418 -src/brackets/src/view/MainViewManager.js: 448,1229,1450 -src/brackets/src/view/ThemeSettings.js: 78 -src/brackets/src/view/ViewCommandHandlers.js: 33 +src/brackets/src/utils/Resizer.js: 198,389 +src/brackets/src/utils/StringMatch.js: 224,572 +src/brackets/src/view/MainViewManager.js: 448 src/brackets/src/widgets/Dialogs.js: 142 -src/brackets/src/widgets/InlineMenu.js: 274 src/brackets/src/widgets/bootstrap-modal.js: 155 -src/brackets/src/widgets/bootstrap-twipsy-mod.js: 319 -src/create-react-app/packages/react-dev-utils/WebpackDevServerUtils.js: 116,266,389 -src/create-react-app/packages/react-dev-utils/eslintFormatter.js: 21 -src/create-react-app/packages/react-dev-utils/launchEditor.js: 177,268 +src/create-react-app/packages/react-dev-utils/launchEditor.js: 177 src/create-react-app/packages/react-error-overlay/src/containers/StackFrameCodeBlock.js: 31 src/create-react-app/packages/react-error-overlay/src/utils/generateAnsiHTML.js: 64 src/create-react-app/packages/react-error-overlay/src/utils/parseCompileError.js: 25 -src/create-react-app/packages/react-error-overlay/src/utils/unmapper.js: 34 src/create-react-app/packages/react-scripts/scripts/eject.js: 48 src/create-react-app/packages/react-scripts/scripts/init.js: 77 -src/create-react-app/packages/react-scripts/scripts/utils/verifyPackageTree.js: 18 -src/create-react-app/packages/react-scripts/template/src/serviceWorker.js: 58 -src/express/lib/response.js: 107,750,1012 -src/express/lib/router/index.js: 136,327 -src/express/lib/router/route.js: 98 -src/freeCodeCamp/client/frame-runner.js: 1 -src/freeCodeCamp/common/models/user.js: 205,568 -src/freeCodeCamp/common/utils/ajax-stream.js: 123 -src/freeCodeCamp/public/js/calculator.js: 19 -src/freeCodeCamp/public/js/lib/loop-protect/loop-protect.js: 42,80,125 -src/freeCodeCamp/seed/unpackedChallenge.js: 32 -src/freeCodeCamp/server/boot/authentication.js: 81 +src/express/lib/response.js: 107,750 +src/express/lib/router/index.js: 176 +src/freeCodeCamp/common/utils/ajax-stream.js: 155 +src/freeCodeCamp/public/js/lib/loop-protect/loop-protect.js: 146 +src/freeCodeCamp/seed/unpackedChallenge.js: 48 src/freeCodeCamp/server/utils/commit.js: 24 -src/jQuery-File-Upload/js/cors/jquery.postmessage-transport.js: 61 -src/jQuery-File-Upload/js/cors/jquery.xdr-transport.js: 29 -src/jQuery-File-Upload/js/jquery.fileupload-angular.js: 48,205 -src/jQuery-File-Upload/js/jquery.fileupload-image.js: 190,235 +src/jQuery-File-Upload/js/jquery.fileupload-image.js: 190 src/jQuery-File-Upload/js/jquery.fileupload-validate.js: 85 -src/jQuery-File-Upload/js/jquery.fileupload.js: 442,651,725,889,975,1437 -src/jQuery-File-Upload/js/jquery.iframe-transport.js: 26 -src/jQuery-File-Upload/js/vendor/jquery.ui.widget.js: 192,222,388,503,573,702 +src/jQuery-File-Upload/js/jquery.fileupload.js: 442,975 +src/jQuery-File-Upload/js/vendor/jquery.ui.widget.js: 192,388 src/jest/packages/babel-plugin-jest-hoist/src/index.js: 82 src/jest/packages/diff-sequences/src/index.js: 269,402,541 src/jest/packages/expect/src/jasmine_utils.js: 59 -src/jest/packages/expect/src/matchers.js: 426 -src/jest/packages/expect/src/spy_matchers.js: 91,124,154,245,279 src/jest/packages/expect/src/to_throw_matchers.js: 28 src/jest/packages/expect/src/utils.js: 109 -src/jest/packages/jest-cli/src/cli/index.js: 221 -src/jest/packages/jest-cli/src/plugins/update_snapshots_interactive.js: 72 -src/jest/packages/jest-cli/src/reporters/coverage_reporter.js: 121,215 src/jest/packages/jest-cli/src/reporters/notify_reporter.js: 40 src/jest/packages/jest-cli/src/reporters/summary_reporter.js: 118 -src/jest/packages/jest-cli/src/reporters/utils.js: 101,193 src/jest/packages/jest-cli/src/run_jest.js: 97 -src/jest/packages/jest-cli/src/test_scheduler.js: 72 -src/jest/packages/jest-cli/src/watch.js: 52 +src/jest/packages/jest-cli/src/watch.js: 242 src/jest/packages/jest-config/src/normalize.js: 334 -src/jest/packages/jest-config/src/vendor/jsonlint.js: 245,473 -src/jest/packages/jest-editor-support/src/Runner.js: 47 -src/jest/packages/jest-haste-map/src/crawlers/node.js: 20,73 +src/jest/packages/jest-config/src/vendor/jsonlint.js: 245,543 src/jest/packages/jest-haste-map/src/crawlers/watchman.js: 28 -src/jest/packages/jest-haste-map/src/index.js: 352,632 -src/jest/packages/jest-haste-map/src/lib/watchman_watcher.js: 46,210 +src/jest/packages/jest-haste-map/src/index.js: 352,709 src/jest/packages/jest-haste-map/src/worker.js: 25 -src/jest/packages/jest-jasmine2/src/index.js: 25 -src/jest/packages/jest-jasmine2/src/jasmine/Env.js: 42 -src/jest/packages/jest-jasmine2/src/jasmine/spy_registry.js: 67 -src/jest/packages/jest-mock/src/index.js: 291,615 -src/jest/packages/jest-resolve-dependencies/src/index.js: 65 -src/jest/packages/jest-resolve/src/default_resolver.js: 51 +src/jest/packages/jest-mock/src/index.js: 615 src/jest/packages/jest-resolve/src/index.js: 320 src/jest/packages/jest-runtime/src/script_transformer.js: 180 src/jest/packages/jest-snapshot/src/State.js: 111 -src/jest/packages/jest-util/src/create_process_object.js: 19 -src/jest/packages/jest-worker/src/index.js: 59,157 +src/jest/packages/jest-util/src/create_process_object.js: 30 src/jest/packages/pretty-format/src/index.js: 101,169,427 -src/jquery/external/npo/npo.js: 5 -src/jquery/external/qunit/qunit.js: 12,2262 -src/jquery/external/requirejs/require.js: 12 -src/jquery/external/sinon/sinon.js: 47 -src/jquery/src/ajax.js: 56,139,197,387 -src/jquery/src/ajax/jsonp.js: 25 -src/jquery/src/ajax/xhr.js: 29 +src/jquery/external/qunit/qunit.js: 162,1561,1743,1832,1975,2496,2893,2987,3072,3278,3745,3903,4182 +src/jquery/external/requirejs/require.js: 12,266,413,837,1560,1618,2045 +src/jquery/external/sinon/sinon.js: 47,251,387,523,1342,1456,1928,3418,3735,6145 +src/jquery/src/ajax.js: 139,197,387,710 src/jquery/src/attributes/attr.js: 28 -src/jquery/src/attributes/classes.js: 27,64,109 -src/jquery/src/attributes/prop.js: 6 -src/jquery/src/attributes/val.js: 16 -src/jquery/src/callbacks.js: 41 -src/jquery/src/core.js: 23 +src/jquery/src/attributes/classes.js: 27,64,126 +src/jquery/src/core.js: 125 src/jquery/src/core/access.js: 11 src/jquery/src/core/init.js: 22 -src/jquery/src/core/ready-no-deferred.js: 5 -src/jquery/src/css.js: 51,208,323 +src/jquery/src/css.js: 51,208 src/jquery/src/css/adjustCSS.js: 8 src/jquery/src/css/showHide.js: 34 src/jquery/src/data.js: 97 src/jquery/src/data/Data.js: 108 -src/jquery/src/deferred.js: 52,349 -src/jquery/src/dimensions.js: 11 -src/jquery/src/effects.js: 87,259,296,461,533,585 -src/jquery/src/event.js: 39,108,223,296,360,515,636,709 +src/jquery/src/effects.js: 87,259,461,549 +src/jquery/src/event.js: 39,108,223,296,360 src/jquery/src/event/trigger.js: 21 -src/jquery/src/manipulation.js: 126,242,284,401 +src/jquery/src/manipulation.js: 126,242,284 src/jquery/src/manipulation/buildFragment.js: 16 -src/jquery/src/offset.js: 180 src/jquery/src/selector-native.js: 63 -src/jquery/src/serialize.js: 19 src/jquery/src/traversing.js: 41 src/react-native/IntegrationTests/SizeFlexibilityUpdateTest.js: 41 -src/react-native/Libraries/Alert/Alert.js: 66 -src/react-native/Libraries/Alert/AlertIOS.js: 107 -src/react-native/Libraries/Animated/src/bezier.js: 58 src/react-native/Libraries/Animated/src/nodes/AnimatedInterpolation.js: 101 src/react-native/Libraries/BatchedBridge/MessageQueue.js: 171,354 -src/react-native/Libraries/BatchedBridge/NativeModules.js: 71 src/react-native/Libraries/BugReporting/getReactData.js: 18 src/react-native/Libraries/Components/ScrollView/ScrollView.js: 715 src/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js: 67 src/react-native/Libraries/Components/StatusBar/StatusBar.js: 345 src/react-native/Libraries/Components/TextInput/TextInput.js: 741 src/react-native/Libraries/Components/Touchable/Touchable.js: 703 -src/react-native/Libraries/Components/WebView/WebView.android.js: 254 src/react-native/Libraries/Core/Timers/JSTimers.js: 104 src/react-native/Libraries/Experimental/WindowedListView.js: 210,325,427 src/react-native/Libraries/Image/Image.android.js: 202 -src/react-native/Libraries/Inspector/NetworkOverlay.js: 189 src/react-native/Libraries/Interaction/TouchHistoryMath.js: 25 src/react-native/Libraries/Lists/FillRateHelper.js: 138 src/react-native/Libraries/Lists/ListView/ListView.js: 408,661 src/react-native/Libraries/Lists/VirtualizeUtils.js: 75 -src/react-native/Libraries/Lists/VirtualizedList.js: 718,1395 +src/react-native/Libraries/Lists/VirtualizedList.js: 718,1402 src/react-native/Libraries/Lists/VirtualizedSectionList.js: 259 -src/react-native/Libraries/Network/XHRInterceptor.js: 71 src/react-native/Libraries/Performance/Systrace.js: 101 src/react-native/Libraries/ReactNative/requireNativeComponent.js: 101 -src/react-native/Libraries/Renderer/ReactFabric-dev.js: 15 -src/react-native/Libraries/Renderer/ReactFabric-prod.js: 27,573,959,997,1085,1268,1339,1357,1419,1630,1906,2001,2125,2354,2393,2462,2551,2642,2893,2955,3079,3442,3890,4212,4571,4654,4763,4780,4863,5006 -src/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js: 15 -src/react-native/Libraries/Renderer/ReactNativeRenderer-prod.js: 92,669,1213,1251,1339,1484,1555,1573,1635,1818,2116,2234,2381,2610,2649,2718,2807,2898,3158,3220,3344,3707,4116,4610,4969,5052,5161,5178,5261,5404 +src/react-native/Libraries/Renderer/ReactFabric-dev.js: 15,1531,1882,2043,2423,2633,3487,3872,5215,5589,5823,6130,6324,6614,6983,7066,7188,7349,7556,7662,8288,8505,8597,9251,9853,10243,10284,10358,11797,11990,12204,12400,12451,12666,12750,12855 +src/react-native/Libraries/Renderer/ReactFabric-prod.js: 27,573,959,997,1085,1268,1339,1357,1419,1630,1906,2001,2354,2393,2462,2551,2642,2893,2955,3079,3499,3576,3933,4062,4571,4654,4763,4780,4863,5006 +src/react-native/Libraries/Renderer/ReactNativeRenderer-dev.js: 15,1686,2037,2198,2873,3083,3866,4251,5551,5925,6159,6466,6660,6950,7319,7402,7524,7685,7892,7998,8624,8841,8933,9587,10223,10613,10654,10728,12167,12360,12574,12770,12821,13036,13120,13225 +src/react-native/Libraries/Renderer/ReactNativeRenderer-prod.js: 92,669,1213,1251,1339,1484,1555,1573,1635,1818,2116,2234,2610,2649,2718,2807,2898,3158,3220,3344,3751,4159,4177,4285,4426,4969,5052,5161,5178,5261,5404 src/react-native/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js: 31 -src/react-native/Libraries/Text/Text.js: 106 src/react-native/Libraries/Utilities/MatrixMath.js: 425 src/react-native/Libraries/Utilities/differ/deepDiffer.js: 15 src/react-native/Libraries/Utilities/stringifySafe.js: 16 src/react-native/Libraries/polyfills/Array.es6.js: 20 -src/react-native/Libraries/polyfills/Array.prototype.es6.js: 67 src/react-native/Libraries/polyfills/Object.es6.js: 16 -src/react-native/Libraries/polyfills/Object.es7.js: 12 -src/react-native/Libraries/polyfills/String.prototype.es6.js: 53,95 src/react-native/Libraries/polyfills/babelHelpers.js: 183 src/react-native/Libraries/polyfills/console.js: 65,218 -src/react-native/Libraries/vendor/core/Map.js: 21 -src/react-native/Libraries/vendor/core/toIterator.js: 29 -src/react-native/Libraries/vendor/emitter/EventValidator.js: 101 +src/react-native/Libraries/vendor/core/Map.js: 391 src/react-native/RNTester/js/TimerExample.js: 138 -src/react-native/RNTester/js/XHRExampleDownload.js: 70 src/react-native/babel-preset/configs/main.js: 62 -src/react-native/local-cli/generator/copyProjectTemplateAndReplace.js: 29 +src/react-native/local-cli/generator/copyProjectTemplateAndReplace.js: 36 src/react-native/local-cli/generator/promptSync.js: 13 -src/react-native/local-cli/link/ios/registerNativeModule.js: 32 src/react-native/local-cli/runIOS/findMatchingSimulator.js: 20 src/react-native/local-cli/runIOS/runIOS.js: 40 -src/react-native/local-cli/server/util/messageSocket.js: 98 src/react-native/local-cli/util/copyAndReplace.js: 27 src/react-native/local-cli/util/parseCommandLine.js: 24 src/react-native/react-native-cli/index.js: 269 -src/react-router/packages/react-router-native/experimental/StackRoute.js: 203 +src/react-router/packages/react-router-native/experimental/StackRoute.js: 256 src/react-router/website/modules/animated/Interpolation.js: 96 -src/react-router/website/modules/animated/bezier.js: 70 -src/react-router/website/modules/components/NativeExample.js: 12 -src/react-router/website/modules/components/WebExample.js: 13 -src/react/dangerfile.js: 99 src/react/fixtures/attribute-behavior/src/App.js: 126,219,894 -src/react/packages/create-subscription/src/createSubscription.js: 16 src/react/packages/events/ResponderEventPlugin.js: 315,476 src/react/packages/events/ResponderTouchHistoryStore.js: 180 src/react/packages/events/SyntheticEvent.js: 64 @@ -425,140 +243,95 @@ src/react/packages/react-dom/src/client/ReactDOMFiberComponent.js: 240,333,547,8 src/react/packages/react-dom/src/client/ReactDOMFiberInput.js: 140 src/react/packages/react-dom/src/client/ReactDOMFiberSelect.js: 80 src/react/packages/react-dom/src/client/ReactDOMSelection.js: 59 -src/react/packages/react-dom/src/client/validateDOMNesting.js: 163,406 +src/react/packages/react-dom/src/client/validateDOMNesting.js: 406 src/react/packages/react-dom/src/events/BeforeInputEventPlugin.js: 197 src/react/packages/react-dom/src/events/EnterLeaveEventPlugin.js: 37 src/react/packages/react-dom/src/events/ReactBrowserEventEmitter.js: 113 -src/react/packages/react-dom/src/server/ReactPartialRenderer.js: 320,378,704,748,940 +src/react/packages/react-dom/src/server/ReactPartialRenderer.js: 320,399,704,748,940 src/react/packages/react-dom/src/shared/ReactDOMInvalidARIAHook.js: 26 src/react/packages/react-dom/src/shared/ReactDOMUnknownPropertyHook.js: 39 src/react/packages/react-native-renderer/src/ReactNativeAttributePayload.js: 55,273 src/react/packages/react-native-renderer/src/__mocks__/ReactNativeViewConfigRegistry.js: 30 src/react/packages/react-native-renderer/src/__mocks__/deepDiffer.js: 12 -src/react/packages/react-noop-renderer/src/ReactNoop.js: 495 src/react/packages/react-reconciler/src/ReactChildFiber.js: 101,514,602,727,886,1089,1199 src/react/packages/react-reconciler/src/ReactFiber.js: 309 src/react/packages/react-reconciler/src/ReactFiberBeginWork.js: 301,556,773,865 src/react/packages/react-reconciler/src/ReactFiberClassComponent.js: 234,438,746,943 -src/react/packages/react-reconciler/src/ReactFiberCommitWork.js: 93 -src/react/packages/react-reconciler/src/ReactFiberCompleteWork.js: 52 -src/react/packages/react-reconciler/src/ReactFiberHydrationContext.js: 32 -src/react/packages/react-reconciler/src/ReactFiberScheduler.js: 162 -src/react/packages/react-reconciler/src/ReactFiberStack.js: 29 +src/react/packages/react-reconciler/src/ReactFiberCommitWork.js: 141,164,221,613,655,729 +src/react/packages/react-reconciler/src/ReactFiberCompleteWork.js: 407 +src/react/packages/react-reconciler/src/ReactFiberScheduler.js: 486,703,913,1131,1182,1405,1489,1598 src/react/packages/react-reconciler/src/ReactFiberTreeReflection.js: 97 src/react/packages/react-reconciler/src/ReactFiberUpdateQueue.js: 216 -src/react/packages/react-reconciler/src/ReactStrictModeWarnings.js: 227 src/react/packages/react/src/ReactChildren.js: 100 src/react/packages/react/src/ReactElement.js: 171,293 src/react/packages/react/src/ReactElementValidator.js: 175,279 -src/react/packages/shared/ReactDOMFrameScheduling.js: 121 src/react/packages/shared/ReactTreeTraversal.js: 108 -src/react/packages/shared/invokeGuardedCallback.js: 64 src/react/scripts/bench/benchmarks/pe-class-components/benchmark.js: 5,445,817,943,1019,3158,3393,4007,4752,5009 src/react/scripts/bench/benchmarks/pe-functional-components/benchmark.js: 4,438,808,924,991,2866,3099,3711,4334,4589 src/react/scripts/bench/benchmarks/pe-no-components/benchmark.js: 4,438,808,919,970,2723,2956,3568,4179,4434 -src/react/scripts/jest/matchers/toWarnDev.js: 17 -src/react/scripts/jest/typescript/preprocessor.js: 22 -src/react/scripts/release/build-commands/update-package-versions.js: 13 -src/react/scripts/release/publish-commands/publish-to-npm.js: 11 +src/react/scripts/release/build-commands/update-package-versions.js: 30 src/react/scripts/rollup/shims/react-native/ReactNativeViewConfigRegistry.js: 31 -src/redux/src/combineReducers.js: 118 -src/redux/src/createStore.js: 31 -src/reveal.js/js/reveal.js: 403,648,897,1017,1793,2333,2605,2711,2924,3001,3171,3401,3492,3537,3730,4028,4132,4399,4563 -src/reveal.js/plugin/markdown/markdown.js: 200,304 -src/reveal.js/plugin/notes/notes.js: 12 -src/reveal.js/plugin/search/search.js: 8 -src/reveal.js/plugin/zoom-js/zoom.js: 34 -src/socket.io/lib/index.js: 69,143 +src/reveal.js/js/reveal.js: 687,897,1017,1793,2333,2605,2711,2924,3171,3492,3730,4028,4132,4399,4563 +src/reveal.js/plugin/markdown/markdown.js: 304 +src/reveal.js/plugin/search/search.js: 43 +src/socket.io/lib/index.js: 69 src/spectrum/admin/src/helpers/utils.js: 52 src/spectrum/admin/src/views/communities/components/search/index.js: 86 src/spectrum/admin/src/views/users/components/search/index.js: 92 src/spectrum/api/authentication.js: 274 -src/spectrum/api/models/community.js: 168,330 -src/spectrum/api/models/user.js: 136,277 -src/spectrum/api/mutations/channel/joinChannelWithToken.js: 29 -src/spectrum/api/mutations/channel/toggleChannelSubscription.js: 24 src/spectrum/api/mutations/message/addMessage.js: 33 -src/spectrum/api/mutations/recurringPayment/upgradeCommunity.js: 30 -src/spectrum/api/mutations/recurringPayment/upgradeToPro.js: 24 -src/spectrum/api/mutations/thread/publishThread.js: 41 src/spectrum/api/queries/search/searchThreads.js: 27 src/spectrum/api/queries/thread/messageConnection.js: 20 src/spectrum/api/queries/thread/rootSearchThreads.js: 38 -src/spectrum/api/routes/api/email.js: 131 -src/spectrum/athena/queues/direct-message-notification.js: 24 src/spectrum/athena/queues/mention-notification.js: 25 -src/spectrum/athena/queues/new-message-in-thread/index.js: 24 src/spectrum/athena/utils/push-notifications/notification-formatting.js: 85 -src/spectrum/hermes/queues/send-community-payment-succeeded-email.js: 16 src/spectrum/pluto/queues/processModeratorAdded.js: 12 src/spectrum/pluto/queues/processModeratorRemoved.js: 11 src/spectrum/pluto/queues/processPrivateChannelAdded.js: 12 src/spectrum/pluto/queues/processPrivateChannelRemoved.js: 11 src/spectrum/shared/clients/group-messages.js: 7 src/spectrum/shared/generate-meta-info.js: 86 -src/spectrum/shared/graphql/queries/directMessageThread/getDirectMessageThreadMessageConnection.js: 46 -src/spectrum/shared/graphql/queries/thread/getThreadMessageConnection.js: 78 src/spectrum/src/components/avatar/hoverProfile.js: 44 -src/spectrum/src/components/chatInput/index.js: 152 src/spectrum/src/components/composer/index.js: 131 src/spectrum/src/components/globals/index.js: 334 src/spectrum/src/components/listItems/index.js: 129 -src/spectrum/src/components/modals/ChangeChannelModal/channelSelector.js: 22 -src/spectrum/src/components/modals/DeleteDoubleCheckModal/index.js: 74 -src/spectrum/src/components/profile/community.js: 60 src/spectrum/src/components/profile/user.js: 68 -src/spectrum/src/components/threadComposer/components/composer.js: 120,215,346 +src/spectrum/src/components/threadComposer/components/composer.js: 346 src/spectrum/src/helpers/utils.js: 96 -src/spectrum/src/registerServiceWorker.js: 24 src/spectrum/src/views/channel/index.js: 159 -src/spectrum/src/views/community/components/channelList.js: 49 src/spectrum/src/views/community/index.js: 111 -src/spectrum/src/views/communityAnalytics/components/topAndNewThreads.js: 23 -src/spectrum/src/views/communityBilling/components/subscription.js: 62 -src/spectrum/src/views/communityMembers/components/communityMembers.js: 141 src/spectrum/src/views/communityMembers/components/importSlack.js: 117 -src/spectrum/src/views/dashboard/components/sidebarChannels.js: 50 -src/spectrum/src/views/dashboard/components/threadFeed.js: 93,213 +src/spectrum/src/views/dashboard/components/threadFeed.js: 93 src/spectrum/src/views/directMessages/containers/newThread.js: 201 src/spectrum/src/views/explore/components/search.js: 115 -src/spectrum/src/views/explore/view.js: 109 -src/spectrum/src/views/navbar/components/notificationsTab.js: 51,234 +src/spectrum/src/views/navbar/components/notificationsTab.js: 51 src/spectrum/src/views/navbar/index.js: 75 src/spectrum/src/views/notifications/components/sortAndGroupNotificationMessages.js: 3 src/spectrum/src/views/thread/components/actionBar.js: 209 src/spectrum/src/views/thread/index.js: 223,286 -src/spectrum/src/views/user/components/communityList.js: 23 -src/three.js/editor/js/Loader.js: 12,520 -src/three.js/editor/js/Menubar.Edit.js: 125 -src/three.js/editor/js/Script.js: 72,136 +src/three.js/editor/js/Loader.js: 520 +src/three.js/editor/js/Script.js: 141 src/three.js/editor/js/Sidebar.Material.js: 508,1030 src/three.js/editor/js/Sidebar.Object.js: 365 -src/three.js/editor/js/Sidebar.Settings.Shortcuts.js: 5 -src/three.js/editor/js/Viewport.js: 5 src/three.js/src/animation/AnimationAction.js: 468 src/three.js/src/animation/AnimationClip.js: 188 src/three.js/src/animation/AnimationUtils.js: 89 src/three.js/src/animation/KeyframeTrack.js: 354,432 -src/three.js/src/animation/PropertyBinding.js: 211,468 +src/three.js/src/animation/PropertyBinding.js: 468 src/three.js/src/core/BufferGeometry.js: 362,673 src/three.js/src/core/DirectGeometry.js: 84 src/three.js/src/core/Geometry.js: 216,548,689,975,1198 src/three.js/src/core/Object3D.js: 618 src/three.js/src/extras/Earcut.js: 8,215,397,500 src/three.js/src/extras/core/CurvePath.js: 163 -src/three.js/src/extras/core/ShapePath.js: 56 +src/three.js/src/extras/core/ShapePath.js: 56,77 src/three.js/src/extras/curves/CatmullRomCurve3.js: 104 -src/three.js/src/geometries/CylinderGeometry.js: 41 -src/three.js/src/geometries/ExtrudeGeometry.js: 54 -src/three.js/src/geometries/PolyhedronGeometry.js: 39 -src/three.js/src/geometries/ShapeGeometry.js: 52 +src/three.js/src/geometries/ExtrudeGeometry.js: 88,206 src/three.js/src/geometries/SphereGeometry.js: 40 src/three.js/src/geometries/WireframeGeometry.js: 10 -src/three.js/src/loaders/CompressedTextureLoader.js: 23 -src/three.js/src/loaders/FileLoader.js: 18 +src/three.js/src/loaders/FileLoader.js: 18,169 src/three.js/src/loaders/JSONLoader.js: 80,382 -src/three.js/src/loaders/Loader.js: 101 +src/three.js/src/loaders/Loader.js: 101,107 src/three.js/src/loaders/MaterialLoader.js: 38 src/three.js/src/loaders/ObjectLoader.js: 513,584 src/three.js/src/materials/Material.js: 80,136 @@ -571,83 +344,66 @@ src/three.js/src/math/Vector4.js: 273 src/three.js/src/objects/Line.js: 103 src/three.js/src/objects/LineSegments.js: 28 src/three.js/src/objects/Mesh.js: 69,225 -src/three.js/src/objects/Points.js: 36 src/three.js/src/objects/SkinnedMesh.js: 123 -src/three.js/src/polyfills.js: 60 -src/three.js/src/renderers/WebGL2Renderer.js: 11 -src/three.js/src/renderers/WebGLRenderer.js: 53 -src/three.js/src/renderers/webgl/WebGLCapabilities.js: 5 +src/three.js/src/renderers/WebGLRenderer.js: 53,580,674,838,1072,1271,1448,1604,1929,2490 src/three.js/src/renderers/webgl/WebGLLights.js: 134 src/three.js/src/renderers/webgl/WebGLMorphtargets.js: 16 src/three.js/src/renderers/webgl/WebGLProgram.js: 205 -src/three.js/src/renderers/webgl/WebGLShadowMap.js: 16 +src/three.js/src/renderers/webgl/WebGLShadowMap.js: 96,263,373 src/three.js/src/renderers/webgl/WebGLSpriteRenderer.js: 90 -src/three.js/src/renderers/webgl/WebGLState.js: 8 +src/three.js/src/renderers/webgl/WebGLState.js: 542 src/three.js/src/renderers/webgl/WebGLTextures.js: 251,385,437 src/three.js/src/renderers/webgl/WebGLUtils.js: 9 -src/three.js/src/renderers/webvr/WebVRManager.js: 12 -src/three.js/src/textures/Texture.js: 117,237 -src/three.js/utils/servers/simplehttpserver.js: 34 +src/three.js/src/textures/Texture.js: 237 src/vue/benchmarks/dbmon/ENV.js: 86,135 -src/vue/benchmarks/dbmon/lib/memory-stats.js: 6 -src/vue/packages/vue-server-renderer/basic.js: 5 -src/vue/packages/vue-server-renderer/build.js: 271,543,838,870,1109,1271,1724,1827,2181,2311,2488,2673,2932,3436,3555,3767,3826,4002,4198,4350,4485,4620,4698,5039,5403,5497,5583,5692,6111,6254,6503,6657,6747,6906,7215,7440,7535,7675,7787,8052,8188,8368,8499 -src/vue/packages/vue-template-compiler/browser.js: 5 -src/vue/packages/vue-template-compiler/build.js: 326,591,928,960,1243,1405,1747,1932,2410,2529,2741,2800,2976,3172,3296,3328,3451,3586,3721,3799,4030,4124,4210,4471 -src/vue/packages/weex-template-compiler/build.js: 325,583,993,1209,1328,1540,1599,1798,1830,1970,2219,2251,2534,2696,3003,3138,3216,3455,3549,3635,4101,4120 -src/vue/packages/weex-vue-framework/factory.js: 3 +src/vue/packages/vue-server-renderer/basic.js: 5,269,541,1718,1821,2175,2390,2575,2792,3022,3189,3343,3388,3693,3812,4024,4083,4259,4607,4742,4877,4955,5296,5660,5949,6368,6509,6758,6912,7161,7930 +src/vue/packages/vue-server-renderer/build.js: 271,543,1724,1827,2181,2488,2673,2932,3086,3131,3436,3555,3767,3826,4002,4198,4350,4485,4620,4698,5039,5403,5497,5692,6111,6254,6503,6657,6906,7675,8499 +src/vue/packages/vue-template-compiler/browser.js: 5,11,369,523,568,1790,1975,2215,2445,2808,2927,3139,3198,3374,3694,3726,3849,3984,4119,4197,4428,4869 +src/vue/packages/vue-template-compiler/build.js: 326,480,525,1747,1932,2410,2529,2741,2800,2976,3172,3296,3328,3451,3586,3721,3799,4030,4124,4471 +src/vue/packages/weex-template-compiler/build.js: 325,479,524,583,993,1209,1328,1540,1599,1798,1830,1970,3003,3138,3216,3455,3549,4101,4120 +src/vue/packages/weex-vue-framework/factory.js: 3,273,1596,1699,2204,2279,2547,3363,3420,3509,3647,3723,4356,4532,4692,5148,5571,5843,5940,6020,6126,6247,6354,6397,6684,6900,7123,7267 src/vue/src/compiler/codegen/events.js: 82 src/vue/src/compiler/codegen/index.js: 52,199,283 -src/vue/src/compiler/create-compiler.js: 8 src/vue/src/compiler/error-detector.js: 30 src/vue/src/compiler/helpers.js: 47 src/vue/src/compiler/optimizer.js: 38,70 src/vue/src/compiler/parser/filter-parser.js: 5 -src/vue/src/compiler/parser/html-parser.js: 58 +src/vue/src/compiler/parser/html-parser.js: 58,212,257 src/vue/src/compiler/parser/index.js: 117,237,454,513 src/vue/src/compiler/to-function.js: 23 src/vue/src/core/components/keep-alive.js: 83 -src/vue/src/core/global-api/assets.js: 10 src/vue/src/core/instance/inject.js: 39 src/vue/src/core/instance/render-helpers/bind-object-props.js: 15 src/vue/src/core/instance/render-helpers/render-slot.js: 8 src/vue/src/core/instance/render-helpers/resolve-slots.js: 8 src/vue/src/core/instance/render.js: 61 -src/vue/src/core/instance/state.js: 64,112,169,253 -src/vue/src/core/observer/index.js: 134 +src/vue/src/core/instance/state.js: 112,169,253 src/vue/src/core/observer/scheduler.js: 38 -src/vue/src/core/util/debug.js: 36,68 src/vue/src/core/util/error.js: 7 -src/vue/src/core/util/options.js: 68 src/vue/src/core/util/props.js: 100 src/vue/src/core/vdom/create-component.js: 101 src/vue/src/core/vdom/create-element.js: 47 src/vue/src/core/vdom/helpers/normalize-children.js: 43 src/vue/src/core/vdom/helpers/resolve-async-component.js: 40 src/vue/src/core/vdom/modules/directives.js: 21 -src/vue/src/core/vdom/patch.js: 70 +src/vue/src/core/vdom/patch.js: 125,404,501,581,685 src/vue/src/platforms/web/compiler/directives/model.js: 125 src/vue/src/platforms/web/compiler/modules/model.js: 26 src/vue/src/platforms/web/entry-runtime-with-compiler.js: 18 src/vue/src/platforms/web/runtime/components/transition-group.js: 51 src/vue/src/platforms/web/runtime/components/transition.js: 84 src/vue/src/platforms/web/runtime/directives/model.js: 85 -src/vue/src/platforms/web/runtime/index.js: 48 src/vue/src/platforms/web/runtime/modules/attrs.js: 20,61 src/vue/src/platforms/web/runtime/modules/dom-props.js: 5 -src/vue/src/platforms/web/runtime/modules/transition.js: 23,176 +src/vue/src/platforms/web/runtime/modules/transition.js: 23 src/vue/src/platforms/web/runtime/transition-util.js: 118 src/vue/src/platforms/web/server/directives/model.js: 7 src/vue/src/platforms/web/server/modules/dom-props.js: 8 src/vue/src/platforms/weex/compiler/modules/recycle-list/v-if.js: 15,34 -src/vue/src/platforms/weex/runtime/components/richtext.js: 34 src/vue/src/platforms/weex/runtime/components/transition-group.js: 32 src/vue/src/platforms/weex/runtime/modules/attrs.js: 5 -src/vue/src/platforms/weex/runtime/modules/style.js: 29 -src/vue/src/platforms/weex/runtime/modules/transition.js: 12,136,232 +src/vue/src/platforms/weex/runtime/modules/transition.js: 12,232 src/vue/src/server/bundle-renderer/create-bundle-renderer.js: 34 -src/vue/src/server/bundle-renderer/create-bundle-runner.js: 91 src/vue/src/server/optimizing-compiler/optimizer.js: 32 -src/vue/src/server/render.js: 83,177,312 -src/vue/src/server/template-renderer/index.js: 138 +src/vue/src/server/render.js: 312 src/vue/src/shared/util.js: 273 diff --git a/src/rules/cognitive-complexity.ts b/src/rules/cognitive-complexity.ts index 421cb914..d0316197 100644 --- a/src/rules/cognitive-complexity.ts +++ b/src/rules/cognitive-complexity.ts @@ -20,7 +20,7 @@ // https://sonarsource.github.io/rspec/#/rspec/S3776 import type { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; -import { isArrowFunctionExpression, isIfStatement, isLogicalExpression } from '../utils/nodes'; +import { isIfStatement, isLogicalExpression } from '../utils/nodes'; import { getFirstToken, getFirstTokenAfter, @@ -41,7 +41,12 @@ type LoopStatement = | TSESTree.DoWhileStatement | TSESTree.WhileStatement; -type OptionalLocation = TSESTree.SourceLocation | null | undefined; +interface ScopeComplexity { + node: TSESTree.Program | TSESTree.FunctionLike; + nestingLevel: number; + nestingNodes: Set; + complexityPoints: ComplexityPoint[]; +} const message = 'Refactor this function to reduce its Cognitive Complexity from {{complexityAmount}} to the {{threshold}} allowed.'; @@ -68,59 +73,19 @@ const rule: TSESLint.RuleModule ], }, create(context) { - const threshold = - typeof context.options[0] === 'number' ? context.options[0] : DEFAULT_THRESHOLD; - const isFileComplexity = context.options.includes('metric'); - - /** Complexity of the file */ - let fileComplexity = 0; - - /** Complexity of the current function if it is *not* considered nested to the first level function */ - let complexityIfNotNested: ComplexityPoint[] = []; - - /** Complexity of the current function if it is considered nested to the first level function */ - let complexityIfNested: ComplexityPoint[] = []; - - /** Current nesting level (number of enclosing control flow statements and functions) */ - let nesting = 0; - - /** Indicator if the current top level function has a structural (generated by control flow statements) complexity */ - let topLevelHasStructuralComplexity = false; - - /** Indicator if the current top level function is React functional component */ - const reactFunctionalComponent = { - nameStartsWithCapital: false, - returnsJsx: false, + const { options } = context; - isConfirmed() { - return this.nameStartsWithCapital && this.returnsJsx; - }, - - init(node: TSESTree.FunctionLike) { - this.nameStartsWithCapital = nameStartsWithCapital(node); - this.returnsJsx = false; - }, - }; + /** Complexity threshold */ + const threshold = typeof options[0] === 'number' ? options[0] : DEFAULT_THRESHOLD; - /** Own (not including nested functions) complexity of the current top function */ - let topLevelOwnComplexity: ComplexityPoint[] = []; - - /** Nodes that should increase nesting level */ - const nestingNodes: Set = new Set(); + /** Indicator if the file complexity should be reported */ + const isFileComplexity = context.options.includes('metric'); /** Set of already considered (with already computed complexity) logical expressions */ const consideredLogicalExpressions: Set = new Set(); - /** Stack of enclosing functions */ - const enclosingFunctions: TSESTree.FunctionLike[] = []; - - let secondLevelFunctions: Array<{ - node: TSESTree.FunctionLike; - parent: TSESTree.Node | undefined; - complexityIfThisSecondaryIsTopLevel: ComplexityPoint[]; - complexityIfNested: ComplexityPoint[]; - loc: OptionalLocation; - }> = []; + /** Stack of scopes that are either functions or the program */ + const scopes: ScopeComplexity[] = []; return { ':function': (node: TSESTree.Node) => { @@ -129,32 +94,41 @@ const rule: TSESLint.RuleModule ':function:exit'(node: TSESTree.Node) { onLeaveFunction(node as TSESTree.FunctionLike); }, - '*'(node: TSESTree.Node) { - if (nestingNodes.has(node)) { - nesting++; + if (scopes[scopes.length - 1]?.nestingNodes.has(node)) { + scopes[scopes.length - 1].nestingLevel++; } }, '*:exit'(node: TSESTree.Node) { - if (nestingNodes.has(node)) { - nesting--; - nestingNodes.delete(node); + if (scopes[scopes.length - 1]?.nestingNodes.has(node)) { + scopes[scopes.length - 1].nestingLevel--; + scopes[scopes.length - 1].nestingNodes.delete(node); } }, - Program() { - fileComplexity = 0; + Program(node: TSESTree.Program) { + scopes.push({ + node, + nestingLevel: 0, + nestingNodes: new Set(), + complexityPoints: [], + }); }, 'Program:exit'(node: TSESTree.Node) { + const programComplexity = scopes.pop()!; if (isFileComplexity) { // value from the message will be saved in SonarQube as file complexity metric context.report({ node, messageId: 'fileComplexity', - data: { complexityAmount: fileComplexity }, + data: { + complexityAmount: programComplexity.complexityPoints.reduce( + (acc, cur) => acc + cur.complexity, + 0, + ), + }, }); } }, - IfStatement(node: TSESTree.Node) { visitIfStatement(node as TSESTree.IfStatement); }, @@ -191,68 +165,18 @@ const rule: TSESLint.RuleModule ConditionalExpression(node: TSESTree.Node) { visitConditionalExpression(node as TSESTree.ConditionalExpression); }, - ReturnStatement(node: TSESTree.Node) { - visitReturnStatement(node as TSESTree.ReturnStatement); - }, }; function onEnterFunction(node: TSESTree.FunctionLike) { - if (enclosingFunctions.length === 0) { - // top level function - topLevelHasStructuralComplexity = false; - reactFunctionalComponent.init(node); - topLevelOwnComplexity = []; - secondLevelFunctions = []; - } else if (enclosingFunctions.length === 1) { - // second level function - complexityIfNotNested = []; - complexityIfNested = []; - } else { - nesting++; - nestingNodes.add(node); - } - enclosingFunctions.push(node); + scopes.push({ node, nestingLevel: 0, nestingNodes: new Set(), complexityPoints: [] }); } function onLeaveFunction(node: TSESTree.FunctionLike) { - enclosingFunctions.pop(); - if (enclosingFunctions.length === 0) { - // top level function - if (topLevelHasStructuralComplexity && !reactFunctionalComponent.isConfirmed()) { - let totalComplexity = topLevelOwnComplexity; - secondLevelFunctions.forEach(secondLevelFunction => { - totalComplexity = totalComplexity.concat(secondLevelFunction.complexityIfNested); - }); - checkFunction(totalComplexity, getMainFunctionTokenLocation(node, node.parent, context)); - } else { - checkFunction( - topLevelOwnComplexity, - getMainFunctionTokenLocation(node, node.parent, context), - ); - secondLevelFunctions.forEach(secondLevelFunction => { - checkFunction( - secondLevelFunction.complexityIfThisSecondaryIsTopLevel, - getMainFunctionTokenLocation( - secondLevelFunction.node, - secondLevelFunction.parent, - context, - ), - ); - }); - } - } else if (enclosingFunctions.length === 1) { - // second level function - secondLevelFunctions.push({ - node, - parent: node.parent, - complexityIfNested, - complexityIfThisSecondaryIsTopLevel: complexityIfNotNested, - loc: getMainFunctionTokenLocation(node, node.parent, context), - }); - } else { - // complexity of third+ level functions is computed in their parent functions - // so we never raise an issue for them - } + const functionComplexity = scopes.pop()!; + checkFunction( + functionComplexity.complexityPoints, + getMainFunctionTokenLocation(node, node.parent, context), + ); } function visitIfStatement(ifStatement: TSESTree.IfStatement) { @@ -266,13 +190,13 @@ const rule: TSESLint.RuleModule } // always increase nesting level inside `then` statement - nestingNodes.add(ifStatement.consequent); + scopes[scopes.length - 1].nestingNodes.add(ifStatement.consequent); // if `else` branch is not `else if` then // - increase nesting level inside `else` statement // - add +1 complexity if (ifStatement.alternate && !isIfStatement(ifStatement.alternate)) { - nestingNodes.add(ifStatement.alternate); + scopes[scopes.length - 1].nestingNodes.add(ifStatement.alternate); const elseTokenLoc = getFirstTokenAfter(ifStatement.consequent, context)!.loc; addComplexity(elseTokenLoc); } @@ -280,13 +204,13 @@ const rule: TSESLint.RuleModule function visitLoop(loop: LoopStatement) { addStructuralComplexity(getFirstToken(loop, context).loc); - nestingNodes.add(loop.body); + scopes[scopes.length - 1].nestingNodes.add(loop.body); } function visitSwitchStatement(switchStatement: TSESTree.SwitchStatement) { addStructuralComplexity(getFirstToken(switchStatement, context).loc); for (const switchCase of switchStatement.cases) { - nestingNodes.add(switchCase); + scopes[scopes.length - 1].nestingNodes.add(switchCase); } } @@ -300,43 +224,14 @@ const rule: TSESLint.RuleModule function visitCatchClause(catchClause: TSESTree.CatchClause) { addStructuralComplexity(getFirstToken(catchClause, context).loc); - nestingNodes.add(catchClause.body); + scopes[scopes.length - 1].nestingNodes.add(catchClause.body); } function visitConditionalExpression(conditionalExpression: TSESTree.ConditionalExpression) { const questionTokenLoc = getFirstTokenAfter(conditionalExpression.test, context)!.loc; addStructuralComplexity(questionTokenLoc); - nestingNodes.add(conditionalExpression.consequent); - nestingNodes.add(conditionalExpression.alternate); - } - - function visitReturnStatement({ argument }: TSESTree.ReturnStatement) { - // top level function - if ( - enclosingFunctions.length === 1 && - argument && - ['JSXElement', 'JSXFragment'].includes(argument.type as any) - ) { - reactFunctionalComponent.returnsJsx = true; - } - } - - function nameStartsWithCapital(node: TSESTree.FunctionLike) { - const checkFirstLetter = (name: string) => { - const firstLetter = name[0]; - return firstLetter === firstLetter.toUpperCase(); - }; - - if (!isArrowFunctionExpression(node) && node.id) { - return checkFirstLetter(node.id.name); - } - - const { parent } = node; - if (parent && parent.type === 'VariableDeclarator' && parent.id.type === 'Identifier') { - return checkFirstLetter(parent.id.name); - } - - return false; + scopes[scopes.length - 1].nestingNodes.add(conditionalExpression.consequent); + scopes[scopes.length - 1].nestingNodes.add(conditionalExpression.alternate); } function visitLogicalExpression(logicalExpression: TSESTree.LogicalExpression) { @@ -346,6 +241,10 @@ const rule: TSESLint.RuleModule return; } + if (isDefaultValuePattern(logicalExpression)) { + return; + } + if (!consideredLogicalExpressions.has(logicalExpression)) { const flattenedLogicalExpressions = flattenLogicalExpression(logicalExpression); @@ -360,6 +259,28 @@ const rule: TSESLint.RuleModule } } + function isDefaultValuePattern(node: TSESTree.LogicalExpression) { + const { left, right, operator, parent } = node; + + const operators = ['||', '??']; + const literals = ['Literal', 'ArrayExpression', 'ObjectExpression']; + + switch (parent?.type) { + /* Matches: const x = a || literal */ + case 'VariableDeclarator': + return operators.includes(operator) && literals.includes(right.type); + /* Matches: a = a || literal */ + case 'AssignmentExpression': + return ( + operators.includes(operator) && + literals.includes(right.type) && + context.getSourceCode().getText(parent.left) === context.getSourceCode().getText(left) + ); + default: + return false; + } + } + function flattenLogicalExpression(node: TSESTree.Node): TSESTree.LogicalExpression[] { if (isLogicalExpression(node)) { consideredLogicalExpressions.add(node); @@ -373,43 +294,21 @@ const rule: TSESLint.RuleModule } function addStructuralComplexity(location: TSESTree.SourceLocation) { - const added = nesting + 1; + const added = scopes[scopes.length - 1].nestingLevel + 1; const complexityPoint = { complexity: added, location }; - if (enclosingFunctions.length === 0) { - // top level scope - fileComplexity += added; - } else if (enclosingFunctions.length === 1) { - // top level function - topLevelHasStructuralComplexity = true; - topLevelOwnComplexity.push(complexityPoint); - } else { - // second+ level function - complexityIfNested.push({ complexity: added + 1, location }); - complexityIfNotNested.push(complexityPoint); - } + scopes[scopes.length - 1].complexityPoints.push(complexityPoint); } function addComplexity(location: TSESTree.SourceLocation) { const complexityPoint = { complexity: 1, location }; - if (enclosingFunctions.length === 0) { - // top level scope - fileComplexity += 1; - } else if (enclosingFunctions.length === 1) { - // top level function - topLevelOwnComplexity.push(complexityPoint); - } else { - // second+ level function - complexityIfNested.push(complexityPoint); - complexityIfNotNested.push(complexityPoint); - } + scopes[scopes.length - 1].complexityPoints.push(complexityPoint); } function checkFunction(complexity: ComplexityPoint[] = [], loc: TSESTree.SourceLocation) { - const complexityAmount = complexity.reduce((acc, cur) => acc + cur.complexity, 0); - fileComplexity += complexityAmount; if (isFileComplexity) { return; } + const complexityAmount = complexity.reduce((acc, cur) => acc + cur.complexity, 0); if (complexityAmount > threshold) { const secondaryLocations: IssueLocation[] = complexity.map(complexityPoint => { const { complexity, location } = complexityPoint; diff --git a/tests/rules/cognitive-complexity.test.ts b/tests/rules/cognitive-complexity.test.ts index da5b2dbc..940622af 100644 --- a/tests/rules/cognitive-complexity.test.ts +++ b/tests/rules/cognitive-complexity.test.ts @@ -91,6 +91,24 @@ ruleTester.run('cognitive-complexity', rule, { parserOptions: { ecmaFeatures: { jsx: true } }, options: [0], }, + { + code: ` + function f(a, b, c) { + const x = a || []; + const y = b || {}; + const z = c ?? ''; + }`, + options: [0], + }, + { + code: ` + function f(a, b, c) { + a = a || []; + b = b || {}; + c = c ?? ''; + }`, + options: [0], + }, ], invalid: [ // if @@ -457,12 +475,12 @@ ruleTester.run('cognitive-complexity', rule, { code: ` function nesting_func_with_complexity() { // Noncompliant if (condition) {} // +1 - function nested_func() { // (nesting level +1) - if (condition) {} // +2 + function nested_func() { // Noncompliant + if (condition) {} // +1 } }`, options: [0], - errors: [message(3, { line: 2 })], + errors: [message(1, { line: 2 }), message(1, { line: 4 })], }, { code: ` @@ -478,38 +496,38 @@ ruleTester.run('cognitive-complexity', rule, { { code: ` function two_level_function_nesting() { - function nested1() { // Noncompliant - function nested2() { // (nesting +1) - if (condition) {} // +2 + function nested1() { + function nested2() { // Noncompliant + if (condition) {} // +1 } } }`, options: [0], - errors: [message(2, { line: 3 })], + errors: [message(1, { line: 4 })], }, { code: ` function two_level_function_nesting_2() { function nested1() { // Noncompliant if (condition) {} // +1 - function nested2() { // (nesting +1) - if (condition) {} // +2 + function nested2() { // Noncompliant + if (condition) {} // +1 } } }`, options: [0], - errors: [message(3, { line: 3 })], + errors: [message(1, { line: 3 }), message(1, { line: 5 })], }, { code: ` function with_complexity_after_nested_function() { // Noncompliant - function nested_func() { // (nesting level +1) - if (condition) {} // +2 + function nested_func() { // Noncompliant + if (condition) {} // +1 } if (condition) {} // +1 }`, options: [0], - errors: [message(3, { line: 2 })], + errors: [message(1, { line: 2 }), message(1, { line: 3 })], }, { code: ` @@ -756,7 +774,7 @@ class TopLevel { } `, options: [0, 'metric'], - errors: [{ messageId: 'fileComplexity', data: { complexityAmount: 25 } }], + errors: [{ messageId: 'fileComplexity', data: { complexityAmount: 5 } }], }, ], });