ссылка на вызов:
https://www.freecodecamp.com/challenges/using-objects-for-lookups
В этой задаче мне пришлось создать объектную версию операторов switch. Поскольку для создания версии объекта мне приходилось запоминать каждый _'case 'члена switch_, я закомментировал всю часть switch и повторно набрал правильную версию объекта.
Хотя я не смог пройти тест.
Это связано с тестовой проверкой
You should not use case, switch, or if statements
Во время комментирования переключателя он не должен проверять использование _switch_ и рассматривать его просто как комментарий.
// 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");
@ 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
ЗАМЕТКА:
//
мы не заменяем встроенные комментарии, которые не существуют в отдельных строках.@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
На обновленном сайте комментарии по-прежнему ошибочно воспринимаются тестами как код. Возьмем, к примеру, эту задачу:
Используя следующий код, я могу пройти тест (который проверяет, установлено ли для 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
Самый полезный комментарий
@ Saif-Shines. Да, мы знаем об этой проблеме как о существующей проблеме на основном веб-сайте, и у нас действительно нет инфраструктуры, чтобы иметь строгий синтаксический анализатор, если вы можете.
Единственный способ в настоящее время - это продолжить, удалив комментарии.