Skip to content

Instantly share code, notes, and snippets.

@youz
Last active August 29, 2015 14:02
Show Gist options
  • Save youz/393ef2b31893dad7332d to your computer and use it in GitHub Desktop.
Save youz/393ef2b31893dad7332d to your computer and use it in GitHub Desktop.
swift-mode for #xyzzy
;; keyword file for Swift
;; Keywords used in declarations:
;*0
class
deinit
enum
extension
func
import
init
let
protocol
static
struct
subscript
typealias
var
;;Keywords used in statements:
;*1
break
case
continue
default
do
else
fallthrough
if
in
for
return
switch
where
while
;;Keywords used in expressions and types:
as
dynamicType
is
new
super
self
Self
Type
__COLUMN__
__FILE__
__FUNCTION__
__LINE__
;;Keywords reserved in particular contexts:
;*2
associativity
didSet
get
infix
inout
left
mutating
none
nonmutating
operator
override
postfix
precedence
prefix
right
set
unowned
safe
unsafe
weak
willSet
;; symbolic notations
->
;; Types
Character
String
Int
Float
Double
Optional
ImplicitlyUnwrappedOptional
;;; -*- mode:lisp; package:swift-mode -*-
(eval-when (:compile-toplevel :load-toplevel :execute)
(require "go-mode"))
(defpackage :swift-mode
(:use :lisp :ed)
(:export
#:*keymap*
#:*hook*
#:*tab-width*
#:*keyword-file*))
(in-package :swift-mode)
(defvar *hook* nil)
(defparameter *keymap* nil)
(defparameter *syntax-table* nil)
(defparameter *tab-width* 4)
(defvar *keyword-file* "Swift")
(defvar *keyword-hash-table* nil)
(defun init-keymap ()
(unless *keymap*
(setq *keymap* (make-sparse-keymap))
(define-key *keymap* #\RET 'ed::go-mode-newline-and-indent))
*keymap*)
(defun init-syntax-table ()
(unless *syntax-table*
(setq *syntax-table* (make-syntax-table))
(copy-syntax-table ed::*c-mode-syntax-table* *syntax-table*)
(set-syntax-symbol *syntax-table* #\@)
)
*syntax-table*)
;; (defun swift-newline-and-indent (&optional (arg 1))
;; (interactive "*p")
;; (newline-and-indent arg))
(defun ed::swift-mode ()
"Major mode for editing Apple Swift Language."
(interactive)
(kill-all-local-variables)
(setq ed:mode-name "Swift"
ed:buffer-mode 'ed::swift-mode)
(use-syntax-table (init-syntax-table))
(make-local-variable 'ed:regexp-keyword-list)
;(setq regexp-keyword-list (gen-regexp-keyword-list))
(when (or *keyword-hash-table*
(and *keyword-file*
(setq *keyword-hash-table*
(load-keyword-file *keyword-file*))))
(make-local-variable 'ed:keyword-hash-table)
(setq ed:keyword-hash-table *keyword-hash-table*))
;; Indentation
(setq ed:mode-specific-indent-command #'ed::go-mode-indent-line)
;; list-function
;(make-local-variable 'ed::build-summary-function)
;(setq ed::build-summary-function 'list-functions)
(make-local-variable 'ed:indent-tabs-mode)
(setq ed:indent-tabs-mode nil)
(use-keymap (init-keymap))
;(set-tab-columns *tab-width*)
(run-hooks '*hook*)
)
(export '(ed::swift-mode) :ed)
(provide "swift-mode")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment