Browse Source

Remove Showkase processor not found warning from Danger (#3148)

Instead create a new rule to check if the package name is included in `ComposablePreviewProvider`.
pull/3150/head
Jorge Martin Espinosa 3 months ago committed by GitHub
parent
commit
1f69722bdd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 12
      tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt
  2. 44
      tools/danger/dangerfile.js

12
tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt

@ -23,18 +23,20 @@ import sergio.sastre.composable.preview.scanner.android.AndroidComposablePreview
import sergio.sastre.composable.preview.scanner.android.AndroidPreviewInfo import sergio.sastre.composable.preview.scanner.android.AndroidPreviewInfo
import sergio.sastre.composable.preview.scanner.core.preview.ComposablePreview import sergio.sastre.composable.preview.scanner.core.preview.ComposablePreview
object ComposablePreviewProvider : TestParameter.TestParameterValuesProvider { // Make sure we don't import Compound previews by mistake
private val values: List<IndexedValue<ComposablePreview<AndroidPreviewInfo>>> by lazy { private val PACKAGE_TREES = arrayOf(
AndroidComposablePreviewScanner()
.scanPackageTrees(
"io.element.android.features", "io.element.android.features",
"io.element.android.libraries", "io.element.android.libraries",
"io.element.android.services", "io.element.android.services",
"io.element.android.appicon", "io.element.android.appicon",
"io.element.android.appnav", "io.element.android.appnav",
"io.element.android.x", "io.element.android.x",
// Make sure we don't import Compound previews by mistake
) )
object ComposablePreviewProvider : TestParameter.TestParameterValuesProvider {
private val values: List<IndexedValue<ComposablePreview<AndroidPreviewInfo>>> by lazy {
AndroidComposablePreviewScanner()
.scanPackageTrees(*PACKAGE_TREES)
.getPreviews() .getPreviews()
.withIndex() .withIndex()
.toList() .toList()

44
tools/danger/dangerfile.js

@ -125,19 +125,39 @@ const filesWithPreviews = editedFiles.filter(file => file.endsWith(".kt")).filte
return previewAnnotations.some((ann) => content.includes(ann)); return previewAnnotations.some((ann) => content.includes(ann));
}) })
const buildFilesWithMissingProcessor = filesWithPreviews.map(file => { const composablePreviewProviderContents = fs.readFileSync('tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt');
let parent = path.dirname(file); const packageTreesRegex = /private val PACKAGE_TREES = arrayOf\(([\w\W]+?)\n\)/gm;
while (fs.statSync(path.join(parent, 'build.gradle.kts'), {throwIfNoEntry: false}) === undefined) { const packageTreesMatch = packageTreesRegex.exec(composablePreviewProviderContents)[1];
parent = path.dirname(parent); const scannedPreviewPackageTrees = packageTreesMatch
} .replaceAll("\"", "")
return path.join(parent, 'build.gradle.kts'); .replaceAll(",", "")
}).filter((value, index, array) => array.indexOf(value) === index).filter(buildFile => { .split('\n').map((line) => line.trim())
const content = fs.readFileSync(buildFile); .filter((line) => line.length > 0);
return !content.includes('ksp(libs.showkase.processor)');
}) const previewPackagesNotIncludedInScreenshotTests = filesWithPreviews.map((file) => {
const content = fs.readFileSync(file);
const packageRegex = /package\s+([a-zA-Z0-9.]+)/;
const packageMatch = packageRegex.exec(content);
if (!packageMatch || packageMatch.length != 2) {
return null;
}
return packageMatch[1];
}).filter((package) => {
if (!package) {
return false;
}
if (!scannedPreviewPackageTrees.some((prefix) => package.includes(prefix))) {
return true;
}
});
if (buildFilesWithMissingProcessor.length > 0) { if (previewPackagesNotIncludedInScreenshotTests.length > 0) {
warn("You have made changes to a file containing a `@Preview` annotated function but its module doesn't include the showkase processor. Missing processor in: " + buildFilesWithMissingProcessor.join(", ")) const packagesList = previewPackagesNotIncludedInScreenshotTests.map((p) => '- `' + p + '`').join("\n");
warn("You have made changes to a file containing a `@Preview` annotated function but its package name prefix is not included in the `ComposablePreviewProvider`.\nPackages missing in `tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt`: \n" + packagesList);
} }
// Check for pngs on resources // Check for pngs on resources

Loading…
Cancel
Save