code: function parseOptions (type, options, defaultOptions) {
    const ret = Object.assign({
      indentChar: ' ',
      indentSize: 2,
      baseIndent: 0,
      attribute: 1,
      closeBracket: 0,
      switchCase: 0,
      alignAttributesVertically: true,
      ignores: []
    }, defaultOptions)
  
    if (Number.isSafeInteger(type)) {
      ret.indentSize = type
    } else if (type === 'tab') {
      ret.indentChar = '\t'
      ret.indentSize = 1
    }
  
    if (Number.isSafeInteger(options.baseIndent)) {
      ret.baseIndent = options.baseIndent
    }
    if (Number.isSafeInteger(options.attribute)) {
      ret.attribute = options.attribute
    }
    if (Number.isSafeInteger(options.closeBracket)) {
      ret.closeBracket = options.closeBracket
    }
    if (Number.isSafeInteger(options.switchCase)) {
      ret.switchCase = options.switchCase
    }
  
    if (options.alignAttributesVertically != null) {
      ret.alignAttributesVertically = options.alignAttributesVertically
    }
    if (options.ignores != null) {
      ret.ignores = options.ignores
    }
  
    return ret
  }
docs: Normalize options.
  @param {number|"tab"|undefined} type The type of indentation.
  @param {Object} options Other options.
  @param {Object} defaultOptions The default value of options.
  @returns {{indentChar:" "|"\t",indentSize:number,baseIndent:number,attribute:number,closeBracket:number,switchCase:number,alignAttributesVertically:boolean,ignores:string[]}} Normalized options.