UNPKG

@reactivex/rxjs

Version:

Reactive Extensions for modern JavaScript

56 lines (44 loc) 2.18 kB
var fs = require('fs'); var path = require('path'); var _ = require('lodash'); //simple regex matcher to detect usage of helper function and its type signature var hotMatch = /\bhot\(/gi; var hotSignatureMatch = /\bdeclare const hot: typeof/gi; var coldMatch = /\bcold\(/gi; var coldSignatureMatch = /\bdeclare const cold: typeof/gi; var errorCount = 0; // Warn when PR size is large var bigPRThreshold = 600; if (danger.github.pr.additions + danger.github.pr.deletions > bigPRThreshold) { warn(':exclamation: Big PR (' + ++errorCount + ')'); markdown('> (' + errorCount + ') : Pull Request size seems relatively large. If Pull Request contains multiple changes, split each into separate PR will helps faster, easier review.'); } // Check test exclusion (.only) is included var modifiedSpecFiles = danger.git.modified_files.filter(function (filePath) { return filePath.match(/-spec.(js|jsx|ts|tsx)$/gi); }); var testFilesIncludeExclusion = modifiedSpecFiles.reduce(function (acc, value) { var content = fs.readFileSync(value).toString(); var invalid = _.includes(content, 'it.only') || _.includes(content, 'describe.only'); if (invalid) { acc.push(path.basename(value)); } return acc; }, []); if (testFilesIncludeExclusion.length > 0) { fail('an \`only\` was left in tests (' + testFilesIncludeExclusion + ')'); } // Check test cases missing type signature import for test marble helper functions var testFilesMissingTypes = modifiedSpecFiles.reduce(function (acc, value) { var content = fs.readFileSync(value).toString(); var hotFnMatchesWithoutTypes = content.match(hotMatch) && !content.match(hotSignatureMatch); var coldFnMatchesWithoutTypes = content.match(coldMatch) && !content.match(coldSignatureMatch); if (hotFnMatchesWithoutTypes || coldFnMatchesWithoutTypes) { acc.push(path.basename(value)); } return acc; }, []); if (testFilesMissingTypes.length > 0) { fail('missing type definition import in tests (' + testFilesMissingTypes + ') (' + ++errorCount + ')'); markdown('> (' + errorCount + ') : It seems updated test cases uses test scheduler interface `hot`, `cold` but miss to import type signature for those.'); }