gh-ypresto-SwiftLintXcode/SwiftLintXcode/SwiftLintXcode.swift
2016-04-06 12:41:53 +09:00

89 lines
2.7 KiB
Swift
Executable file

//
// SwiftLintXcode.swift
//
// Created by yuya.tanaka on 2016/04/04.
// Copyright (c) 2016 Yuya Tanaka. All rights reserved.
//
import AppKit
var sharedPlugin: SwiftLintXcode?
class SwiftLintXcode: NSObject {
var bundle: NSBundle
lazy var center = NSNotificationCenter.defaultCenter()
var enableMenuItem: NSMenuItem!
var disableMenuItem: NSMenuItem!
init(bundle: NSBundle) {
self.bundle = bundle
super.init()
center.addObserver(self, selector: #selector(SwiftLintXcode.onApplicationDidFinishLaunching), name: NSApplicationDidFinishLaunchingNotification, object: nil)
}
deinit {
removeObserver()
}
private func removeObserver() {
center.removeObserver(self)
}
func onApplicationDidFinishLaunching() {
SaveHook.swizzle()
createMenuItems()
}
private func createMenuItems() {
removeObserver()
guard let item = NSApp.mainMenu!.itemWithTitle("Edit") else { return }
let pluginMenu = NSMenu(title:"SwiftLintXcode")
let pluginMenuItem = NSMenuItem(title:"SwiftLintXcode", action: nil, keyEquivalent: "")
pluginMenuItem.submenu = pluginMenu
let autoCorrectMenuItem = NSMenuItem(title:"AutoCorrect Current File", action:#selector(SwiftLintXcode.doAutoCorrect), keyEquivalent:"")
autoCorrectMenuItem.target = self
pluginMenu.addItem(autoCorrectMenuItem)
let enableMenuItem = NSMenuItem(title:"Enable AutoCorrect on Save", action:#selector(SwiftLintXcode.doEnableFormatOnSave), keyEquivalent:"")
enableMenuItem.target = self
pluginMenu.addItem(enableMenuItem)
self.enableMenuItem = enableMenuItem
let disableMenuItem = NSMenuItem(title:"Disable AutoCorrect on Save", action:#selector(SwiftLintXcode.doDisableFormatOnSave), keyEquivalent:"")
disableMenuItem.target = self
pluginMenu.addItem(disableMenuItem)
self.disableMenuItem = disableMenuItem
item.submenu!.addItem(NSMenuItem.separatorItem())
item.submenu!.addItem(pluginMenuItem)
updateMenuVisibility()
}
func doAutoCorrect() {
let sourceCodeDocument: IDESourceCodeDocument = SwiftLintXcodeTRVSXcode.sourceCodeDocument()
guard Formatter.isFormattableDocument(sourceCodeDocument) else { return }
Formatter.sharedInstance.tryFormatDocument(sourceCodeDocument)
}
func doEnableFormatOnSave() {
SaveHook.enabled = true
updateMenuVisibility()
}
func doDisableFormatOnSave() {
SaveHook.enabled = false
updateMenuVisibility()
}
func updateMenuVisibility() {
self.enableMenuItem.hidden = SaveHook.enabled
self.disableMenuItem.hidden = !SaveHook.enabled
}
}