-
Notifications
You must be signed in to change notification settings - Fork 300
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Вильданов Савелий #226
base: master
Are you sure you want to change the base?
Вильданов Савелий #226
Conversation
cs/Markdown/TagsTypes/LinkTag.cs
Outdated
public string GetHtmlOpenTag() | ||
{ | ||
return "<a href=\""; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот тут выглядит так, что ты попытался вписать новый элемент в существующую систему и костылями подогнал его под правила этой системы
Для меня ожидаемое поведение открывающего тега - это <a>
или <a href="link">
cs/Markdown/TagsTypes/ITagsType.cs
Outdated
public string GetHtmlOpenTag(); | ||
public string GetHtmlCloseTag(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это можно сделать свойствами, методы тут немного избыточны, учитывая, что все имплементации этих методов просто возвращают константную строку
cs/Markdown/Preparator.cs
Outdated
|
||
public void Paragrapher(string text) | ||
{ | ||
var paragraphs = text.Split('\n'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
\n
это перенос на линуксовых системах, обычно сразу обрабатывается ещё и перенос на винде - \r\n
cs/Markdown/Preparator.cs
Outdated
public List<Token> GetTokens() | ||
{ | ||
return tokens; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А зачем нужна эта функция, если из метода выше можно просто сразу вернуть список построенных токенов ? Это позволит дропнуть tokens из полей класса и не вызывать лишний метод
cs/Markdown/Preparator.cs
Outdated
tokens.Remove(tokens.Last()); | ||
CheckTokens(); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пройдись по всему коду автоформаттером, много где двойные-тройные переносы строк или наоборот слипшиеся строки
cs/Markdown/Token.cs
Outdated
// Если Type = null, значит этот токен для текста, иначе - для тэга. | ||
public ITagsType? Type { get; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Наличие такого комментария сразу говорит о том, что что-то тут не так)) Давай попробуем уйти от комментариев в коде и сделать для текста стандартный подход текущего решения, мб ему создать свой класс, наследуемый от ITagsType?
cs/MarkdownTests/MarkdownTest.cs
Outdated
[TestCase("\\", ExpectedResult = "\\")] | ||
[TestCase("\\__", ExpectedResult = "__")] | ||
[TestCase("\\_", ExpectedResult = "_")] | ||
[TestCase("\\#", ExpectedResult = "#")] | ||
[TestCase("\\w", ExpectedResult = "\\w")] | ||
public string Md_ShouldReturnCorrectString_WithSlashes(string text) | ||
{ | ||
return Md.Render(text); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут ты проверил работу экранирования, но как будто бы не полностью. А где гарантии, что, например, \\#
превратился в #
не потому, что для заголовка просто не было текста, идущего после #
? Давай чуть расширим эти кейсы и покажем, что на реальных данных экранирование тоже работает
|
||
namespace MarkdownTests; | ||
|
||
public class MarkdownTests |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Куда поставить доп балл за квинов???
public class MarkdownTests | ||
{ | ||
[Test] | ||
public void Md_ShouldReturnCorrectString_WithHeadingTag() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Классно поработал над названиями и покрытием тестов 🔥
{ | ||
return Md.Render(text); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не выполняется одно требование из спецификации
Подчерки, заканчивающие выделение, должны следовать за непробельным символом. Иначе эти _подчерки _не считаются_ окончанием выделения и остаются просто символами подчерка
[TestCase("_подчерки _не считаются_", ExpectedResult = "_подчерки <em>не считаются</em>")]
public string Md_ShouldWorkCorrect(string text)
{
return Md.Render(text);
}
{ | ||
ListOfTokens<Token> tokens = new(); | ||
|
||
var paragraphs = text.Split("\r\n"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
#226 (comment)
Сейчас ты сделал обратное решение - поддержал только винду, а про линуксоидов и яблочников забыл. Было бы круто поддержать сразу все платформы и парсить по обоим типам переносов
|
||
public interface IParser | ||
{ | ||
bool TryParse(char symbol, string text, int index); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это скорее CanParse
наверное? Обычно методы Try...
пытаются вернуть какой-то результат в out
параметре, то есть "пытаются что-то сделать и вернуть успешность этого действия" - например, int.TryParse(..., out value)
, dictionary.TryGetValue(..., out value)
, а в твоем случае этого параметра нет
@desolver