Устранение мертвого кода, создающего ненужный блок - PullRequest
0 голосов
/ 17 октября 2018

Я искал Rollupjs, специально для его функции удаления мертвого кода.

В моем примере я создал надуманный пример ниже:

Источник:

const opts = {
  method: 'GET',
  url: 'https://www.google.com',
  secure: true
}

const fs = require('fs')

let token
if (opts.secure) {
  token = 'secret_token'
}

if (opts.method === 'GET') {
  if (token) {
    fs.readFileSync(['will get', opts.url, 'with token', token])
  } else {
    fs.readFileSync(['will get', opts.url])
  }
} else if (opts.method === 'POST') {
  console.log('will post', opts.url)
} else if (opts.method === 'PUT') {
  console.log('will put', opts.url)
} else if (opts.method === 'DELETE') {
  console.log('will delete', opts.url)
}

Результат:

'use strict';

const opts = {
  method: 'GET',
  url: 'https://www.google.com',
  secure: true
};

const fs = require('fs');

let token;
{
  token = 'secret_token';
}

{
  if (token) {
    fs.readFileSync(['will get', opts.url, 'with token', token]);
  } else {
    fs.readFileSync(['will get', opts.url]);
  }
}

Как видно, в результате вокруг блока token = 'secret_token'.

* есть блок.1017 * Также это не устраняет мертвый код вокруг блока if (token) {.

Однако, если вы удалите условие вокруг оператора if и просто установите токен, например let token = 'secret_token, вы получите более близкий результат.Хотя вы все еще получаете вложенные ненужные блоки.

{
  {
    fs.readFileSync(['will get', opts.url, 'with token', token]);
  }
}

Я полагаю, что я могу сделать некоторую хакерскую попытку удалить ненужные блоки, используя esprima.Но у меня есть два вопроса.

  1. Есть ли способ в Rollup удалить эти ненужные блоки кода.Фигурные скобки.

  2. Есть ли способ довести определяющую переменную до допустимого значения.

Изменение IE:

let a = 1

до:

let a
{
  a = 1
}

Демо: https://rollupjs.org/repl?version=0.66.6&shareable=JTdCJTIybW9kdWxlcyUyMiUzQSU1QiU3QiUyMm5hbWUlMjIlM0ElMjJtYWluLmpzJTIyJTJDJTIyY29kZSUyMiUzQSUyMmNvbnN0JTIwb3B0cyUyMCUzRCUyMCU3QiU1Q24lMjAlMjBtZXRob2QlM0ElMjAnR0VUJyUyQyU1Q24lMjAlMjB1cmwlM0ElMjAnaHR0cHMlM0ElMkYlMkZ3d3cuZ29vZ2xlLmNvbSclMkMlNUNuJTIwJTIwc2VjdXJlJTNBJTIwdHJ1ZSU1Q24lN0QlNUNuJTVDbmNvbnN0JTIwZnMlMjAlM0QlMjByZXF1aXJlKCdmcycpJTVDbiU1Q25sZXQlMjB0b2tlbiU1Q25pZiUyMChvcHRzLnNlY3VyZSklMjAlN0IlNUNuJTIwJTIwdG9rZW4lMjAlM0QlMjAnc2VjcmV0X3Rva2VuJyU1Q24lN0QlNUNuJTVDbmlmJTIwKG9wdHMubWV0aG9kJTIwJTNEJTNEJTNEJTIwJ0dFVCcpJTIwJTdCJTVDbiUyMCUyMGlmJTIwKHRva2VuKSUyMCU3QiU1Q24lMjAlMjAlMjAlMjBmcy5yZWFkRmlsZVN5bmMoJTVCJ3dpbGwlMjBnZXQnJTJDJTIwb3B0cy51cmwlMkMlMjAnd2l0aCUyMHRva2VuJyUyQyUyMHRva2VuJTVEKSU1Q24lMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTVDbiUyMCUyMCUyMCUyMGZzLnJlYWRGaWxlU3luYyglNUInd2lsbCUyMGdldCclMkMlMjBvcHRzLnVybCU1RCklNUNuJTIwJTIwJTdEJTVDbiU3RCUyMGVsc2UlMjBpZiUyMChvcHRzLm1ldGhvZCUyMCUzRCUzRCUzRCUyMCdQT1NUJyklMjAlN0IlNUNuJTIwJTIwY29uc29sZS5sb2coJ3dpbGwlMjBwb3N0JyUyQyUyMG9wdHMudXJsKSU1Q24lN0QlMjBlbHNlJTIwaWYlMjAob3B0cy5tZXRob2QlMjAlM0QlM0QlM0QlMjAnUFVUJyklMjAlN0IlNUNuJTIwJTIwY29uc29sZS5sb2coJ3dpbGwlMjBwdXQnJTJDJTIwb3B0cy51cmwpJTVDbiU3RCUyMGVsc2UlMjBpZiUyMChvcHRzLm1ldGhvZCUyMCUzRCUzRCUzRCUyMCdERUxFVEUnKSUyMCU3QiU1Q24lMjAlMjBjb25zb2xlLmxvZygnd2lsbCUyMGRlbGV0ZSclMkMlMjBvcHRzLnVybCklNUNuJTdEJTVDbiUyMiU3RCU1RCUyQyUyMm9wdGlvbnMlMjIlM0ElN0IlMjJmb3JtYXQlMjIlM0ElMjJjanMlMjIlMkMlMjJuYW1lJTIyJTNBJTIybXlCdW5kbGUlMjIlMkMlMjJhbWQlMjIlM0ElN0IlMjJpZCUyMiUzQSUyMiUyMiU3RCU3RCUyQyUyMmV4YW1wbGUlMjIlM0FudWxsJTdE

...