[{"data":1,"prerenderedAt":1353},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fplatforms":135,"\u002Fdocs\u002Fplatforms-surround":1349},[4],{"title":5,"path":6,"stem":7,"children":8,"page":134},"Docs","\u002Fdocs","docs",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130],{"title":10,"path":11,"stem":12},"AI harnesses: LLM tools, MCP servers and agents","\u002Fdocs\u002Fai-tools","docs\u002Fai-tools",{"title":14,"path":15,"stem":16},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002Farchitecture",{"title":18,"path":19,"stem":20},"Web \u002F native bridges","\u002Fdocs\u002Fbridges","docs\u002Fbridges",{"title":22,"path":23,"stem":24},"Broadcast channels and tests","\u002Fdocs\u002Fchannels-and-tests","docs\u002Fchannels-and-tests",{"title":26,"path":27,"stem":28},"CLI reference","\u002Fdocs\u002Fcli","docs\u002Fcli",{"title":30,"path":31,"stem":32},"Completeness: how far an answer reaches","\u002Fdocs\u002Fcompleteness","docs\u002Fcompleteness",{"title":34,"path":35,"stem":36},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002Fconfiguration",{"title":38,"path":39,"stem":40},"External systems","\u002Fdocs\u002Fexternal","docs\u002Fexternal",{"title":42,"path":43,"stem":44},"Generated, copied and vendored files","\u002Fdocs\u002Fgenerated","docs\u002Fgenerated",{"title":46,"path":47,"stem":48},"Installing and updating cg","\u002Fdocs\u002Finstall","docs\u002Finstall",{"title":50,"path":51,"stem":52},"Java","\u002Fdocs\u002Fjava","docs\u002Fjava",{"title":54,"path":55,"stem":56},"Kotlin","\u002Fdocs\u002Fkotlin","docs\u002Fkotlin",{"title":58,"path":59,"stem":60},"Known limitations","\u002Fdocs\u002Flimitations","docs\u002Flimitations",{"title":62,"path":63,"stem":64,"children":65},"MCP server","\u002Fdocs\u002Fmcp","docs\u002Fmcp",[66],{"title":67,"path":68,"stem":69},"code-graph MCP: sample outputs (real calls via the MCP Python SDK stdio client)","\u002Fdocs\u002Fmcp\u002Fsample_outputs","docs\u002Fmcp\u002Fsample_outputs",{"title":71,"path":72,"stem":73},"Rust, C and C++","\u002Fdocs\u002Fnative","docs\u002Fnative",{"title":75,"path":76,"stem":77},"Port gaps: cg parity","\u002Fdocs\u002Fparity","docs\u002Fparity",{"title":79,"path":80,"stem":81},"PHP","\u002Fdocs\u002Fphp","docs\u002Fphp",{"title":83,"path":84,"stem":85},"Planned changes","\u002Fdocs\u002Fplans","docs\u002Fplans",{"title":87,"path":88,"stem":89},"Platform-specific code","\u002Fdocs\u002Fplatforms","docs\u002Fplatforms",{"title":91,"path":92,"stem":93},"Protocol links","\u002Fdocs\u002Fprotocols","docs\u002Fprotocols",{"title":95,"path":96,"stem":97},"Python","\u002Fdocs\u002Fpython","docs\u002Fpython",{"title":99,"path":100,"stem":101},"Quick start","\u002Fdocs\u002Fquickstart","docs\u002Fquickstart",{"title":103,"path":104,"stem":105},"Graph schema","\u002Fdocs\u002Fschema","docs\u002Fschema",{"title":107,"path":108,"stem":109},"Attack surface","\u002Fdocs\u002Fsurface","docs\u002Fsurface",{"title":111,"path":112,"stem":113},"Swift","\u002Fdocs\u002Fswift","docs\u002Fswift",{"title":115,"path":116,"stem":117},"TypeScript \u002F JavaScript frameworks","\u002Fdocs\u002Fts-frameworks","docs\u002Fts-frameworks",{"title":119,"path":120,"stem":121},"How we validate","\u002Fdocs\u002Fvalidation","docs\u002Fvalidation",{"title":123,"path":124,"stem":125},"Validation log","\u002Fdocs\u002Fvalidation-log","docs\u002Fvalidation-log",{"title":127,"path":128,"stem":129},"Value facts and resolutions","\u002Fdocs\u002Fvalue-facts","docs\u002Fvalue-facts",{"title":131,"path":132,"stem":133},"Visual view","\u002Fdocs\u002Fviz","docs\u002Fviz",false,{"id":136,"title":87,"body":137,"description":1343,"extension":1344,"meta":1345,"navigation":1346,"path":88,"seo":1347,"stem":89,"__hash__":1348},"docs\u002Fdocs\u002Fplatforms.md",{"type":138,"value":139,"toc":1335},"minimark",[140,153,163,168,218,424,438,443,525,553,557,774,793,809,813,921,948,959,963,999,1037,1060,1072,1087,1225,1238,1244,1263,1305,1315,1331],[141,142,143,144,148,149,152],"p",{},"Per-platform code is tagged with the targets it is built for. ",[145,146,147],"code",{},"--platform ios"," drops what that\ntarget does not build. ",[145,150,151],{},"cg platforms divergence"," lists variants that leave a declared target\nuncovered, and calls that are live where the callee is absent.",[154,155,161],"pre",{"className":156,"code":158,"language":159,"meta":160},[157],"language-text","$ cg impact open_logs --db out\u002Fapp.db --platform windows\nplatform: windows (4 nodes and 13 references not built for it left out)\nnot built for windows: function:dirs_demo::open_logs\n\n$ cg platforms divergence --db out\u002Fapp.db\n== VARIANTS: dirs_demo::paths::config_dir  covered: windows, linux, macos\n== REFERENCED WHERE THE CALLEE IS NOT BUILT: 1\n  main -CALLS-> open_logs  missing on: windows, macos  (callee: linux)\n","text","",[145,162,158],{"__ignoreMap":160},[164,165,167],"h2",{"id":166},"targets","Targets",[141,169,170,171,174,175,174,178,174,181,174,184,174,187,174,190,174,193,196,197,200,201,204,205,174,208,174,211,174,214,217],{},"Known targets: ",[145,172,173],{},"windows",", ",[145,176,177],{},"linux",[145,179,180],{},"macos",[145,182,183],{},"ios",[145,185,186],{},"android",[145,188,189],{},"web",[145,191,192],{},"tvos",[145,194,195],{},"watchos",",\n",[145,198,199],{},"visionos",". ",[145,202,203],{},"--platform"," also takes aliases (",[145,206,207],{},"win32",[145,209,210],{},"darwin",[145,212,213],{},"wasm",[145,215,216],{},"xros",", …). A\nproject's targets come from the first source that names them:",[219,220,221,233],"table",{},[222,223,224],"thead",{},[225,226,227,231],"tr",{},[228,229,230],"th",{},"source",[228,232,166],{},[234,235,236,251,280,294,313,353,375,386,401,409],"tbody",{},[225,237,238,248],{},[239,240,241,244,245],"td",{},[145,242,243],{},".cg.yaml"," ",[145,246,247],{},"platforms.targets",[239,249,250],{},"exactly those",[225,252,253,259],{},[239,254,255,256],{},"Flutter folders next to ",[145,257,258],{},"pubspec.yaml",[239,260,261,262,244,265,244,268,244,271,244,274,244,277],{},"one per ",[145,263,264],{},"android\u002F",[145,266,267],{},"ios\u002F",[145,269,270],{},"web\u002F",[145,272,273],{},"macos\u002F",[145,275,276],{},"windows\u002F",[145,278,279],{},"linux\u002F",[225,281,282,291],{},[239,283,284,285,244,288],{},"Expo ",[145,286,287],{},"app.json",[145,289,290],{},"expo.platforms",[239,292,293],{},"listed (default ios, android)",[225,295,296,299],{},[239,297,298],{},"React Native",[239,300,301,302,305,306,305,309,312],{},"ios, android, plus web \u002F windows \u002F macos when ",[145,303,304],{},"react-native-web"," \u002F ",[145,307,308],{},"-windows",[145,310,311],{},"-macos"," is a dependency",[225,314,315,321],{},[239,316,317,318],{},"Kotlin Multiplatform ",[145,319,320],{},"kotlin { }",[239,322,323,326,327,330,331,305,334,305,337,305,340,305,343,174,346,305,349,352],{},[145,324,325],{},"androidTarget"," android, ",[145,328,329],{},"ios*"," ios, ",[145,332,333],{},"tvos*",[145,335,336],{},"watchos*",[145,338,339],{},"macos*",[145,341,342],{},"linuxX64",[145,344,345],{},"mingwX64",[145,347,348],{},"js",[145,350,351],{},"wasmJs"," web, Compose Desktop windows+linux+macos",[225,354,355,361],{},[239,356,357,358],{},"Xcode ",[145,359,360],{},"*.xcodeproj",[239,362,363,366,367,370,371,374],{},[145,364,365],{},"SUPPORTED_PLATFORMS",", else ",[145,368,369],{},"SDKROOT","; ",[145,372,373],{},"SUPPORTS_MACCATALYST = YES"," adds macos",[225,376,377,383],{},[239,378,379,380],{},"SwiftPM ",[145,381,382],{},"platforms:",[239,384,385],{},"the listed ones (macCatalyst counts as macos)",[225,387,388,398],{},[239,389,390,391,394,395],{},"Tauri 2 ",[145,392,393],{},"src-tauri\u002Fgen\u002Fandroid"," or ",[145,396,397],{},"gen\u002Fapple",[239,399,400],{},"desktop plus android \u002F ios",[225,402,403,406],{},[239,404,405],{},"Electron or Tauri",[239,407,408],{},"windows, linux, macos",[225,410,411,414],{},[239,412,413],{},"anything else with conditions",[239,415,416,417,174,420,423],{},"desktop default (windows, linux, macos), plus a mobile or web target a condition names (",[145,418,419],{},"target_os = \"android\"",[145,421,422],{},"TARGET_OS_IPHONE"," → ios)",[141,425,426,429,430,433,434,437],{},[145,427,428],{},"#if os(Linux)"," and a Vapor \u002F Hummingbird dependency add linux to a SwiftPM package. An Xcode\napp with no root ",[145,431,432],{},"Package.swift"," uses only the platforms its project lists. ",[145,435,436],{},"cg platforms","\nprints the targets and where each came from.",[439,440,442],"h3",{"id":441},"apple","Apple",[219,444,445,455],{},[222,446,447],{},[225,448,449,452],{},[228,450,451],{},"case",[228,453,454],{},"rule",[234,456,457,477,503,515],{},[225,458,459,462],{},[239,460,461],{},"visionOS \u002F tvOS \u002F watchOS",[239,463,464,465,468,469,472,473,476],{},"own targets. ",[145,466,467],{},"os(visionOS)"," is never iOS. If visionOS is not a project target, that branch is ",[145,470,471],{},"no known target"," and ",[145,474,475],{},"!os(visionOS)"," is every target",[225,478,479,482],{},[239,480,481],{},"Mac Catalyst",[239,483,484,487,488,472,491,494,495,498,499,502],{},[145,485,486],{},"SUPPORTS_MACCATALYST"," and no AppKit macOS target: on macos, ",[145,489,490],{},"os(iOS)",[145,492,493],{},"targetEnvironment(macCatalyst)"," are true, ",[145,496,497],{},"os(macOS)"," is false, ",[145,500,501],{},"canImport(UIKit)"," is true. Both AppKit and Catalyst: those conditions are unknown on macos",[225,504,505,508],{},[239,506,507],{},"Xcode membership",[239,509,510,511,514],{},"a file only some targets compile (Sources build phase, Xcode 16 synchronized folders) is tagged with those platforms. ",[145,512,513],{},"platforms.xcode_membership: false"," turns this off. Local-package files are not target members",[225,516,517,522],{},[239,518,519],{},[145,520,521],{},"extension URL",[239,523,524],{},"the type node is never tagged; its members are",[141,526,527,529,530,533,534,537,538,541,542,174,545,548,549,552],{},[145,528,501],{}," is ios, tvos, visionos (and macos in a Catalyst app). ",[145,531,532],{},"canImport(AppKit)"," is\nmacos. ",[145,535,536],{},"targetEnvironment(simulator)"," is not a platform. ",[145,539,540],{},"@available(iOS 17, *)"," is a minimum OS\nversion (",[145,543,544],{},"attrs.available",[546,547,111],"a",{"href":112},"), not a target filter.\n",[145,550,551],{},"@available(iOS, unavailable)"," is a platform condition.",[164,554,556],{"id":555},"what-is-recognised","What is recognised",[219,558,559,572],{},[222,560,561],{},[225,562,563,566,569],{},[228,564,565],{},"language",[228,567,568],{},"conditions",[228,570,571],{},"variants",[234,573,574,613,658,685,721,750],{},[225,575,576,579,599],{},[239,577,578],{},"Rust",[239,580,581,174,584,174,587,305,590,305,593,305,596,598],{},[145,582,583],{},"#[cfg]",[145,585,586],{},"if cfg!",[145,588,589],{},"target_os",[145,591,592],{},"target_family",[145,594,595],{},"unix",[145,597,173],{}," \u002F arch \u002F env \u002F vendor",[239,600,601,602,605,606,472,609,612],{},"one function per ",[145,603,604],{},"cfg"," (",[145,607,608],{},"config_dir",[145,610,611],{},"config_dir@9",")",[225,614,615,618,655],{},[239,616,617],{},"C \u002F C++",[239,619,620,623,624,174,627,630,631,174,633,174,636,174,639,642,643,244,646,244,649,651,652],{},[145,621,622],{},"#if"," on ",[145,625,626],{},"_WIN32",[145,628,629],{},"__APPLE__"," + ",[145,632,422],{},[145,634,635],{},"__linux__",[145,637,638],{},"__ANDROID__",[145,640,641],{},"__EMSCRIPTEN__","; dirs ",[145,644,645],{},"win\u002F",[145,647,648],{},"unix\u002F",[145,650,279],{},"; names ",[145,653,654],{},"*_win.c",[239,656,657],{},"one function per branch or per platform file",[225,659,660,663,680],{},[239,661,662],{},"Dart",[239,664,665,174,668,174,671,174,674,305,677],{},[145,666,667],{},"Platform.isIOS",[145,669,670],{},"kIsWeb",[145,672,673],{},"TargetPlatform",[145,675,676],{},"switch",[145,678,679],{},"?:",[239,681,682],{},[145,683,684],{},"import 'stub.dart' if (dart.library.io) 'io.dart'",[225,686,687,690,704],{},[239,688,689],{},"TS \u002F JS",[239,691,692,174,695,174,698,174,701],{},[145,693,694],{},"Platform.OS",[145,696,697],{},"Platform.select",[145,699,700],{},"process.platform",[145,702,703],{},"os.platform()",[239,705,706,305,709,305,712,305,715,605,718,612],{},[145,707,708],{},".ios.ts",[145,710,711],{},".android.ts",[145,713,714],{},".native.ts",[145,716,717],{},".web.ts",[145,719,720],{},"moduleSuffixes",[225,722,723,725,738],{},[239,724,111],{},[239,726,727,174,730,174,733,174,735],{},[145,728,729],{},"#if os(iOS)",[145,731,732],{},"canImport",[145,734,493],{},[145,736,737],{},"@available(*, unavailable)",[239,739,740,741,743,744,174,747,612],{},"one type or method per ",[145,742,622],{}," branch (",[145,745,746],{},"class:Toolbar",[145,748,749],{},"class:Toolbar@7",[225,751,752,754,763],{},[239,753,54],{},[239,755,756,174,759,762],{},[145,757,758],{},"iosMain",[145,760,761],{},"androidMain",", …",[239,764,765,768,769,605,772,612],{},[145,766,767],{},"expect"," links to each ",[145,770,771],{},"actual",[546,773,54],{"href":55},[141,775,776,777,780,781,785,786,305,788,305,790,792],{},"A guard (",[145,778,779],{},"if (Platform.OS !== 'ios') return",") tags the rest of the block with the negated\ncondition. A JS branch without braces ends at its line. Electron and Tauri process roles are\nrecorded by ",[546,782,784],{"href":783},"\u002Fdocs\u002Fbridges#electron-and-tauri","bridges",". Bridge receiver files take the platform\nof ",[145,787,264],{},[145,789,267],{},[145,791,273],{},".",[141,794,795,796,174,799,802,803,472,805,808],{},"A condition that does not decide the target (",[145,797,798],{},"feature = \"x\"",[145,800,801],{},"Platform.Version > 30",") is\nunknown. The code under it stays in every target's view. ",[145,804,436],{},[145,806,807],{},"cg coverage"," count\nunknown conditions.",[164,810,812],{"id":811},"in-the-graph","In the graph",[219,814,815,825],{},[222,816,817],{},[225,818,819,822],{},[228,820,821],{},"attr",[228,823,824],{},"on",[234,826,827,841,854,867,877,894,904],{},[225,828,829,834],{},[239,830,831],{},[145,832,833],{},"platforms",[239,835,836,837,840],{},"targets the symbol or edge is built for (absent = every target). An ",[145,838,839],{},"#else"," lists the project's other targets, not every platform cg knows",[225,842,843,848],{},[239,844,845],{},[145,846,847],{},"platforms_other",[239,849,850,851,853],{},"non-target platforms where the condition also holds, for ",[145,852,203],{}," on an undeclared target",[225,855,856,864],{},[239,857,858,174,861],{},[145,859,860],{},"platform_expr",[145,862,863],{},"platform_at",[239,865,866],{},"source condition and file:line",[225,868,869,874],{},[239,870,871],{},[145,872,873],{},"platform_unknown",[239,875,876],{},"targets the condition did not decide",[225,878,879,884],{},[239,880,881],{},[145,882,883],{},"platform_variant_of",[239,885,886,887,890,891,893],{},"sibling variants of one call (",[145,888,889],{},"storage.ios.ts",", a conditional-import stub, a per-",[145,892,622],{}," Swift function)",[225,895,896,901],{},[239,897,898],{},[145,899,900],{},"variant_platforms",[239,902,903],{},"targets that definition is built for. Divergence counts any variant, so a caller with no condition of its own is not \"missing\" on a target another variant covers",[225,905,906,911],{},[239,907,908],{},[145,909,910],{},"exact_target",[239,912,913,914,917,918,612],{},"rust-analyzer ran for that cfg (",[145,915,916],{},"CG_RUST_TARGETS",", up to 3 non-host targets). What none resolves is added from syntax (",[145,919,920],{},"via: cfg-inactive",[141,922,923,924,927,928,931,932,934,935,937,938,940,941,305,944,947],{},"A Swift member a variant does not define is not missing when the variant conforms to a protocol\nthat requires it, or when ",[145,925,926],{},"init"," comes from an SDK superclass (",[145,929,930],{},"attrs.external_supers",").\nKotlin common code binds to ",[145,933,767],{},"; a call from an ",[145,936,771],{}," binds to that ",[145,939,771],{},".\n",[145,942,943],{},"iosTest",[145,945,946],{},"androidUnitTest"," are built for that platform.",[141,949,950,951,954,955,958],{},"Re-exports in a variant file count as its definitions (TS ",[145,952,953],{},"export {a as b}",", Dart\n",[145,956,957],{},"export … show",", a top-level tear-off). API-surface and missing-callee findings count them.",[164,960,962],{"id":961},"queries","Queries",[141,964,965,174,968,174,971,174,974,174,977,472,980,983,984,987,988,991,992,994,995,998],{},[145,966,967],{},"reaches",[145,969,970],{},"impact",[145,972,973],{},"downstream",[145,975,976],{},"path",[145,978,979],{},"routes",[145,981,982],{},"search"," take ",[145,985,986],{},"--platform TARGET","\n(MCP: ",[145,989,990],{},"platform","). The first line names the filter and how many conditions could not be\nevaluated. A target symbol that is not built for the platform is named as such. Without\n",[145,993,203],{}," the answer is the full graph, with labels like ",[145,996,997],{},"[ios, android]",". An unknown name\nexits 2 and lists the known targets.",[219,1000,1001,1011],{},[222,1002,1003],{},[225,1004,1005,1008],{},[228,1006,1007],{},"finding",[228,1009,1010],{},"meaning",[234,1012,1013,1021,1029],{},[225,1014,1015,1018],{},[239,1016,1017],{},"VARIANTS",[239,1019,1020],{},"one symbol per platform, and which declared targets no variant covers",[225,1022,1023,1026],{},[239,1024,1025],{},"API SURFACE DIFFERS",[239,1027,1028],{},"a variant lacks a symbol its siblings define and importers use",[225,1030,1031,1034],{},[239,1032,1033],{},"REFERENCED WHERE THE CALLEE IS NOT BUILT",[239,1035,1036],{},"a live call or import on a target where the callee and every variant are absent",[141,1038,1039,1040,1043,1044,1047,1048,1051,1052,1055,1056,1059],{},"Not findings: an import that spells ",[145,1041,1042],{},".\u002FCam.ios"," (that file is used on every target the importer\nbuilds for); a test file named ",[145,1045,1046],{},"release.web.test.ts","; a Swift call that uses an SDK initializer\nwhere the project's ",[145,1049,1050],{},"extension"," is not built; C functions of the same name in separate ",[145,1053,1054],{},"main()","\nprograms; a reference to code built for no declared target (",[145,1057,1058],{},"sunos.c",", counted, not listed).",[141,1061,1062,1063,1065,1066,1068,1069,1071],{},"Test code whose platforms are only the project default (no ",[145,1064,622],{},", no Xcode membership) is\nlisted under FROM TEST CODE WHOSE PLATFORMS ARE THE PROJECT DEFAULT. A test narrowed by ",[145,1067,622],{}," or\nby its target's ",[145,1070,365],{}," stays in the main missing-callee list.",[141,1073,1074,1077,1078,1081,1082,174,1084,792],{},[145,1075,1076],{},"--target ios"," keeps one target.\n",[145,1079,1080],{},"--kind variants|api_surface|missing_callee|missing_callee_tests"," keeps one kind. MCP:\n",[145,1083,833],{},[145,1085,1086],{},"platform_divergence(target, kind)",[154,1088,1092],{"className":1089,"code":1090,"language":1091,"meta":160,"style":160},"language-yaml shiki shiki-themes cg-light cg-light cg-dark","platforms:\n  targets: [ios, android, web]\n  paths:\n    \"src\u002Fwin32\u002F**\": [windows]\n    \"src\u002Fposix\u002F**\": [unix]     # native = every non-web target\n  file_suffixes: true          # .ios.ts \u002F .android.ts\n  path_conventions: true       # win\u002F and *_win.c\n  xcode_membership: true\n","yaml",[145,1093,1094,1106,1135,1143,1163,1186,1201,1214],{"__ignoreMap":160},[1095,1096,1099,1102],"span",{"class":1097,"line":1098},"line",1,[1095,1100,833],{"class":1101},"s4LKg",[1095,1103,1105],{"class":1104},"sZ_TN",":\n",[1095,1107,1109,1112,1115,1118,1121,1124,1127,1129,1132],{"class":1097,"line":1108},2,[1095,1110,1111],{"class":1101},"  targets",[1095,1113,1114],{"class":1104},":",[1095,1116,1117],{"class":1104}," [",[1095,1119,183],{"class":1120},"sha9Y",[1095,1122,1123],{"class":1104},",",[1095,1125,1126],{"class":1120}," android",[1095,1128,1123],{"class":1104},[1095,1130,1131],{"class":1120}," web",[1095,1133,1134],{"class":1104},"]\n",[1095,1136,1138,1141],{"class":1097,"line":1137},3,[1095,1139,1140],{"class":1101},"  paths",[1095,1142,1105],{"class":1104},[1095,1144,1146,1149,1152,1155,1157,1159,1161],{"class":1097,"line":1145},4,[1095,1147,1148],{"class":1104},"    \"",[1095,1150,1151],{"class":1120},"src\u002Fwin32\u002F**",[1095,1153,1154],{"class":1104},"\"",[1095,1156,1114],{"class":1104},[1095,1158,1117],{"class":1104},[1095,1160,173],{"class":1120},[1095,1162,1134],{"class":1104},[1095,1164,1166,1168,1171,1173,1175,1177,1179,1182],{"class":1097,"line":1165},5,[1095,1167,1148],{"class":1104},[1095,1169,1170],{"class":1120},"src\u002Fposix\u002F**",[1095,1172,1154],{"class":1104},[1095,1174,1114],{"class":1104},[1095,1176,1117],{"class":1104},[1095,1178,595],{"class":1120},[1095,1180,1181],{"class":1104},"]",[1095,1183,1185],{"class":1184},"seS0s","     # native = every non-web target\n",[1095,1187,1189,1192,1194,1198],{"class":1097,"line":1188},6,[1095,1190,1191],{"class":1101},"  file_suffixes",[1095,1193,1114],{"class":1104},[1095,1195,1197],{"class":1196},"sZWGQ"," true",[1095,1199,1200],{"class":1184},"          # .ios.ts \u002F .android.ts\n",[1095,1202,1204,1207,1209,1211],{"class":1097,"line":1203},7,[1095,1205,1206],{"class":1101},"  path_conventions",[1095,1208,1114],{"class":1104},[1095,1210,1197],{"class":1196},[1095,1212,1213],{"class":1184},"       # win\u002F and *_win.c\n",[1095,1215,1217,1220,1222],{"class":1097,"line":1216},8,[1095,1218,1219],{"class":1101},"  xcode_membership",[1095,1221,1114],{"class":1104},[1095,1223,1224],{"class":1196}," true\n",[141,1226,1227,1230,1231,1234,1235,1237],{},[145,1228,1229],{},"cg config show"," lists the effective values and where each one came from. ",[145,1232,1233],{},"cg index"," records\n",[145,1236,833],{}," in the stats: targets, conditions, tagged symbols and references, per-target counts,\ndivergence findings, seconds.",[154,1239,1242],{"className":1240,"code":1241,"language":159,"meta":160},[157],"$ cg impact function:lib\u002Fstorage\u002Fstorage_web.dart#save --db out\u002Fapp.db --platform ios\nplatform: ios (5 nodes and 11 references not built for it left out; 0 conditions could not be evaluated)\nnot built for ios: function:lib\u002Fstorage\u002Fstorage_web.dart#save\n",[145,1243,1241],{"__ignoreMap":160},[141,1245,1246,1247,1249,1250,1252,1253,1255,1256,1259,1260,1262],{},"Rust exact mode resolves the host configuration, then runs once per other target the ",[145,1248,604],{},"\nconditions name (up to 3, ",[145,1251,916],{},"). References under another target's ",[145,1254,604],{},"\nare exact (",[145,1257,1258],{},"attrs.exact_target","). What none of those runs resolves is added from the syntax\nlayer (",[145,1261,920],{},"), so every target's callers are in the graph.",[141,1264,1265,1266,1268,1269,1271,1272,1274,1275,200,1278,623,1280,1283,1284,1287,1288,174,1291,174,1294,605,1297,1300,1301,1304],{},"A call that resolves to one variant (",[145,1267,889],{},", the stub of a conditional import, the\nhost ",[145,1270,604],{}," in rust-analyzer, a Swift function defined once per ",[145,1273,622],{},") is also linked to its\nsiblings, with ",[145,1276,1277],{},"attrs.platform_variant_of",[145,1279,970],{},[145,1281,1282],{},"storage.android.ts#save"," finds callers\nthat import ",[145,1285,1286],{},".\u002Fstorage",". Re-exports in a variant file count as its definitions: TS\n",[145,1289,1290],{},"export {a as b} from '.\u002Fm'",[145,1292,1293],{},"export *",[145,1295,1296],{},"export const X = Y",[145,1298,1299],{},"attrs.reexports","), Dart\n",[145,1302,1303],{},"export 'src\u002Fx.dart' show f"," and a top-level tear-off in a conditional-import library. A call\nthrough the variant reaches the re-exported definition.",[141,1306,1307,1308,1311,1312,1314],{},"Parentheses in a Swift condition (",[145,1309,1310],{},"(os(iOS) && canImport(CoreTelephony)) || os(tvOS)",") are\nevaluated as written. Comments and other declarations between ",[145,1313,622],{}," branches do not merge the\ntypes. A nested type follows its variant.",[141,1316,1317,1318,1321,1322,1325,1326,1330],{},"Kingfisher's tests are built for watchOS (",[145,1319,1320],{},"build"," only, never ",[145,1323,1324],{},"test","), which gives 35\nproject-default test findings. Spot checks on ripgrep, alacritty, libuv, curl, dart-lang\u002Fhttp,\nlocalsend and bluesky social-app: ",[546,1327,1329],{"href":1328},"\u002Fdocs\u002Fvalidation-log#platform-specific-code","platform-specific code","\n.",[1332,1333,1334],"style",{},"html pre.shiki code .s4LKg, html code.shiki .s4LKg{--shiki-light:#4D7C0F;--shiki-default:#4D7C0F;--shiki-dark:#84CC16}html pre.shiki code .sZ_TN, html code.shiki .sZ_TN{--shiki-light:#71717A;--shiki-default:#71717A;--shiki-dark:#A1A1AA}html pre.shiki code .sha9Y, html code.shiki .sha9Y{--shiki-light:#9F8CFF;--shiki-default:#9F8CFF;--shiki-dark:#C4B5FD}html pre.shiki code .seS0s, html code.shiki .seS0s{--shiki-light:#71717A;--shiki-light-font-style:italic;--shiki-default:#71717A;--shiki-default-font-style:italic;--shiki-dark:#A1A1AA;--shiki-dark-font-style:italic}html pre.shiki code .sZWGQ, html code.shiki .sZWGQ{--shiki-light:#8B5CF6;--shiki-default:#8B5CF6;--shiki-dark:#C4B5FD}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":160,"searchDepth":1145,"depth":1108,"links":1336},[1337,1340,1341,1342],{"id":166,"depth":1108,"text":167,"children":1338},[1339],{"id":441,"depth":1137,"text":442},{"id":555,"depth":1108,"text":556},{"id":811,"depth":1108,"text":812},{"id":961,"depth":1108,"text":962},"Per-platform code is tagged with the targets it is built for. --platform ios drops what that\ntarget does not build. cg platforms divergence lists variants that leave a declared target\nuncovered, and calls that are live where the callee is absent.","md",{},true,{"title":87,"description":1343},"lCRZJHPPmaQRQlE6e_8IrV4jfhjpjicHQXZ22xG73TA",[1350,1351],{"title":83,"path":84,"stem":85,"description":160,"children":-1},{"title":91,"path":92,"stem":93,"description":1352,"children":-1},"cg pairs a sender with the code that receives it: HTTP, channels, Nest messages, job queues,\nevents, bridges, and named endpoints of messaging protocols. impact, reaches, path and\ndownstream cross those edges in one repo and, after cg link, between two. cg protocols\nlists endpoints with senders, receivers, guards and checks.",1792170236440]