<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: flymake code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 07 Sep 2008 07:19:09 GMT</pubDate>
    <description>DZone Snippets: flymake code</description>
    <item>
      <title>scala extensions for emacs</title>
      <link>http://snippets.dzone.com/posts/show/5013</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;(require 'scala-mode)&lt;br /&gt;(require 'compile)&lt;br /&gt;(require 'flymake)&lt;br /&gt;(require 'font-lock)&lt;br /&gt;&lt;br /&gt;(defvar scala-build-commad nil)&lt;br /&gt;(make-variable-buffer-local 'scala-build-command)&lt;br /&gt;&lt;br /&gt;(add-hook 'scala-mode-hook&lt;br /&gt;          (lambda ()&lt;br /&gt;	    (flymake-mode-on)&lt;br /&gt;	    ))&lt;br /&gt;&lt;br /&gt;(defun flymake-scala-init ()&lt;br /&gt;  (let* ((text-of-first-line (buffer-substring-no-properties (point-min) (min 20 (point-max)))))&lt;br /&gt;    (progn&lt;br /&gt;      (remove-hook 'after-save-hook 'flymake-after-save-hook t)&lt;br /&gt;      (save-buffer)&lt;br /&gt;      (add-hook 'after-save-hook 'flymake-after-save-hook nil t)&lt;br /&gt;      (if (string-match "^//script" text-of-first-line)&lt;br /&gt;	  (list "fsc" (list "-Xscript" "MainScript" "-d" "c:/tmp" buffer-file-name))&lt;br /&gt;	(or scala-build-command (list "fsc" (list "-d" "c:/tmp" buffer-file-name))))&lt;br /&gt;      )))&lt;br /&gt;&lt;br /&gt;(push '(".+\\.scala$" flymake-scala-init) flymake-allowed-file-name-masks)&lt;br /&gt;(push '("^\\(.*\\):\\([0-9]+\\): error: \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns)&lt;br /&gt;&lt;br /&gt;(set (make-local-variable 'indent-line-function) 'scala-indent-line)&lt;br /&gt;&lt;br /&gt;(defun scala-indent-line ()&lt;br /&gt;  "Indent current line of Scala code."&lt;br /&gt;  (interactive)&lt;br /&gt;  (indent-line-to (max 0 (scala-calculate-indentation))))&lt;br /&gt;&lt;br /&gt;(defun scala-calculate-indentation ()&lt;br /&gt;  "Return the column to which the current line should be indented."&lt;br /&gt;  (save-excursion&lt;br /&gt;    (scala-maybe-skip-leading-close-delim)&lt;br /&gt;    (let ((pos (point)))&lt;br /&gt;      (beginning-of-line)&lt;br /&gt;      (if (not (search-backward-regexp "[^\n\t\r ]" 1 0))&lt;br /&gt;	  0&lt;br /&gt;	(progn&lt;br /&gt;	  (scala-maybe-skip-leading-close-delim)&lt;br /&gt;	  (+ (current-indentation) (* 2 (scala-count-scope-depth (point) pos))))))))&lt;br /&gt;&lt;br /&gt;(defun scala-maybe-skip-leading-close-delim ()&lt;br /&gt;  (beginning-of-line)&lt;br /&gt;  (forward-to-indentation 0)&lt;br /&gt;  (if (looking-at "\\s)")&lt;br /&gt;      (forward-char)&lt;br /&gt;    (beginning-of-line)))&lt;br /&gt;&lt;br /&gt;(defun scala-face-at-point (pos)&lt;br /&gt;  "Return face descriptor for char at point."&lt;br /&gt;  (plist-get (text-properties-at pos) 'face))&lt;br /&gt;&lt;br /&gt;(defun scala-count-scope-depth (rstart rend)&lt;br /&gt;  "Return difference between open and close scope delimeters."&lt;br /&gt;  (save-excursion&lt;br /&gt;    (goto-char rstart)&lt;br /&gt;    (let ((open-count 0)&lt;br /&gt;	  (close-count 0)&lt;br /&gt;	  opoint)&lt;br /&gt;      (while (and (&lt; (point) rend)&lt;br /&gt;		  (progn (setq opoint (point))&lt;br /&gt;			 (re-search-forward "\\s)\\|\\s(" rend t)))&lt;br /&gt;	(if (= opoint (point))&lt;br /&gt;	    (forward-char 1)&lt;br /&gt;	  (cond&lt;br /&gt;&lt;br /&gt;            ;; Use font-lock-mode to ignore strings and comments&lt;br /&gt;	   ((scala-face-at-point (- (point) 1))) &lt;br /&gt;&lt;br /&gt;	   ((looking-back "\\s)")&lt;br /&gt;	    (incf close-count))&lt;br /&gt;	   ((looking-back "\\s(")&lt;br /&gt;	    (incf open-count))&lt;br /&gt;	   )))&lt;br /&gt;      (- open-count close-count))))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(provide 'scala-extensions)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 20 Jan 2008 02:26:36 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5013</guid>
      <author>aemon (Aemon Cannon)</author>
    </item>
  </channel>
</rss>
