Skip to content
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

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

Saveliy21
Copy link

Comment on lines 10 to 13
public string GetHtmlOpenTag()
{
return "<a href=\"";
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вот тут выглядит так, что ты попытался вписать новый элемент в существующую систему и костылями подогнал его под правила этой системы

Для меня ожидаемое поведение открывающего тега - это <a> или <a href="link">

Comment on lines 7 to 8
public string GetHtmlOpenTag();
public string GetHtmlCloseTag();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это можно сделать свойствами, методы тут немного избыточны, учитывая, что все имплементации этих методов просто возвращают константную строку


public void Paragrapher(string text)
{
var paragraphs = text.Split('\n');
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

\n это перенос на линуксовых системах, обычно сразу обрабатывается ещё и перенос на винде - \r\n

Comment on lines 41 to 44
public List<Token> GetTokens()
{
return tokens;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А зачем нужна эта функция, если из метода выше можно просто сразу вернуть список построенных токенов ? Это позволит дропнуть tokens из полей класса и не вызывать лишний метод

tokens.Remove(tokens.Last());
CheckTokens();
}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пройдись по всему коду автоформаттером, много где двойные-тройные переносы строк или наоборот слипшиеся строки

Comment on lines 14 to 15
// Если Type = null, значит этот токен для текста, иначе - для тэга.
public ITagsType? Type { get; }
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наличие такого комментария сразу говорит о том, что что-то тут не так)) Давай попробуем уйти от комментариев в коде и сделать для текста стандартный подход текущего решения, мб ему создать свой класс, наследуемый от ITagsType?

Comment on lines 66 to 74
[TestCase("\\", ExpectedResult = "\\")]
[TestCase("\\__", ExpectedResult = "__")]
[TestCase("\\_", ExpectedResult = "_")]
[TestCase("\\#", ExpectedResult = "#")]
[TestCase("\\w", ExpectedResult = "\\w")]
public string Md_ShouldReturnCorrectString_WithSlashes(string text)
{
return Md.Render(text);
}
Copy link

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
Copy link

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()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Классно поработал над названиями и покрытием тестов 🔥

{
return Md.Render(text);
}

Copy link

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");

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);

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), а в твоем случае этого параметра нет

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants