Причесывание кода инструментов авторинга к релизу

Issue #200 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 200

Ниже перечислены замечания по коду инструментов авторинга, они пронумерованы. Про некоторые
из них было говорено еще полгода назад, а воз и ныне там! Давайте приводить в порядок
свой код. Пункты пронумерованы - по каждому исправлению отписывайтесь здесь с указанием
номера пункта, если есть вопросы - тоже.

Всем
1)Методы должны содержать PHPDoc комментарии с объяснением метода, параметров и значения
- на английском языке.
Исключение допускается ТОЛЬКО для перегруженных методов (когда соответствующий комментарий
уже есть в родительском классе).
Каждому отписаться про исправления в своих файлах...

2) Общий стиль заголовков файлов - см. основной код вопроса. Копирайт везде пишем на
меня, так технически удобнее под GPL, есть поле "авторы" для указания авторства...

3) Слить код обработки спец-символов единые методы для всех инструментов с четкими
названиями. Вот этот код можно разместить в статических функциях...
(Валерий - нам с вами подумать, оставить ли функции статическими или в каком классе
они должны быть динамическими? По хорошему эскейпинг для dot например нужен не только
инструментам авторинга - может в poasquestion вынести?)

Языковой файл
4) использование % вместо $a в // Strings for node description - зачем необходимо?
Для номеров, названий подмасок, чисел и подобных неизменяемых вещей точно нет. Да и
для остальных лучше использовать {$a->something} вместо %something - соответственно
уйдут str_replace из кода. $a - официальный способ подстановки одних строк в другие...

Если неясно про $a - спрашивайте...


explain_graph_misc.php
5) Почему функции qtype_preg_author_tool_explain_graph_subgraph статические? Функции
должны быть динамическими, если это возможно - т.е. если нет другого класса, которому
нужно вызывать такую функцию без объекта этого класса... иного оправдания статике нет.
explain_graph_nodes.php
6) сделать отдельные классы для разных видов листьев - вместо switch/if
7) Поддержка опций прямоугольниками (до ближайшей закрывающей скобки), подобно подмаскам
и квантификаторам - отображать опции, если они действуют на прямоугольники
8) process_charset должен иметь комментарии и юнит-тесты, и уж очень он сложный...
обсудить при встрече
9) qtype_preg_authoring_tool_operator_condsubexpr::process_operator содержит очень
странную конструкцию - условие с тремя вариантами типов, внутри switch по ним - логичнее
заменить обычным if ... else if ... else - 
10) switch/if и т.д. с одинаковым кодом, но разными параметрами - типа того, что в
qtype_preg_authoring_tool_operator_assert - лучше заменить на обращение по индексу
в массив... Такой массив можно сделать статическим в классе.
explain_graph_tool.php
11) get_engine_node_name - переделать с использованием node_infix, должна сильно уменьшиться
- сравните с тем, как сделали это два других инструмента
12) Почему функции - статические?! Переменные тем более... (не говоря уже о временной
переменной...) Сделать все динамическим!
13) Сложные функции типа process_asserts должны иметь комментарии по коду!
14) Подчеркивания в именах переменных process_asserts. 
15) основные функции - process_asserts и process_simple должны иметь юнит-тесты
16) Функции cmp_xxx перенести в файл юнит-тестирования. 
17) Юнит-тесты на граф и отдельные функции очень примитивны; мне надо разыскать вашу
программу и методику испытаний с КНПО или сами найдете?!
preg_authoring_tool.php
18) Должен включать в себя, наверное, все промежуточные классы: для инструмента с картинкой
(пока нет - хотя давно говорено!), dot-инструмент (где пока одно TODO...)
preg_description.php
19) Функции должны быть динамическими, если это возможно - т.е. если нет другого класса,
которому нужно вызывать такую функцию без объекта этого класса...
20) Перед многими открывающими фигурными скобками нет пробелов. И после запятых при
объявлении и вызове функций - тоже.
preg_explaining_tree_nodes.php
21) методы типа label() содержат слова - все слова для пользователя должны получаться
через get_string, чтобы быть переводимыми!

Владельцем ставлю пока себя для надзора.

Reported by oasychev on 2013-05-31 19:17:13

Comments (33)

  1. Oleg Sychev reporter
    Мне устно было сказано что часть этого исправлена, но напоминаю - отпишитесь здесь:
    "исправлены пунты 3-5, 7" например. Это несложно, но значительно облегчает мне проверку
    исправлений.
    

    Reported by oasychev on 2013-06-21 15:11:07

  2. Former user Account Deleted
    Работаю над пунктом 12. Мне бы хотелось узнать по поводу static функций. (static переменные
    я убрал) Находящиеся там функции удовлетворяют следующим критериям:
    1) нет упоминания $this;
    2) это служебные функции используемые ТОЛЬКО внутри класса (иными словами это private
    static), значит остальному коду это не мешает.
    
    Отсюда вопрос: в чём мотивы переделать их в динамические?
    

    Reported by ZluMYO on 2013-06-23 17:08:36

  3. Oleg Sychev reporter
    Сейчас ситуация в принципе намного лучше, там остались в статике хелпер-функции. Правда
    неясно, почему например get_dot_head и get_dot_tail относятся к узлам, а не классу
    графа в целом? Если их разместить там, можно будет вообще isroot убрать из контекста,
    мне кажется... Им явно не место в узлах, почему граф (или другой вызывающий код) не
    может добавить голову и хвост прежде вызовов узлов?.
    
    Насчет userinscription_to_string можно было бы ее сделать динамической и сделать внутри
    обработку различных вариантов $this->pregnode->userinscription - массив или  один элемент
    (можно через вторую функцию) - вы же передаете ей первым параметром всегда одно и тоже,
    причем из $this-> как раз.  
    
    И еще могу добавить замечание:
    22) в explain_graph_nodes.php те же проблемы, что и в замечании 21) - есть методы,
    которые содержат слова для пользователя - все в get_string!
    
    P.S. ВАЛЕРИЙ - а почему userinscription иногда массив, а иногда нет? Удобнее было бы
    создавать и обрабатывать его если он всегда массив, даже если из одного элемента...
    Или это у ребят устаревшие представления?
    

    Reported by oasychev on 2013-06-24 15:56:31

  4. Oleg Sychev reporter
    Встречаемся по планам разработки в среду 26 числа, время сообщу завтра - может уточниться...
    
    Попробуйте прикинуть, кто берет на себя какие из крупных задач - по некоторым я введу
    в курс дела...
    

    Reported by oasychev on 2013-06-24 15:57:55

  5. Valeriy Streltsov
    userinscription - массив только в случае сложного чарсета. В принципе согласен, давайте
    делать его всегда массивом - поправлю в ближайшее время.
    

    Reported by vostreltsov on 2013-06-24 16:05:32

  6. Oleg Sychev reporter
    Валерий, тогда отпишитесь здесь когда сделаете...
    

    Reported by oasychev on 2013-06-24 16:26:56

  7. Former user Account Deleted
    Осталось выполнить пункты 13 и 17.
    

    Reported by ZluMYO on 2013-06-26 05:34:41

  8. Oleg Sychev reporter
    preg_description_tool.php
    19 по статическим функциям Валерию посмотреть, какие перенести в класс юникода; остальные
    надо переводить в динамические по идее - Дмитрий, давайте встретимся и обсудим, если
    неясно куда их девать.
    

    Reported by oasychev on 2013-06-29 18:19:49

  9. Oleg Sychev reporter
    qtype_preg_description_leaf_assert
    23) qtype_preg_description_leaf_assert::pattern имеет проблемы - нельзя ориентироваться
    на один userinscription, т.к. работа ^ и $ зависит от модификаторов...
    

    Reported by oasychev on 2013-06-29 19:22:30

  10. Oleg Sychev reporter
    24) в графе сейчас не показывается большая часть вершин с символами - овалы пустые.
    Пример теста
    x\s*=\s*fn\s*\(\s*y\s*\[\s*10\s*\]\s*\)\s*;+\s*
    пробелы видно, а обычные символы - нет....
    
    25) все-таки работу сворачивания/разворачивания секций окна надо бы наладить, вдруг
    конкретному юзеру что-то не нужно... 
    
    26) кнопку cancel стоит разместить рядом с двумя остальными; может быть продублировать
    внизу - но тогда две - и save тоже; кнопку check я бы переименовал в show или что-то
    подобное...
    

    Reported by oasychev on 2013-07-02 11:12:59

  11. Oleg Sychev reporter
    1 PHPDoc комментарии
    preg_authoring_tool.php - нет комментариев к абстрактным функциям - хотя к чему к чему,
    а уж к ним то подробные описания быть должны - Валерий, вы эти функции писали?
    description - все хорошо
    preg_explaining_graph_misc.php - не хватает комментариев к конструкторам, а названия
    параметров там не интуитивные (кстати, сделайте их полными словами - они вполне могут
    совпадать с названиями полей, $this-> перед ними то нет...)
    preg_explaining_graph_nodes.php - process_operator - комментарий совершенно непонятный
    - что понимать под "обработкой (process)" - что в ней произойдет, что ожидать в результате
    это обработки?
    preg_explaining_graph_tool.php - с PHPDoc все нормально, но вот названия параметров
    методов - слишком короткие $nd - это шедевр просто; по guidelines должны быть в основном
    полные слова, если только не очень длинная фраза...
    2) с копирайтом все в порядке, а вот общий длинный заголовок пока не вставлен. Скопируйте
    из любого файла основного кода вопроса, а то codechecker на вас выругается...
    
    12)preg_explaining_graph_tool.php - осталась статика (assume_subgraph) - но я вообще
    не понимаю, почему функции обработки графов перекочевали в класс инструмента, а не
    графа? Все, что касается assume_subgraph, optimize_graph и т.д. должно перекочевать
    в класс графа и потерять первый параметр, который граф - вместо него будет $this
    

    Reported by oasychev on 2013-07-02 13:08:27

  12. Oleg Sychev reporter
    5) process_subgraph - должна принимать граф (подграф) как $this - избавление от статики
     не должно быть формальным! При этом часто первые (или самые главные) параметры и становятся
    объектами...
    6) готово
    7) сделано или нет?
    8) комментарии готовы, а вот тесты только на простые случаи - где тесты на комбинации?
    9) не понял смысла $isSimpleCondition - такое впечатление, что во всех трех условиях
    если ее убрать, то ничего не изменится...  И вообще, с чего это здесь и ниже у нас
    большие буквы в именах переменных и полей класс появились?!
    10) сделано, но опять же большие буквы в переменных
    11) сделано
    12) сделано формально, см. замечание в предыдущем комментарии; функции должны относится
    к нормальному классу и пользоваться $this для него, делаем дальше
    13) к концу process_asserts надоело комментировать, даже ветка else осталась без комментра;
    дописать
    также надо закомментировать большие, сложные функции в preg_explaining_graph_nodes.php
    14) подчеркиваний в этом файле не осталось, но появились большие буквы в именах переменных;
    но подчеркивания остались в preg_explaining_graph_nodes.php кое-где
    15) юнит-тесты где на эти функции? напишите конкретно?
    16) сделано
    17) не вижу - если сделали, отпишитесь, где искать...
    18, 19) - пока не вижу
    21) осталась надпись "Error" - если ее может увидеть пользователь при каких-то обстоятельствах,
    перевести как прочее; если нет - отпишитесь сюда об этом
    

    Reported by oasychev on 2013-07-02 13:45:56

  13. Oleg Sychev reporter
    И вообще, ребята, не забываем сюда писать по пунктам что сделали и какие есть вопросы
    - как и в других задачах. Иначе вы мне работу усложняете - разыскивать что вы пытались
    сделать, а что еще нет...
    
    27) всем поставить local_codecheker (ссылка на первой странице этого проекта) и исправить
    все его ошибки (кроме, возможно, неверных символов перевода строки) в своих файлах.
    Я в своем коде это уже сделал!
    Отписаться здесь всем четверым по этому пункту...
    

    Reported by oasychev on 2013-07-02 13:48:10

  14. Former user Account Deleted
    Я исправил почти всё, что нужно, но вытолкнуть не могу - Дмитрий не сделал 4 пункт.
    Как вы знаете, я беру от него строки в Lang файле. Вызовы get_string я поменял как
    нужно, но внутри lang файла всё ещё нет $a...
    

    Reported by fevt.60 on 2013-07-03 08:56:43

  15. Oleg Sychev reporter
    Вообще если е-мейл меняете - предствляйтесь, и как то решите, с каким участвуете в проекте
    - права то на него настраиваются.
    
    А что мешает поменять lang файл и прописать там $a?
    

    Reported by oasychev on 2013-07-03 09:28:28

  16. Former user Account Deleted
    4. Сначала я получаю строку, и, если она требует %rightborder, например, то ищу, как
    мне этот rightborder получить. $a требует совершенно обратного подхода - формирования
    всех возможных строк, которые могут понадобиться в описании, а затем подстановка в
    строку необходимых. Не вижу смысла изменять более простой работающий код подход на
    более сложный (и более медленный?).
    К тому же существующая система не даёт реализовать мультиязычные формы (падежи) - moodle
    требует одинаковый набор строк для каждого языка. Значит необходимо либо нетривиально
    использование get_string или переносить логику выбора строк и сами строки в отдельные
    файлы (вроде description_ru.php / description_eng.php).
    

    Reported by TOPT.iiiii on 2013-07-03 09:35:40

  17. Former user Account Deleted
    Ой, простите... не заметил, что с другого аккаунта. Ну собственно вот Дима объясняет.
    

    Reported by ZluMYO on 2013-07-03 10:11:07

  18. Oleg Sychev reporter
    Кто-нибудь кнопку вызова вашей окна может выровнять вертикально посередине textarea?
    А то болтаясь внизу оно выглядит некрасиво...
    

    Reported by oasychev on 2013-07-03 16:25:57

  19. Oleg Sychev reporter
    4 насчет сбора строки я подумаю, но как минимум начать нужно с того, что вместо str_replace
    использовать что-нибудь юникод-безопасное, строка то не обязательно по английски будет...
    

    Reported by oasychev on 2013-07-03 16:29:29

  20. Oleg Sychev reporter
    28)я когда-нибудь научу вас использовать get_string?! опять когда вводили переключение
    между режимами чарсетов, забили строки пользователя прямо в код - исправляйте...
    
    И вообще, что за мода на форме для контролей использовать html как элемент? Он не затем
    нужен. Ну сделайте select вместо радиобатннов.
    
    29) кнопка вызова формы (шестеренка) должна быть вертикально выровнена посередине поля
    для регекса, независимо от его количества строк.
    

    Reported by oasychev on 2013-07-04 11:09:17

  21. Oleg Sychev reporter
    4 я не понимаю, в чем проблема. В каждом классе узла у вас есть определенные параметры
    - они четко известны и все используются в строках, как они могут игнорироваться? Если
    это конечный квантификатор, в нем будет rightborder, если что-то другое - такого поля
    нет. Я бы в классах узлов сделал функцию get_dollar_a или что-нибудь в этом роде, который
    бы заполнял всеми необходимыми для нужного типа полями - и все...
    

    Reported by oasychev on 2013-07-04 13:34:00

  22. Oleg Sychev reporter
    Иванов, ну мы теперь увидим ваш код, который вы не могли вытолкнуть?
    

    Reported by oasychev on 2013-07-09 12:01:55

  23. Former user Account Deleted
    Всё вытолкнуто ещё сутки назад. Прощу прощения, что не отписался.
    

    Reported by ZluMYO on 2013-07-10 10:28:56

  24. Oleg Sychev reporter
    Иванову
    7 пока не сделано - опции не сводятся к регистрочуствительности, сейчас поддерживаются
    опции, управляющие поведением ассертов начала/конца строки, расширенным режимом ввода
    регулярных выражений и еще несколько
    8 - добавить тесты на комбинации в чарсете нескольких элементов для process_charset
    9 Иванов, почему не отвечаете на вопрос в 12-м комментарии?
    10 и 14 когда будут исправлены большие буквы и вообще все проверено local_codechecker
    в ваших файлах, Иванов?
    13 докомментируйте process_asserts так же тщательно, как начали
    15 сделано
    17 - жду
    
    Пахомов
    19 - когда будем избавляться от статики? Напишите, какие функции вы не видите возможностей
    избавиться от статики
    та же check_options ухитряется быть статической в классе узла и получать узел первым
    параметром - чего он не $this?
    и т.д.
    21 - в ошибке 'Operands' в самом конце файла опять вписано без get_string, проверьте
    весь (!!!) файл внимательно... 
    

    Reported by oasychev on 2013-07-15 19:55:46

  25. Oleg Sychev reporter
    И вообще, господа, что-то я несколько дней не вижу прогресса. Что происходит? Мы будем
    включать ваш код в релиз или отложим на полгода?
    
    Валерий уехал, поэтому временно принимается следующая схема работы: Пахомов вытягивает
    мои изменения и изменения Терехова/Иванова, сливает - я вытягиваю у него; все остальные
    вытягивают у меня. Если есть мнение что нужен другой человек на эту роль - пишите...
    

    Reported by oasychev on 2013-07-15 19:57:28

  26. Former user Account Deleted
    Теперь все мои файлы не содержат ошибок Code Checker'а.
    9) И правда. Похоже это рудимент.
    

    Reported by ZluMYO on 2013-07-18 12:37:24

  27. Oleg Sychev reporter
    Иванов, когда убираете подчеркивания иногда полезнее расшифровать одну букву. т.е. не
    neighborl а leftneighbor - так заметнее и грамотнее.
    
    Остальные замечания по этому issue вроде исправлены - ждем исправлений статики от Пахомова...
    

    Reported by oasychev on 2013-07-22 13:02:05

  28. Oleg Sychev reporter
    30) Терехов - в файлах инструмента тестирования встречаются табуляции! Откуда взялись?
    Настройте свой редактор и поправьте...
    И я все-таки хотел увидеть textarea с возможностью ввести несколько строк пользователю
    для тестирования, по одной строке очень неуднобно!
    

    Reported by oasychev on 2013-07-22 13:09:56

  29. Former user Account Deleted
    статики убрал, оставил статики в функциях is_chr_printable, describe_nonprinting, describe_chr
    которые может быть кто-нибудь (вдруг) захочет использовать в своих инструментах
    

    Reported by TOPT.iiiii on 2013-07-22 17:45:31

  30. Oleg Sychev reporter
    А qtype_preg_description_leaf_options::check_options почему статиком осталась? Ее первый
    параметр - явный кандидат на $this
    

    Reported by oasychev on 2013-07-23 12:43:31

  31. Oleg Sychev reporter
    Иванов - почему пределы квантификаторов как они выводятся на граф - строки у вас до
    сих пор захардкодены, а не используют get_string? Притом что в описании они лучше (в
    частности более грамотно объясняют разные особые ситуации) и переведены на русский
    язык? Исправляйте уже побыстрее... preg_explaining_graph_nodes.php строки 539 и далее...
    

    Reported by oasychev on 2013-09-15 17:03:54

  32. Oleg Sychev reporter
    Последующие задачи будут формулироваться уже на следующий релиз...
    

    Reported by oasychev on 2013-10-18 15:22:47 - Status changed: Done

  33. Log in to comment