From 029fc30a8e6b10d9d9525c5bf3647527fe2d5dc7 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Fri, 2 Nov 2018 10:40:44 +0100 Subject: [PATCH] rules: skip line-length rule for URLs and quoted lines (#30) Fixes: https://github.com/nodejs/core-validate-commit/issues/24 --- lib/rules/line-length.js | 6 ++++ test/rules/line-length.js | 64 +++++++++++++++++++++++++++++++++++++++ test/validator.js | 4 +-- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/lib/rules/line-length.js b/lib/rules/line-length.js index 4e32f5b..2e19857 100644 --- a/lib/rules/line-length.js +++ b/lib/rules/line-length.js @@ -31,6 +31,12 @@ module.exports = { var failed = false for (let i = 0; i < parsed.body.length; i++) { const line = parsed.body[i] + // Skip quoted lines, e.g. for original commit messages of V8 backports. + if (line.startsWith(' ')) + continue + // Skip lines with URLs. + if (/https?:\/\//.test(line)) + continue if (line.length > len) { failed = true context.report({ diff --git a/test/rules/line-length.js b/test/rules/line-length.js index 115a78a..9c5fac0 100644 --- a/test/rules/line-length.js +++ b/test/rules/line-length.js @@ -67,5 +67,69 @@ ${'aaa'.repeat(30)}` tt.end() }) + t.test('quoted lines', (tt) => { + const v = new Validator() + const context = new Commit({ + sha: 'e7c077c610afa371430180fbd447bfef60ebc5ea' + , author: { + name: 'Evan Lucas' + , email: 'evanlucas@me.com' + , date: '2016-04-12T19:42:23Z' + } + , message: `src: make foo mor foo-ey + +Here’s the original code: + + ${'aaa'.repeat(30)} + +That was the original code. +` + }, v) + + context.report = (opts) => { + tt.pass('called report') + tt.equal(opts.id, 'line-length', 'id') + tt.equal(opts.string, '', 'string') + tt.equal(opts.level, 'pass', 'level') + } + + Rule.validate(context, { + options: { + length: 72 + } + }) + tt.end() + }) + + t.test('URLs', (tt) => { + const v = new Validator() + const context = new Commit({ + sha: 'e7c077c610afa371430180fbd447bfef60ebc5ea' + , author: { + name: 'Evan Lucas' + , email: 'evanlucas@me.com' + , date: '2016-04-12T19:42:23Z' + } + , message: `src: make foo mor foo-ey + +https://${'very-'.repeat(80)}-long-url.org/ +` + }, v) + + context.report = (opts) => { + tt.pass('called report') + tt.equal(opts.id, 'line-length', 'id') + tt.equal(opts.string, '', 'string') + tt.equal(opts.level, 'pass', 'level') + } + + Rule.validate(context, { + options: { + length: 72 + } + }) + tt.end() + }) + t.end() }) diff --git a/test/validator.js b/test/validator.js index df2e80e..b126bd9 100644 --- a/test/validator.js +++ b/test/validator.js @@ -205,11 +205,11 @@ test('Validator - real commits', (t) => { const filtered = msgs.filter((item) => { return item.level === 'fail' }) - tt.equal(filtered.length, 3, 'messages.length') + tt.equal(filtered.length, 2, 'messages.length') const ids = filtered.map((item) => { return item.id }) - const exp = ['line-length', 'line-length', 'title-length'] + const exp = ['line-length', 'title-length'] tt.deepEqual(ids.sort(), exp.sort(), 'message ids') tt.end() })