Added logLevel setting

Added quick linux version of fromFileURI
This commit is contained in:
Noah Santschi-Cooney 2019-10-06 18:20:35 +01:00
parent b8acc6837e
commit d7d8f9de96
6 changed files with 90 additions and 95 deletions

View file

@ -55,6 +55,12 @@
"type": "string", "type": "string",
"default": "", "default": "",
"description": "Absolute path to your Minecraft's shaderpacks folder." "description": "Absolute path to your Minecraft's shaderpacks folder."
},
"mcglsl.logLevel": {
"type": "string",
"default": "info",
"description": "Verbosity of output logging.",
"enum": ["debug", "info", "warn", "error"]
} }
} }
} }

View file

@ -357,7 +357,7 @@ export const completions: CompletionItem[] = [
} }
] ]
for (let i = 1; i < completions.length + 1; i++) { for (let i = 0; i < completions.length; i++) {
completions[i - 1].data = i completions[i].data = i
completions[i - 1].kind = value completions[i].kind = value
} }

View file

@ -1,7 +1,7 @@
import { dirname } from 'path' import { dirname } from 'path'
import { DidChangeConfigurationParams } from 'vscode-languageserver' import { DidChangeConfigurationParams } from 'vscode-languageserver'
import { GLSLangProvider } from './glslangValidator' import { GLSLangProvider } from './glslangValidator'
import { serverLog as log } from './logging' import { configLog as log, loggers } from './logging'
import { connection } from './server' import { connection } from './server'
const url = { const url = {
@ -12,25 +12,22 @@ const url = {
export let glslangReady = false export let glslangReady = false
// Maps the JSON settings from VSCode to an object
interface Config {
shaderpacksPath: string
glslangValidatorPath: string
logLevel: 'error' | 'warn' | 'info' | 'debug'
}
export class ConfigProvider { export class ConfigProvider {
private _config: Config private _config: Config
private _onChange: (settings: Config) => void
private _glslang: GLSLangProvider private _glslang: GLSLangProvider
public constructor(func?: (confProv: ConfigProvider, settings: Config) => void) { public constructor() {
this._config = { this._config = {
shaderpacksPath: '', shaderpacksPath: '',
glslangValidatorPath: '' glslangValidatorPath: '',
} logLevel: 'info'
if (!func) {
this._onChange = (settings: Config) => {
onConfigChange(this, settings)
}
} else {
this._onChange = (settings: Config) => {
func(this, settings)
}
} }
} }
@ -42,14 +39,8 @@ export class ConfigProvider {
return this._config return this._config
} }
public set onChange(func: (confProv: ConfigProvider, settings: Config) => void) {
this._onChange = (settings: Config) => {
func(this, settings)
}
}
public onConfigChange = (change: DidChangeConfigurationParams) => { public onConfigChange = (change: DidChangeConfigurationParams) => {
this._onChange(change.settings.mcglsl as Config) onConfigChange(this, change.settings.mcglsl as Config)
} }
public set glslang(glslang: GLSLangProvider) { public set glslang(glslang: GLSLangProvider) {
@ -61,22 +52,24 @@ export class ConfigProvider {
} }
} }
interface Config {
shaderpacksPath: string
glslangValidatorPath: string
}
let supress = false let supress = false
async function onConfigChange(confProv: ConfigProvider, old: Config) { async function onConfigChange(confProv: ConfigProvider, current: Config) {
if (!confProv.config == undefined && if (!confProv.config == undefined &&
old.shaderpacksPath === confProv.config.shaderpacksPath && current.shaderpacksPath === confProv.config.shaderpacksPath &&
old.glslangValidatorPath === confProv.config.glslangValidatorPath) return current.glslangValidatorPath === confProv.config.glslangValidatorPath &&
current.logLevel === confProv.config.logLevel) return
confProv.config = {shaderpacksPath: old['shaderpacksPath'], glslangValidatorPath: old['glslangValidatorPath']} log.debug('new config: ' + JSON.stringify(current, Object.keys(current).sort()))
log.debug('new config: ' + JSON.stringify(old)) log.debug('old config: ' + JSON.stringify(confProv.config || {}, Object.keys(confProv.config).sort()))
log.debug('old config: ' + JSON.stringify(confProv.config)) confProv.config = {
shaderpacksPath: current['shaderpacksPath'],
glslangValidatorPath: current['glslangValidatorPath'],
logLevel: current['logLevel'],
}
// handle config.shaderpacksPath
{
if (confProv.config.shaderpacksPath === '' || confProv.config.shaderpacksPath.replace(dirname(confProv.config.shaderpacksPath), '') !== '/shaderpacks') { if (confProv.config.shaderpacksPath === '' || confProv.config.shaderpacksPath.replace(dirname(confProv.config.shaderpacksPath), '') !== '/shaderpacks') {
if (supress) return if (supress) return
@ -90,10 +83,21 @@ async function onConfigChange(confProv: ConfigProvider, old: Config) {
supress = (clicked && clicked.title === 'Supress') ? true : false supress = (clicked && clicked.title === 'Supress') ? true : false
return return
} }
}
// handle config.logLevel
{
for(let logger of loggers) {
logger.level = current.logLevel
}
}
// handle config.glslang
{
if (!confProv.glslang.testExecutable()) { if (!confProv.glslang.testExecutable()) {
await confProv.glslang.promptDownload() await confProv.glslang.promptDownload()
} else { } else {
glslangReady = true glslangReady = true
} }
} }
}

View file

@ -48,6 +48,7 @@ export class GLSLangProvider {
const response = await fetch(url[platform()]) const response = await fetch(url[platform()])
log.warn('glslangValidator download response status: ' + response.status ) log.warn('glslangValidator download response status: ' + response.status )
const zip = new unzip(await response.buffer()) const zip = new unzip(await response.buffer())
const bin = zip.readFile('bin' + glslangBin) const bin = zip.readFile('bin' + glslangBin)
@ -55,9 +56,7 @@ export class GLSLangProvider {
writeFileSync(glslangPath, bin, {encoding: null, mode: 0o755}) writeFileSync(glslangPath, bin, {encoding: null, mode: 0o755})
if (!this.testExecutable()) { if (!this.testExecutable()) {
connection.window.showErrorMessage( connection.window.showErrorMessage('Unexpected error occurred. Please try again')
'Unexpected error occurred. Please try again'
)
return return
} }
@ -68,9 +67,7 @@ export class GLSLangProvider {
connection.sendNotification('update-config', glslangPath) connection.sendNotification('update-config', glslangPath)
} catch (e) { } catch (e) {
log.error(`failed downloading glslangValidator ${e}`) log.error(`failed downloading glslangValidator ${e}`)
connection.window.showErrorMessage( connection.window.showErrorMessage(`Failed to install glslangValidator: ${e}`)
`Failed to install glslangValidator: ${e}`
)
} }
} }
@ -84,7 +81,7 @@ export class GLSLangProvider {
stdout = (e.stdout.toString() as string) stdout = (e.stdout.toString() as string)
} }
log.warn('glslangValidator first line stdout: "' + stdout.split('\n')[0] + '"') log.debug('glslangValidator first line stdout: "' + stdout.split('\n')[0] + '"')
const success = stdout.startsWith('Usage') const success = stdout.startsWith('Usage')
if (success) { if (success) {

View file

@ -1,43 +1,31 @@
import { Logger } from 'ts-log-debug' import { Logger } from 'ts-log-debug'
const defaultOpts = {
type: 'stdout',
layout: {type: 'basic'},
levels: ['debug', 'info', 'warn', 'error']
}
export const glslProviderLog = new Logger('glslangProvider') export const glslProviderLog = new Logger('glslangProvider')
glslProviderLog.appenders.set('std-log', { glslProviderLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'},
levels: ['info', 'warn', 'error']
})
export const linterLog = new Logger('glslangProvider') export const linterLog = new Logger('linter')
linterLog.appenders.set('std-log', { linterLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'},
levels: ['info', 'warn', 'error']
})
export const completionLog = new Logger('glslangProvider') export const completionLog = new Logger('completion')
completionLog.appenders.set('std-log', { completionLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'},
levels: ['info', 'warn', 'error']
})
export const serverLog = new Logger('glslangProvider') export const serverLog = new Logger('server')
serverLog.appenders.set('std-log', { serverLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'},
levels: ['info', 'warn', 'error']
})
export const linkLog = new Logger('glslangProvider') export const linkLog = new Logger('links')
linkLog.appenders.set('std-log', { linkLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'},
levels: ['info', 'warn', 'error']
})
export const uriLog = new Logger('glslangProvider') export const uriLog = new Logger('uri')
uriLog.appenders.set('std-log', { uriLog.appenders.set('std-log', defaultOpts)
type: 'stdout',
layout: {type: 'basic'}, // not added to loggers as this should always log changes
levels: ['info', 'warn', 'error'] export const configLog = new Logger('config')
}) configLog.appenders.set('std-log', defaultOpts)
export const loggers = [glslProviderLog, linterLog, completionLog, serverLog, linkLog, uriLog]

View file

@ -13,8 +13,8 @@ export class URI {
log.debug(`already normalized ${uri}`) log.debug(`already normalized ${uri}`)
return uri return uri
} }
// TODO windows
return '' return uri.replace(/^file:\/\//, '').replace(/\\/, '/')
} }
public static toFileURI(uri: string): string { public static toFileURI(uri: string): string {