| ... | ... | @@ -40,14 +40,13 @@ const sourceExtensions = new Set([".swift", ".kt", ".kts"]); |
| 40 | 40 | const excludedDirectories = new Set([ |
| 41 | 41 | ".expo", |
| 42 | 42 | ".git", |
| 43 | | "android", |
| 44 | 43 | "build", |
| 45 | 44 | "DerivedData", |
| 46 | | "ios", |
| 47 | 45 | "node_modules", |
| 48 | 46 | "Pods", |
| 49 | 47 | "Vendor", |
| 50 | 48 | ]); |
| 49 | const generatedNativeProjectDirectories = new Set(["android", "ios"]); |
| 51 | 50 | |
| 52 | 51 | const appRoot = Effect.service(Path.Path).pipe( |
| 53 | 52 | Effect.flatMap((path) => path.fromFileUrl(new URL("../apps/mobile", import.meta.url))), |
| ... | ... | @@ -108,6 +107,7 @@ const runCommand = Effect.fn("runCommand")(function* ( |
| 108 | 107 | |
| 109 | 108 | function collectSources( |
| 110 | 109 | directory: string, |
| 110 | root: string, |
| 111 | 111 | ): Effect.Effect< |
| 112 | 112 | ReadonlyArray<string>, |
| 113 | 113 | PlatformError.PlatformError, |
| ... | ... | @@ -120,15 +120,18 @@ function collectSources( |
| 120 | 120 | const sources: Array<string> = []; |
| 121 | 121 | |
| 122 | 122 | for (const entry of entries) { |
| 123 | | if (excludedDirectories.has(entry)) { |
| 124 | | continue; |
| 125 | | } |
| 126 | | |
| 127 | 123 | const entryPath = path.join(directory, entry); |
| 128 | 124 | const stat = yield* fs.stat(entryPath); |
| 129 | 125 | |
| 130 | 126 | if (stat.type === "Directory") { |
| 131 | | sources.push(...(yield* collectSources(entryPath))); |
| 127 | const isGeneratedNativeProjectDirectory = |
| 128 | directory === root && generatedNativeProjectDirectories.has(entry); |
| 129 | |
| 130 | if (excludedDirectories.has(entry) || isGeneratedNativeProjectDirectory) { |
| 131 | continue; |
| 132 | } |
| 133 | |
| 134 | sources.push(...(yield* collectSources(entryPath, root))); |
| 132 | 135 | continue; |
| 133 | 136 | } |
| 134 | 137 | |
| ... | ... | @@ -144,7 +147,7 @@ function collectSources( |
| 144 | 147 | const runNativeStaticChecks = Effect.fn("runNativeStaticChecks")(function* () { |
| 145 | 148 | const path = yield* Path.Path; |
| 146 | 149 | const root = yield* appRoot; |
| 147 | | const sources = yield* collectSources(root); |
| 150 | const sources = yield* collectSources(root, root); |
| 148 | 151 | const swiftSources = sources.filter((source) => path.extname(source) === ".swift"); |
| 149 | 152 | const kotlinSources = sources.filter((source) => { |
| 150 | 153 | const extension = path.extname(source); |
| ... | ... | @@ -156,6 +159,10 @@ const runNativeStaticChecks = Effect.fn("runNativeStaticChecks")(function* () { |
| 156 | 159 | availableTools.set(tool.command, yield* commandExists(tool.command)); |
| 157 | 160 | } |
| 158 | 161 | |
| 162 | yield* Console.log( |
| 163 | `Found ${swiftSources.length} Swift and ${kotlinSources.length} Kotlin native source files.`, |
| 164 | ); |
| 165 | |
| 159 | 166 | if (swiftSources.length > 0) { |
| 160 | 167 | if (availableTools.get("swiftlint")) { |
| 161 | 168 | yield* runCommand("swiftlint", ["lint", "--config", ".swiftlint.yml", "--strict"], root); |