1. JavaScript / Говнокод #10546

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    ISQ.Widget.Query.keyUpHandler=function(c){
        var b=c||window.event;
        if(!ISQ.Widget.userActive){
    	return
        }
        if(typeof(b.keyCode)!="unknown"&&ISQ.Widget.Query.ignoreKeyCodes[b.keyCode]){
    	return false
        }
        if(ISQ.Cnf.limited&&ISQ.Widget.state!==ISQ.Widget.enumState.contactForm){
    	return false
        }
        if(ISQ.Widget.state===ISQ.Widget.enumState.customLink){
    	ISQ.Widget.state=ISQ.Widget.enumState.questions
        }
        ISQ.Widget.Query.clearQuestionTrail();
        var a=_query(false);
        if(ISQ.Widget.Query.lastQueryWritten!=a){
    	ISQ.Widget.Query.analyzeQuery(a)
        }
        return false
    };

    По поводу уверенных программистов (явно задел на будущее, а вдруг добаят).

    Запостил: wvxvw, 04 Июня 2012

    Комментарии (16) RSS

    • Где здесь говнокод?
      Ответить
      • Ну, тут сложно сказать где его нету. Но именно эта функция заслужила быть здесь тем, что автор наивно полагал, что, возможно, в обозримом будущем в Яваскрипт добавят новый тип (их всего-то по пальцам одной руки пересчитать можно). А именно, смотрите на то, что в коде выделено красным цветом (если у вас ЖС подсветка включена).
        Ответить
    • Какими же ссаными простынями выглядят тонны кода без пробелов вокруг операторов сравнений, присваивания и математических операций.
      Ответить
      • Хоть отступы расставили, и то радость.
        Ответить
      • (defun js-fix-spacing-line ()
          (interactive)
          (let ((current (char-after))
        	(next (char-after 1))
        	(old-point (point))
        	(difference 0))
            (labels
        	((incf-dif
        	  ()
        	  (when (< 0 (+ difference (- old-point (point))))
        	    (incf difference))
        	  (message "insterting")
        	  (insert " "))
        	 (js-face
        	  (&optional (pos (point)))
        	  (get-char-property pos 'face)))
              (beginning-of-line)
              (while (not (eolp))
        	(setf current (char-after (1- (point)))
        	      next (char-after))
        	(cond
        	 ((or (char-equal current ?\ )
        	      (char-equal current ?\t)
        	      (char-equal next ?\ )
        	      (char-equal next ?\t)))
        	 ((equal (js-face) 'font-lock-string-face))
        	 ((equal (js-face) 'font-lock-comment-face))
        	 ((and (equal (js-face (1- (point))) 'font-lock-keyword-face)
        	       (not (equal (js-face)
        			   'font-lock-keyword-face))
        	       (not (position current " \t")))
        	  (incf-dif))
        	 ((position next "=/|&%?><*^:{}")
        	  (unless (position current "=!&|*+-^><")
        	    (incf-dif)))
        	 ((position current "?:,{};,")
        	  (incf-dif))
        	 ((char-equal current ?=)
        	  (unless (position next "=")
        	    (incf-dif)))
        	 ((position current "<>&|*/%^")
        	  (unless (and (char-equal next ?=)
        		       (and (char-equal current ?&)
        			    (char-equal next ?&))
        		       (and (char-equal current ?|)
        			    (char-equal next ?|)))
        	    (incf-dif)))
        	 ((position next "!~")
        	  (unless (position current "([")
        	    (incf-dif)))
        	 ((char-equal next ?+)
        	  (cond
        	   ((char-equal current ?+))
        	   ((position current ";=/&%?><*:,{}[]-")
        	    (incf-dif))))
        	 ((char-equal next ?-)
        	  (cond
        	   ((char-equal current ?-))
        	   ((position current ";=/&%?><*:,{}[]+")
        	    (incf-dif))))
        	 ((char-equal current ?+)
        	  (unless (position (char-before 1) "+;=/&%?><*:,{}[]")
        	    (incf-dif)))
        	 ((char-equal current ?-)
        	  (unless (position (char-before 1) "-;=/&%?><*:,{}[]")
        	    (incf-dif))))
        	(forward-char)))
            (goto-char (+ old-point difference))))


        Но нужны добровольцы тестеры, хотя на первый взгляд работает.
        Ответить
        • Есть подозрение, что на C будет читабельнее и быстрее.
          Ответить
          • Дописывать биндинги к Яваскрипт моду на Си? Весь же смысл в том, чтобы еЛисп для этого использовать.
            Быстрее - вы все равно не догоните, ето ж команда которая выполняется по нажатию клавиш, т.е. через гуй - вы так быстро не успеете понажимать :)
            Ответить
          • То, что написано на C, сложнее использовать в emacs.
            С другой стороны, императивный код на lisp превращается в настолько унылое говно, что проще всё выбросить и написать на python (если нужен плагин для текстового редактора, можно взять sublime text 2).
            Я бы тупо прогнал проект через GNU indent, либо отформатировал в Eclipse (там вроде довольно тонкая настройка идентации).
            Ответить
            • Да, я уже понял. Просто я изначально воспринял это не как плагин к эдитору, а как самостоятельный скрипт, которым можно прогнать нужные исходники, а затем уже читать в божеском виде. Естественно, самостоятельная тулза будет гораздо лучше на C чем на eLisp и вообще на лиспе.

              Соответственно, можно некими настройками такой программы подобрать под свой стиль метод табуляции, использование спейсов и т.д.)
              Ответить
              • Да есть уже такая программа, indent называется. Для полноценного pretty-printing желательно иметь AST, и тут и сишки мало преимуществ перед лиспом. С другой стороны, стандартный CL настолько дремуч, что не может даже читать аргументы командной строки способом, не зависящим от компилятора.
                Ответить
                • И я бы убил столько же времени настраивая какую-то другую программу, сколько потратил на написание хука, с той разницей, что настраивать чужое - буэ, а свое - интересно.
                  Ответить
                  • Ну-ну, дебажьте дальше. У меня лично есть занятия поинтересней, чем писать очередной идентатор.
                    Ответить
                    • http://pastebin.com/1fMaDAzN
                      Вот, собственно, вроде теперь все учел. Потратил 4 часа, сэкономил может быть солько же на нанастраивании "индентатора", ну и соотвественно, условия труда улучшились :)
                      Ответить
        • ОК, уже нашлось пару багов, но пока не буду обновлять, ближе к концу дня наверное еще найдется.
          Ответить
    • показать все, что скрытоВсем минусы! Всем добра!
      Ответить

    Добавить комментарий