;; sloc.el -- LOC utilities

;;;###autoload
(defun count-sloc-region (beg end kind)
  "Count source lines of code in region (or (narrowed part of)
   the buffer when no region is active).  SLOC means that empty
   lines and comment-only lines are not taken into consideration.

   (function by Stefan Monnier).
  "
  (interactive
   (if (use-region-p)
       (list (region-beginning) (region-end) 'region)
     (list (point-min) (point-max) 'buffer)))
  (save-excursion
    (goto-char beg)
    (let ((count 0))
      (while (< (point) end)
        (cond
         ((nth 4 (syntax-ppss)) ;; BOL is already inside a comment.
          (let ((pos (point)))
            (goto-char (nth 8 (syntax-ppss)))
            (forward-comment (point-max))
            (if (< (point) pos) (goto-char pos)))) ;; Just paranoia
         (t (forward-comment (point-max))))
        (setq count (1+ count))
        (forward-line))
      (when kind
        (message "SLOC in %s: %s." kind count)))))


(provide 'jao-sloc)
;;; sloc.el ends here
