diff --git a/src/linting-test.js b/src/linting-test.js new file mode 100644 index 00000000..6f634f47 --- /dev/null +++ b/src/linting-test.js @@ -0,0 +1,31 @@ +import {resolve} from 'path'; +import {assert} from 'chai'; +import sinon from 'sinon'; +import any from '@travi/any'; +import * as fsAsync from '../thirdparty-wrappers/fs'; +import scaffoldLinting from './linting'; + +suite('Linting', () => { + let sandbox; + + setup(() => { + sandbox = sinon.createSandbox(); + + sandbox.stub(fsAsync, 'copyFile'); + }); + + teardown(() => sandbox.restore()); + + test('that the markdown lint style is defined', async () => { + const projectRoot = any.string(); + + const results = await scaffoldLinting(projectRoot); + + assert.deepEqual(results.gems, ['mdl']); + assert.calledWith( + fsAsync.copyFile, + resolve(__dirname, '..', 'templates', 'markdownlint-style.rb'), + `${projectRoot}/markdownlint-style.rb` + ); + }); +}); diff --git a/src/linting.js b/src/linting.js new file mode 100644 index 00000000..e88ee862 --- /dev/null +++ b/src/linting.js @@ -0,0 +1,14 @@ +import {resolve} from 'path'; +import {info} from '@travi/cli-messages'; +import {copyFile} from '../thirdparty-wrappers/fs'; + +export default async function (projectRoot) { + info('Configuring Linting'); + + await copyFile( + resolve(__dirname, '..', 'templates', 'markdownlint-style.rb'), + `${projectRoot}/markdownlint-style.rb` + ); + + return {gems: ['mdl']}; +} diff --git a/src/scaffolder-test.js b/src/scaffolder-test.js index 213dbcd7..49d98ee5 100644 --- a/src/scaffolder-test.js +++ b/src/scaffolder-test.js @@ -5,6 +5,7 @@ import * as rubyVersionScaffolder from './ruby-version'; import * as rakeScaffolder from './rake'; import * as gemsScaffolder from './gems'; import * as documentationScaffolder from './documentation'; +import * as lintingScaffolder from './linting'; import {scaffold} from './scaffolder'; suite('scaffolder', () => { @@ -17,6 +18,7 @@ suite('scaffolder', () => { sandbox.stub(rakeScaffolder, 'default'); sandbox.stub(gemsScaffolder, 'default'); sandbox.stub(documentationScaffolder, 'default'); + sandbox.stub(lintingScaffolder, 'default'); }); teardown(() => sandbox.restore()); @@ -24,14 +26,16 @@ suite('scaffolder', () => { test('that the project is scaffolded', async () => { const projectRoot = any.string(); const gemsForRake = any.listOf(any.word); + const gemsForLinting = any.listOf(any.word); const documentation = any.simpleObject(); rakeScaffolder.default.withArgs(projectRoot).resolves({gems: gemsForRake}); + lintingScaffolder.default.withArgs(projectRoot).resolves({gems: gemsForLinting}); documentationScaffolder.default.returns(documentation); const result = await scaffold({projectRoot}); assert.calledWith(rubyVersionScaffolder.default, projectRoot); - assert.calledWith(gemsScaffolder.default, projectRoot, gemsForRake); + assert.calledWith(gemsScaffolder.default, projectRoot, [...gemsForRake, ...gemsForLinting]); assert.equal(result.verificationCommand, 'rake'); assert.equal(result.documentation, documentation); }); diff --git a/src/scaffolder.js b/src/scaffolder.js index 68c4a350..9cea9a9d 100644 --- a/src/scaffolder.js +++ b/src/scaffolder.js @@ -3,16 +3,18 @@ import scaffoldRubyVersion from './ruby-version'; import scaffoldRake from './rake'; import scaffoldGem from './gems'; import scaffoldDocumentation from './documentation'; +import scaffoldLinting from './linting'; export async function scaffold({projectRoot}) { info('Initializing Ruby project'); - const [rakeResults] = await Promise.all([ + const [rakeResults, lintingResults] = await Promise.all([ scaffoldRake(projectRoot), + scaffoldLinting(projectRoot), scaffoldRubyVersion(projectRoot) ]); - await scaffoldGem(projectRoot, rakeResults.gems); + await scaffoldGem(projectRoot, [...rakeResults.gems, ...lintingResults.gems]); return { verificationCommand: 'rake', diff --git a/templates/markdownlint-style.rb b/templates/markdownlint-style.rb new file mode 100644 index 00000000..88af3b0f --- /dev/null +++ b/templates/markdownlint-style.rb @@ -0,0 +1,3 @@ +all +rule 'no-trailing-punctuation', :punctuation => '.,;:!' +exclude_rule 'commands-show-output' diff --git a/test/integration/features/step_definitions/common-steps.js b/test/integration/features/step_definitions/common-steps.js index abffc577..ad535d5d 100644 --- a/test/integration/features/step_definitions/common-steps.js +++ b/test/integration/features/step_definitions/common-steps.js @@ -23,7 +23,8 @@ Before(async function () { stubbedFs({ templates: { 'Rakefile.rb': await readFile(resolve(__dirname, '../../../../', 'templates/Rakefile.rb')), - 'Gemfile.rb': await readFile(resolve(__dirname, '../../../../', 'templates/Gemfile.rb')) + 'Gemfile.rb': await readFile(resolve(__dirname, '../../../../', 'templates/Gemfile.rb')), + 'markdownlint-style.rb': await readFile(resolve(__dirname, '../../../../', 'templates/markdownlint-style.rb')) } });