Freecodecamp: Закомментированный код рассматривается для проверки кода, а не просто для комментария!

Созданный на 31 мая 2017  ·  15Комментарии  ·  Источник: freeCodeCamp/freeCodeCamp



[Использование объектов для поиска]


ссылка на вызов:
https://www.freecodecamp.com/challenges/using-objects-for-lookups

Описание проблемы


В этой задаче мне пришлось создать объектную версию операторов switch. Поскольку для создания версии объекта мне приходилось запоминать каждый _'case 'члена switch_, я закомментировал всю часть switch и повторно набрал правильную версию объекта.
Хотя я не смог пройти тест.
Это связано с тестовой проверкой
You should not use case, switch, or if statements

Во время комментирования переключателя он не должен проверять использование _switch_ и рассматривать его просто как комментарий.

Информация о браузере

  • Название браузера, версия: Google Chrome
  • Операционная система: Windows 10
  • Мобильный, настольный компьютер или планшет: настольный компьютер

Ваш код

// Setup
function phoneticLookup(val) {
  var result = "";

  // Only change code below this line
   var lookup = {
    "alpha":"Adams",
    "bravo":"Boston",
    "charlie":"Chicago",
    "delta":"Denver",
    "echo":"Easy",
    "foxtrot":"Frank"
    };

  result = lookup[val];

  /*
  switch(val) {
    case "alpha": 
      result = "Adams";
      break;
    case "bravo": 
      result = "Boston";
      break;
    case "charlie": 
      result = "Chicago";
      break;
    case "delta": 
      result = "Denver";
      break;
    case "echo": 
      result = "Easy";
      break;
    case "foxtrot": 
      result = "Frank";
  }
*/
  // Only change code above this line
  return result;
}

// Change this value to test
phoneticLookup("charlie");



Скриншот

freecodecamp

help wanted blocked on the roadmap bug

Самый полезный комментарий

@ Saif-Shines. Да, мы знаем об этой проблеме как о существующей проблеме на основном веб-сайте, и у нас действительно нет инфраструктуры, чтобы иметь строгий синтаксический анализатор, если вы можете.

Единственный способ в настоящее время - это продолжить, удалив комментарии.

Все 15 Комментарий

@ Saif-Shines. Да, мы знаем об этой проблеме как о существующей проблеме на основном веб-сайте, и у нас действительно нет инфраструктуры, чтобы иметь строгий синтаксический анализатор, если вы можете.

Единственный способ в настоящее время - это продолжить, удалив комментарии.

Потенциальные участники, это нужно исследовать здесь:
https://github.com/freeCodeCamp/freeCodeCamp/blob/staging/client/rechallenge/throwers.js#L16

/ cc @BerkeleyTrue

При первом же вызове Basic Javascript я столкнулся с аналогичной проблемой, пытаясь прокомментировать:

// Use comments only when they are actually needed

/* Sometimes, using descriptive names for variables and functions is way better 
than leaving code smell all over your code */

В этом случае, поскольку во втором комментарии я использую слово «функция», это вызовет:
Error: SyntaxError: Unsafe or unfinished function declaration

Может быть, запуск тестов для contents.replace(/\/\*[\s\S]*\*\/|\/\/[^\n]*/gi,'')) вместо contents может решить эту проблему? (имеется в виду общая проблема, потому что в моем случае этот конкретный тест все равно не прошел бы из-за того, что содержимое было пустым после замены комментариев)

Нельзя ли сделать что-то вроде:
Node node = nodeList.item(i); if(node.getNodeType() == Node.COMMENT_NODE) { continue; } else { //do something }

Я бы хотел этим заняться.

Меня интересует эта проблема, можно ли назначить это мне, и можете ли вы направить меня к файлам, которые необходимо изменить.

Поскольку обновлений по этому поводу не было больше чем за неделю, я займусь этим. Надеюсь, с вами все в порядке, ребята, @ Survivor75 и @ knrt10

@raisedadead : Я считаю, что решение намного проще, чем мы думали.

Мы запускаем утверждения для code который является строкой. Так почему бы нам просто не запустить регулярное выражение для этой строки и не удалить комментарии, прежде чем она будет использована для проверки?

Например, в - client/frame-runner.js мы получаем содержимое редактора кодового зеркала, например

const editor = { getValue() { return source; } };
const code = source;

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

const editor = { getValue() { return source; } };
const code = source.replace(/\/\*[\s\S]*?\*\/|[^\S]\/\/.*$/gm, '');

Когда это делается таким образом, средство запуска тестов никогда не получает комментарии в коде, и все в порядке.

Я проверил это регулярное выражение здесь - http://regexr.com/3ghvi

ЗАМЕТКА:

  • Это не рассматривает комментарии HTML, поскольку есть некоторые проблемы в начале, которые действительно подтверждают существование комментариев HTML.
  • Шаблон URL исключен.
  • Поскольку это регулярное выражение заменяет символ, ведущий к // мы не заменяем встроенные комментарии, которые не существуют в отдельных строках.

@adityaparab это круто: +1:.
Чуть не забыл об этом, потому что занялся другим.
Однако я придумал этот код, если вы собираетесь работать над этим, взгляните на приведенную ниже функцию.
function stripComments ( code ) { return code . replace (/\/\/.*|\/\*[^]*?\*\// g , "") ; }

Это приведет к удалению любого закомментированного кода :)

К сожалению, единственное реальное решение здесь - использовать AST для тестов. Я обсуждал это с @QuincyLarson о добавлении API, который предоставляет JS AST, созданный babel, и добавляет API, похожий на интерфейс плагина eslint. Это может быть немного неуместно, поскольку приоритетом является переход к задачам реагирования, а затем обобщение способа импорта самих задач из файлов.

Я просто столкнулся с этой проблемой с комментариями, содержащими слово «функция» ... Я действительно запутался, пока кто-то на форуме не объяснил, что происходит. Надеюсь, эта проблема скоро будет исправлена! Возможно, пользователям должно быть показано какое-то сообщение, предупреждающее их о проблемах парсера, касающихся комментариев в задачах?

Смотрите также:
https://forum.freecodecamp.org/t/javascript-tests-in-challenges-no-longer-working-correctly/190249

@SuperGeniusZeb Спасибо, что сообщили об этом и подтвердили шаги по воспроизведению.

Я закрываю этот вопрос как устаревший, поскольку в последнее время он не использовался. Если вы считаете, что это все еще актуально для недавно обновленной платформы, объясните, почему, а затем откройте ее снова.

@QuincyLarson

На обновленном сайте комментарии по-прежнему ошибочно воспринимаются тестами как код. Возьмем, к примеру, эту задачу:

https://learn.freecodecamp.org/responsive-web-design/css-grid/create-a-column-gap-using-grid-column-gap

Используя следующий код, я могу пройти тест (который проверяет, установлено ли для grid-column-gap значение 20px ), даже если grid-column-gap: 20px находится в комментарии.

<style>
  .d1{background:LightSkyBlue;}
  .d2{background:LightSalmon;}
  .d3{background:PaleTurquoise;}
  .d4{background:LightPink;}
  .d5{background:PaleGreen;}

  .container {
    font-size: 40px;
    min-height: 300px;
    width: 100%;
    background: LightGray;
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 1fr 1fr 1fr;
    /* add your code below this line */
    grid-column-gap: 10px;
    // grid-column-gap: 20px;
    /* add your code above this line */
  }
</style>

<div class="container">
  <div class="d1">1</div>
  <div class="d2">2</div>
  <div class="d3">3</div>
  <div class="d4">4</div>
  <div class="d5">5</div>
</div>

Пожалуйста, повторно откройте эту проблему.

@SuperGeniusZeb Не могли бы вы открыть новый выпуск на https://github.com/freeCodeCamp/learn/issues ? Большое спасибо.

@raisedadead Я только что создал там новый выпуск:
https://github.com/freeCodeCamp/learn/issues/165

Была ли эта страница полезной?
0 / 5 - 0 рейтинги