^bg(red)The ^fg(bright-black)text to ^bg(blue)^fg(cyan)colorizeНужно это всё просто для удобство ввода-вывода в игре, которая работает в терминале и тоже написана на Rust ради изучения языка.
Суть в том, что я хотел бы попросить у более опытных товарищей посмотреть код с целью сделать его более понятным, идиоматичным и правильным.
Конкретно, мне нравится несколько моментов в существующем коде:
Если такой запрос на код-ревью не по адресу - прошу простить.
Всем привет!
Я изучаю Rust и сделал маленькую библиотеку-обёртку над стандартным ящиком term. Библиотека нужна чтобы делать форматированный вывод размеченного текста на терминал - наподобие HTML:
^bg(red)The ^fg(bright-black)text to ^bg(blue)^fg(cyan)colorizeНужно это всё просто для удобство ввода-вывода в игре, которая работает в терминале и тоже написана на Rust ради изучения языка.
Суть в том, что я хотел бы попросить у более опытных товарищей посмотреть код с целью сделать его более понятным, идиоматичным и правильным.
Конкретно, мне нравится несколько моментов в существующем коде:
Некоторые Token ы содержат в себе Option. Поэтому если пользователь хочет передавать в render кусок (slice) токенов, он может передать что-то с None и библиотека запаникует.
Обработка ошибок сейчас практически отсутствует. Всё паникует если попадается некорректный поток токенов. Это, скорее всего, следствие пункта 1, но тем не менее.
Распространение Result наверх, как в строке 287 - должен же быть идиоматичный способ сделать это?
let sure_tokens = try!(parse(s));
Ok(render(term, sure_tokens.as_slice()))
Итерирование - строки 63 и 237 - мне пришлось делать всю работу в вложенном блоке, потому что иначе проверка заимствований (borrow checker) не проходит (две изменяемые ссылки на iter). Мне кажется, должен быть способ лучше.
for n in s.chars(){ ... }пятница, 19 декабря 2014 г., 19:30:23 UTC+3 пользователь Michael Pankov написал:Всем привет!Я изучаю Rust и сделал маленькую библиотеку-обёртку над стандартным ящиком term. Библиотека нужна чтобы делать форматированный вывод размеченного текста на терминал - наподобие HTML:
^bg(red)The ^fg(bright-black)text to ^bg(blue)^fg(cyan)colorizeНужно это всё просто для удобство ввода-вывода в игре, которая работает в терминале и тоже написана на Rust ради изучения языка.
Суть в том, что я хотел бы попросить у более опытных товарищей посмотреть код с целью сделать его более понятным, идиоматичным и правильным.
Конкретно, мне нравится несколько моментов в существующем коде:
Некоторые Token ы содержат в себе Option. Поэтому если пользователь хочет передавать в render кусок (slice) токенов, он может передать что-то с None и библиотека запаникует.
Почему бы в этих случаях (Italic, Underline etc) не обрабатывать оба случая - some и none? Вообще, не совсем понятно почему там Some(bool)? 3 состояния возможно? Тогда может сделать под эти 3 состояния отдельный Enum(да, нет, не знаю)?
Обработка ошибок сейчас практически отсутствует. Всё паникует если попадается некорректный поток токенов. Это, скорее всего, следствие пункта 1, но тем не менее.Распространение Result наверх, как в строке 287 - должен же быть идиоматичный способ сделать это?
Может макрос try!() ?'
let sure_tokens =try!(parse(s));Ok(render(term, sure_tokens.as_slice()))
Итерирование - строки 63 и 237 - мне пришлось делать всю работу в вложенном блоке, потому что иначе проверка заимствований (borrow checker) не проходит (две изменяемые ссылки на iter). Мне кажется, должен быть способ лучше.честно сказать, не понял, почему бы не написать просто