Skip to content

Commit

Permalink
Restore the settings to the initial value if they were set before
Browse files Browse the repository at this point in the history
  • Loading branch information
Tom-Bonnike committed Feb 7, 2018
1 parent d7e924d commit e087f97
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 21 deletions.
4 changes: 2 additions & 2 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ export const FORMATTING_SETTINGS = [
'formatOnSave',
'formatOnType'
]
export const ENABLE_TEXT = '$(x) Formatting disabled'
export const DISABLE_TEXT = '$(check) Formatting enabled'
export const ENABLED_TEXT = '$(check) Formatting'
export const DISABLED_TEXT = '$(x) Formatting'
16 changes: 10 additions & 6 deletions src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import {
workspace,
window,
ExtensionContext
} from 'vscode'
import { workspace, window, ExtensionContext } from 'vscode'
import { get } from 'lodash'
import getInitialFormattingConfiguration from './helpers/getInitialFormattingConfiguration'
import initCommand from './helpers/initCommand'
import initStatusBar from './helpers/initStatusBar'

Expand All @@ -12,8 +9,15 @@ export function activate(extensionContext: ExtensionContext) {
'editor',
get(window, 'activeTextEditor.document.uri')
)
const initialFormattingConfiguration = getInitialFormattingConfiguration(
editorConfiguration
)
const statusBar = initStatusBar()
const command = initCommand(editorConfiguration, statusBar)
const command = initCommand(
editorConfiguration,
initialFormattingConfiguration,
statusBar
)

extensionContext.subscriptions.push(statusBar)
extensionContext.subscriptions.push(command)
Expand Down
29 changes: 29 additions & 0 deletions src/helpers/getInitialFormattingConfiguration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { WorkspaceConfiguration } from 'vscode'
import { FORMATTING_SETTINGS } from '../constants'

export type FormattingConfiguration = {
[formatOnPaste: string]: boolean
formatOnSave: boolean
formatOnType: boolean
}

const getInitialFormattingConfiguration = (
editorConfiguration: WorkspaceConfiguration
): FormattingConfiguration => {
const initialFormattingConfiguration: FormattingConfiguration = FORMATTING_SETTINGS.reduce(
(configuration, setting) => {
const initialSetting = editorConfiguration.get(setting, undefined)

if (typeof initialSetting !== 'undefined') {
configuration[setting] = initialSetting
}

return configuration
},
{} as FormattingConfiguration
)

return initialFormattingConfiguration
}

export default getInitialFormattingConfiguration
37 changes: 26 additions & 11 deletions src/helpers/initCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,46 @@ import {
import {
COMMAND_NAME,
FORMATTING_SETTINGS,
ENABLE_TEXT,
DISABLE_TEXT
ENABLED_TEXT,
DISABLED_TEXT
} from '../constants'
import { FormattingConfiguration } from './getInitialFormattingConfiguration'

const CONFIGURATION_TARGET = ConfigurationTarget.Global
const initCommand = (
editorConfiguration: WorkspaceConfiguration,
initialFormattingConfiguration: FormattingConfiguration,
statusBar: StatusBarItem
) : Disposable => {
let toggle = false
): Disposable => {
let shouldDisable = true

return commands.registerCommand(`extension.${COMMAND_NAME}`, () => {
FORMATTING_SETTINGS.forEach(key => {
if (!toggle) {
editorConfiguration.update(key, undefined, CONFIGURATION_TARGET)
statusBar.text = ENABLE_TEXT
FORMATTING_SETTINGS.forEach(setting => {
const hasInitialValue =
typeof initialFormattingConfiguration[setting] !== 'undefined'

if (shouldDisable) {
editorConfiguration.update(
setting,
// Only set to `false` if it had an initial value, to not mess up the
// user’s config. Setting to `undefined` would remove the setting from
// the config.
hasInitialValue ? false : undefined,
CONFIGURATION_TARGET
)

return
}

editorConfiguration.update(key, true, CONFIGURATION_TARGET)
statusBar.text = DISABLE_TEXT
// Set the formatting back to the initial configuration, only if it had
// an initial value. All formatting settings default to `false`.
if (hasInitialValue) {
editorConfiguration.update(setting, true, CONFIGURATION_TARGET)
}
})

toggle = !toggle
statusBar.text = shouldDisable ? DISABLED_TEXT : ENABLED_TEXT
shouldDisable = !shouldDisable
})
}

Expand Down
4 changes: 2 additions & 2 deletions src/helpers/initStatusBar.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { window, StatusBarAlignment, StatusBarItem } from 'vscode'
import { COMMAND_NAME, DISABLE_TEXT } from '../constants'
import { COMMAND_NAME, ENABLED_TEXT } from '../constants'

const initStatusBar = (): StatusBarItem => {
// `-1` matches the Prettier extension’s status bar priority.
const statusBar = window.createStatusBarItem(StatusBarAlignment.Right, -1)
statusBar.command = `extension.${COMMAND_NAME}`
statusBar.tooltip = 'Enable/Disable formatting'
statusBar.text = DISABLE_TEXT
statusBar.text = ENABLED_TEXT
statusBar.show()

return statusBar
Expand Down

0 comments on commit e087f97

Please sign in to comment.