diff --git a/tools/doc/json.js b/tools/doc/json.js
index 0e205ed7cbae61..aad860f840ae09 100644
--- a/tools/doc/json.js
+++ b/tools/doc/json.js
@@ -30,7 +30,7 @@ const common = require('./common.js');
 const marked = require('marked');
 
 // customized heading without id attribute
-var renderer = new marked.Renderer();
+const renderer = new marked.Renderer();
 renderer.heading = function(text, level) {
   return '<h' + level + '>' + text + '</h' + level + '>\n';
 };
@@ -39,14 +39,14 @@ marked.setOptions({
 });
 
 function doJSON(input, filename, cb) {
-  var root = {source: filename};
-  var stack = [root];
+  const root = {source: filename};
+  const stack = [root];
   var depth = 0;
   var current = root;
   var state = null;
-  var lexed = marked.lexer(input);
+  const lexed = marked.lexer(input);
   lexed.forEach(function(tok) {
-    var type = tok.type;
+    const type = tok.type;
     var text = tok.text;
 
     // <!-- type = module -->
@@ -223,14 +223,14 @@ function doJSON(input, filename, cb) {
 //          default: 'false' } ] } ]
 
 function processList(section) {
-  var list = section.list;
-  var values = [];
+  const list = section.list;
+  const values = [];
   var current;
-  var stack = [];
+  const stack = [];
 
   // for now, *just* build the heirarchical list
   list.forEach(function(tok) {
-    var type = tok.type;
+    const type = tok.type;
     if (type === 'space') return;
     if (type === 'list_item_start' || type === 'loose_item_start') {
       var n = {};
@@ -329,7 +329,7 @@ function parseSignature(text, sig) {
   params = params[1];
   params = params.split(/,/);
   var optionalLevel = 0;
-  var optionalCharDict = {'[': 1, ' ': 0, ']': -1};
+  const optionalCharDict = {'[': 1, ' ': 0, ']': -1};
   params.forEach(function(p, i) {
     p = p.trim();
     if (!p) return;
@@ -351,7 +351,7 @@ function parseSignature(text, sig) {
     }
     p = p.substring(0, pos + 1);
 
-    var eq = p.indexOf('=');
+    const eq = p.indexOf('=');
     if (eq !== -1) {
       def = p.substr(eq + 1);
       p = p.substr(0, eq);
@@ -381,8 +381,8 @@ function parseListItem(item) {
   // text = text.replace(/^(Argument|Param)s?\s*:?\s*/i, '');
 
   text = text.replace(/^, /, '').trim();
-  var retExpr = /^returns?\s*:?\s*/i;
-  var ret = text.match(retExpr);
+  const retExpr = /^returns?\s*:?\s*/i;
+  const ret = text.match(retExpr);
   if (ret) {
     item.name = 'return';
     text = text.replace(retExpr, '');
@@ -396,24 +396,24 @@ function parseListItem(item) {
   }
 
   text = text.trim();
-  var defaultExpr = /\(default\s*[:=]?\s*['"`]?([^, '"`]*)['"`]?\)/i;
-  var def = text.match(defaultExpr);
+  const defaultExpr = /\(default\s*[:=]?\s*['"`]?([^, '"`]*)['"`]?\)/i;
+  const def = text.match(defaultExpr);
   if (def) {
     item.default = def[1];
     text = text.replace(defaultExpr, '');
   }
 
   text = text.trim();
-  var typeExpr = /^\{([^}]+)\}/;
-  var type = text.match(typeExpr);
+  const typeExpr = /^\{([^}]+)\}/;
+  const type = text.match(typeExpr);
   if (type) {
     item.type = type[1];
     text = text.replace(typeExpr, '');
   }
 
   text = text.trim();
-  var optExpr = /^Optional\.|(?:, )?Optional$/;
-  var optional = text.match(optExpr);
+  const optExpr = /^Optional\.|(?:, )?Optional$/;
+  const optional = text.match(optExpr);
   if (optional) {
     item.optional = true;
     text = text.replace(optExpr, '');
@@ -556,19 +556,19 @@ function deepCopy_(src) {
 
 
 // these parse out the contents of an H# tag
-var eventExpr = /^Event(?::|\s)+['"]?([^"']+).*$/i;
-var classExpr = /^Class:\s*([^ ]+).*$/i;
-var propExpr = /^[^.]+\.([^ .()]+)\s*$/;
-var braceExpr = /^[^.[]+(\[[^\]]+\])\s*$/;
-var classMethExpr = /^class\s*method\s*:?[^.]+\.([^ .()]+)\([^)]*\)\s*$/i;
-var methExpr = /^(?:[^.]+\.)?([^ .()]+)\([^)]*\)\s*$/;
-var newExpr = /^new ([A-Z][a-zA-Z]+)\([^)]*\)\s*$/;
+const eventExpr = /^Event(?::|\s)+['"]?([^"']+).*$/i;
+const classExpr = /^Class:\s*([^ ]+).*$/i;
+const propExpr = /^[^.]+\.([^ .()]+)\s*$/;
+const braceExpr = /^[^.[]+(\[[^\]]+\])\s*$/;
+const classMethExpr = /^class\s*method\s*:?[^.]+\.([^ .()]+)\([^)]*\)\s*$/i;
+const methExpr = /^(?:[^.]+\.)?([^ .()]+)\([^)]*\)\s*$/;
+const newExpr = /^new ([A-Z][a-zA-Z]+)\([^)]*\)\s*$/;
 var paramExpr = /\((.*)\);?$/;
 
 function newSection(tok) {
-  var section = {};
+  const section = {};
   // infer the type from the text.
-  var text = section.textRaw = tok.text;
+  const text = section.textRaw = tok.text;
   if (text.match(eventExpr)) {
     section.type = 'event';
     section.name = text.replace(eventExpr, '$1');