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 2 months ago committed by GitHub
parent
commit
1f69722bdd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 20
      tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt
  2. 42
      tools/danger/dangerfile.js

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

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

42
tools/danger/dangerfile.js

@ -125,19 +125,39 @@ const filesWithPreviews = editedFiles.filter(file => file.endsWith(".kt")).filte @@ -125,19 +125,39 @@ const filesWithPreviews = editedFiles.filter(file => file.endsWith(".kt")).filte
return previewAnnotations.some((ann) => content.includes(ann));
})
const buildFilesWithMissingProcessor = filesWithPreviews.map(file => {
let parent = path.dirname(file);
while (fs.statSync(path.join(parent, 'build.gradle.kts'), {throwIfNoEntry: false}) === undefined) {
parent = path.dirname(parent);
const composablePreviewProviderContents = fs.readFileSync('tests/uitests/src/test/kotlin/base/ComposablePreviewProvider.kt');
const packageTreesRegex = /private val PACKAGE_TREES = arrayOf\(([\w\W]+?)\n\)/gm;
const packageTreesMatch = packageTreesRegex.exec(composablePreviewProviderContents)[1];
const scannedPreviewPackageTrees = packageTreesMatch
.replaceAll("\"", "")
.replaceAll(",", "")
.split('\n').map((line) => line.trim())
.filter((line) => line.length > 0);
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 path.join(parent, 'build.gradle.kts');
}).filter((value, index, array) => array.indexOf(value) === index).filter(buildFile => {
const content = fs.readFileSync(buildFile);
return !content.includes('ksp(libs.showkase.processor)');
})
if (buildFilesWithMissingProcessor.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(", "))
return packageMatch[1];
}).filter((package) => {
if (!package) {
return false;
}
if (!scannedPreviewPackageTrees.some((prefix) => package.includes(prefix))) {
return true;
}
});
if (previewPackagesNotIncludedInScreenshotTests.length > 0) {
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

Loading…
Cancel
Save