diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7d5fc8fe..0e65f7df 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,6 +9,13 @@ This project adheres to [Semantic Versioning](https://semver.org/). The format of this change log follows the advice given at [Keep a CHANGELOG](https://keepachangelog.com). ## [Unreleased] +### Fixed +- Fixed stylelinting error in non-theme plugins containing scss. + +### Removed +- Stylelint less component task (`grunt stylelint:less`) has been deprecated in + Moodle 3.7. + ## [4.5.4] - 2024-08-23 ### Changed - Fixed nvm loading issue caused by upstream regression. diff --git a/src/Command/GruntCommand.php b/src/Command/GruntCommand.php index 8999389e..2d19079a 100644 --- a/src/Command/GruntCommand.php +++ b/src/Command/GruntCommand.php @@ -33,7 +33,7 @@ protected function configure(): void { parent::configure(); - $tasks = ['amd', 'yui', 'gherkinlint', 'stylelint:css', 'stylelint:less', 'stylelint:scss']; + $tasks = ['amd', 'yui', 'gherkinlint', 'stylelint']; $this->setName('grunt') ->setDescription('Run Grunt task on a plugin') @@ -194,10 +194,11 @@ public function toGruntTask(string $task): ?GruntTaskModel } return new GruntTaskModel($task, $this->moodle->directory); + case 'stylelint': + // Let stylelint task logic to determine which type of linter to run. + return $this->plugin->hasFilesWithName('*.css') || $this->plugin->hasFilesWithName('*.scss') ? $defaultTaskPluginDir : null; case 'stylelint:css': return $this->plugin->hasFilesWithName('*.css') ? $defaultTaskPluginDir : null; - case 'stylelint:less': - return $this->plugin->hasFilesWithName('*.less') ? $defaultTaskPluginDir : null; case 'stylelint:scss': return $this->plugin->hasFilesWithName('*.scss') ? $defaultTaskPluginDir : null; default: diff --git a/tests/Command/GruntCommandTest.php b/tests/Command/GruntCommandTest.php index f7c3a592..18b1cb83 100644 --- a/tests/Command/GruntCommandTest.php +++ b/tests/Command/GruntCommandTest.php @@ -132,10 +132,16 @@ public function testToGruntTaskWithGherkin() $this->assertNull($command->toGruntTask('gherkinlint')); } - public function testToGruntTaskWithStyles() + public function testToGruntTaskWithStylesCss() { $command = $this->newCommand(); + $task = $command->toGruntTask('stylelint'); + $this->assertInstanceOf(GruntTaskModel::class, $task); + $this->assertSame('stylelint', $task->taskName); + $this->assertSame('', $task->buildDirectory); + $this->assertSame($this->pluginDir, $task->workingDirectory); + $task = $command->toGruntTask('stylelint:css'); $this->assertInstanceOf(GruntTaskModel::class, $task); $this->assertSame('stylelint:css', $task->taskName); @@ -144,8 +150,31 @@ public function testToGruntTaskWithStyles() $this->fs->remove($this->pluginDir . '/styles.css'); + $this->assertNull($command->toGruntTask('stylelint')); $this->assertNull($command->toGruntTask('stylelint:css')); - $this->assertNull($command->toGruntTask('stylelint:less')); + } + + public function testToGruntTaskWithStylesScss() + { + $command = $this->newCommand(); + $this->fs->mkdir($this->pluginDir . '/scss'); + $this->fs->rename($this->pluginDir . '/styles.css', $this->pluginDir . '/scss/styles.scss'); + + $task = $command->toGruntTask('stylelint'); + $this->assertInstanceOf(GruntTaskModel::class, $task); + $this->assertSame('stylelint', $task->taskName); + $this->assertSame('', $task->buildDirectory); + $this->assertSame($this->pluginDir, $task->workingDirectory); + + $task = $command->toGruntTask('stylelint:scss'); + $this->assertInstanceOf(GruntTaskModel::class, $task); + $this->assertSame('stylelint:scss', $task->taskName); + $this->assertSame('', $task->buildDirectory); + $this->assertSame($this->pluginDir, $task->workingDirectory); + + $this->fs->remove($this->pluginDir . '/scss'); + + $this->assertNull($command->toGruntTask('stylelint')); $this->assertNull($command->toGruntTask('stylelint:scss')); }