text: 'use strict';
  
  var gulp        = require('gulp'),
      $$          = require('gulp-load-plugins')(),
      runSequence = require('run-sequence'),
      exec        = require('child_process').exec,
      path        = require('path');
  
  var srcDir   = './js/',
      testDir  = './test/';
  
  //  //  //  //  //  //  //  //  //  //  //  //
  
  gulp.task('lint', lint);
  gulp.task('test', test);
  gulp.task('doc', doc);
  
  gulp.task('build', function(callback) {
      clearBashScreen();
      runSequence(
          'lint',
          'test',
          'doc',
          callback
      );
  });
  
  gulp.task('watch', function () {
      gulp.watch([srcDir + '**', testDir + '**'], ['build'])
  });
  
  gulp.task('default', ['build', 'watch']);
  
  //  //  //  //  //  //  //  //  //  //  //  //
  
  function lint() {
      return gulp.src(srcDir + '**/*.js')
          .pipe($$.excludeGitignore())
          .pipe($$.eslint())
          .pipe($$.eslint.format())
          .pipe($$.eslint.failAfterError());
  }
  
  function test(cb) {
      return gulp.src(testDir + 'index.js')
          .pipe($$.mocha({reporter: 'spec'}));
  }
  
  function doc(cb) {
      exec(path.resolve('jsdoc.sh'), function (err, stdout, stderr) {
          console.log(stdout);
          console.log(stderr);
          cb(err);
      });
  }
  
  function clearBashScreen() {
      var ESC = '\x1B';
      console.log(ESC + 'c'); // (VT-100 escape sequence)
  }
  