mirror of
https://github.com/James-Yu/LaTeX-Workshop.git
synced 2024-10-04 23:27:20 +03:00
Merge branch 'master' into concise-log
This commit is contained in:
commit
24df55f3fe
File diff suppressed because it is too large
Load Diff
@ -1,183 +1,73 @@
|
|||||||
{
|
{
|
||||||
"document": {
|
"document": {
|
||||||
"name": "document",
|
"snippet": "\\n$0"
|
||||||
"snippet": "\n$0"
|
|
||||||
},
|
|
||||||
"table": {
|
|
||||||
"name": "table"
|
|
||||||
},
|
},
|
||||||
|
"table": {},
|
||||||
"description": {
|
"description": {
|
||||||
"name": "description",
|
"snippet": "\\n\\t\\\\item[$1] $0"
|
||||||
"snippet": "\n\t\\item[$1] $0"
|
|
||||||
},
|
},
|
||||||
"enumerate": {
|
"enumerate": {
|
||||||
"name": "enumerate",
|
"snippet": "\\n\\t\\\\item $0"
|
||||||
"snippet": "\n\t\\item $0"
|
|
||||||
},
|
},
|
||||||
"itemize": {
|
"itemize": {
|
||||||
"name": "itemize",
|
"snippet": "\\n\\t\\\\item $0"
|
||||||
"snippet": "\n\t\\item $0"
|
|
||||||
},
|
|
||||||
"math": {
|
|
||||||
"name": "math"
|
|
||||||
},
|
|
||||||
"displaymath": {
|
|
||||||
"name": "displaymath"
|
|
||||||
},
|
|
||||||
"split": {
|
|
||||||
"name": "split"
|
|
||||||
},
|
},
|
||||||
|
"math": {},
|
||||||
|
"displaymath": {},
|
||||||
|
"split": {},
|
||||||
"array{}": {
|
"array{}": {
|
||||||
"name": "array",
|
|
||||||
"detail": "array{cols}",
|
|
||||||
"snippet": "{${1:cols}}"
|
"snippet": "{${1:cols}}"
|
||||||
},
|
},
|
||||||
"subarray{}": {
|
"subarray{}": {
|
||||||
"name": "subarray",
|
|
||||||
"detail": "subarray{align}",
|
|
||||||
"snippet": "{${1:align}}"
|
"snippet": "{${1:align}}"
|
||||||
},
|
},
|
||||||
"eqnarray": {
|
"eqnarray": {},
|
||||||
"name": "eqnarray"
|
"equation": {},
|
||||||
},
|
"equation*": {},
|
||||||
"equation": {
|
"subequations": {},
|
||||||
"name": "equation"
|
"subequations*": {},
|
||||||
},
|
"multline": {},
|
||||||
"equation*": {
|
"multline*": {},
|
||||||
"name": "equation*"
|
"gather": {},
|
||||||
},
|
"gather*": {},
|
||||||
"subequations": {
|
"gathered": {},
|
||||||
"name": "subequations"
|
"align": {},
|
||||||
},
|
"align*": {},
|
||||||
"subequations*": {
|
"aligned": {},
|
||||||
"name": "subequations*"
|
"alignedat": {},
|
||||||
},
|
"flalign": {},
|
||||||
"multline": {
|
"flalign*": {},
|
||||||
"name": "multline"
|
"xalignat": {},
|
||||||
},
|
"xalignat*": {},
|
||||||
"multline*": {
|
"matrix": {},
|
||||||
"name": "multline*"
|
"bmatrix": {},
|
||||||
},
|
"Bmatrix": {},
|
||||||
"gather": {
|
"pmatrix": {},
|
||||||
"name": "gather"
|
"vmatrix": {},
|
||||||
},
|
"Vmatrix": {},
|
||||||
"gather*": {
|
"smallmatrix": {},
|
||||||
"name": "gather*"
|
"definition": {},
|
||||||
},
|
"example": {},
|
||||||
"gathered": {
|
"remark": {},
|
||||||
"name": "gathered"
|
"lemma": {},
|
||||||
},
|
"theorem": {},
|
||||||
"align": {
|
"corollary": {},
|
||||||
"name": "align"
|
"proposition": {},
|
||||||
},
|
"proof": {},
|
||||||
"align*": {
|
"cases": {},
|
||||||
"name": "align*"
|
"center": {},
|
||||||
},
|
"flushleft": {},
|
||||||
"aligned": {
|
"flushright": {},
|
||||||
"name": "aligned"
|
"minipage": {},
|
||||||
},
|
"quotation": {},
|
||||||
"alignedat": {
|
"quote": {},
|
||||||
"name": "alignedat"
|
"verbatim": {},
|
||||||
},
|
"verse": {},
|
||||||
"flalign": {
|
"picture": {},
|
||||||
"name": "flalign"
|
"tabbing": {},
|
||||||
},
|
|
||||||
"flalign*": {
|
|
||||||
"name": "flalign*"
|
|
||||||
},
|
|
||||||
"xalignat": {
|
|
||||||
"name": "xalignat"
|
|
||||||
},
|
|
||||||
"xalignat*": {
|
|
||||||
"name": "xalignat*"
|
|
||||||
},
|
|
||||||
"matrix": {
|
|
||||||
"name": "matrix"
|
|
||||||
},
|
|
||||||
"bmatrix": {
|
|
||||||
"name": "bmatrix"
|
|
||||||
},
|
|
||||||
"Bmatrix": {
|
|
||||||
"name": "Bmatrix"
|
|
||||||
},
|
|
||||||
"pmatrix": {
|
|
||||||
"name": "pmatrix"
|
|
||||||
},
|
|
||||||
"vmatrix": {
|
|
||||||
"name": "vmatrix"
|
|
||||||
},
|
|
||||||
"Vmatrix": {
|
|
||||||
"name": "Vmatrix"
|
|
||||||
},
|
|
||||||
"smallmatrix": {
|
|
||||||
"name": "smallmatrix"
|
|
||||||
},
|
|
||||||
"definition": {
|
|
||||||
"name": "definition"
|
|
||||||
},
|
|
||||||
"example": {
|
|
||||||
"name": "example"
|
|
||||||
},
|
|
||||||
"remark": {
|
|
||||||
"name": "remark"
|
|
||||||
},
|
|
||||||
"lemma": {
|
|
||||||
"name": "lemma"
|
|
||||||
},
|
|
||||||
"theorem": {
|
|
||||||
"name": "theorem"
|
|
||||||
},
|
|
||||||
"corollary": {
|
|
||||||
"name": "corollary"
|
|
||||||
},
|
|
||||||
"proposition": {
|
|
||||||
"name": "proposition"
|
|
||||||
},
|
|
||||||
"proof": {
|
|
||||||
"name": "proof"
|
|
||||||
},
|
|
||||||
"cases": {
|
|
||||||
"name": "cases"
|
|
||||||
},
|
|
||||||
"center": {
|
|
||||||
"name": "center"
|
|
||||||
},
|
|
||||||
"flushleft": {
|
|
||||||
"name": "flushleft"
|
|
||||||
},
|
|
||||||
"flushright": {
|
|
||||||
"name": "flushright"
|
|
||||||
},
|
|
||||||
"minipage": {
|
|
||||||
"name": "minipage"
|
|
||||||
},
|
|
||||||
"quotation": {
|
|
||||||
"name": "quotation"
|
|
||||||
},
|
|
||||||
"quote": {
|
|
||||||
"name": "quote"
|
|
||||||
},
|
|
||||||
"verbatim": {
|
|
||||||
"name": "verbatim"
|
|
||||||
},
|
|
||||||
"verse": {
|
|
||||||
"name": "verse"
|
|
||||||
},
|
|
||||||
"picture": {
|
|
||||||
"name": "picture"
|
|
||||||
},
|
|
||||||
"tabbing": {
|
|
||||||
"name": "tabbing"
|
|
||||||
},
|
|
||||||
"tabular{}": {
|
"tabular{}": {
|
||||||
"name": "tabular",
|
|
||||||
"detail": "tabular{cols}",
|
|
||||||
"snippet": "{${1:cols}}"
|
"snippet": "{${1:cols}}"
|
||||||
},
|
},
|
||||||
"thebibliography": {
|
"thebibliography": {},
|
||||||
"name": "thebibliography"
|
"titlepage": {}
|
||||||
},
|
|
||||||
"titlepage": {
|
|
||||||
"name": "titlepage"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,9 @@ export class Commander {
|
|||||||
})
|
})
|
||||||
logger.log('Snippet data loaded.')
|
logger.log('Snippet data loaded.')
|
||||||
})
|
})
|
||||||
.catch(err => logger.log(`Error reading data: ${err}.`))
|
.catch(err => {
|
||||||
|
this.extension.logger.addLogMessage(`Error reading data: ${err}.`)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async build(skipSelection: boolean = false, rootFile: string | undefined = undefined, languageId: string | undefined = undefined, recipe: string | undefined = undefined) {
|
async build(skipSelection: boolean = false, rootFile: string | undefined = undefined, languageId: string | undefined = undefined, recipe: string | undefined = undefined) {
|
||||||
|
@ -3,7 +3,7 @@ import * as fs from 'fs'
|
|||||||
import {latexParser} from 'latex-utensils'
|
import {latexParser} from 'latex-utensils'
|
||||||
|
|
||||||
import type { Extension } from '../../main'
|
import type { Extension } from '../../main'
|
||||||
import type { IProvider, ICompletionItem } from '../completion'
|
import type { IProvider, ICompletionItem, PkgType } from '../completion'
|
||||||
import {CommandFinder, isTriggerSuggestNeeded} from './commandlib/commandfinder'
|
import {CommandFinder, isTriggerSuggestNeeded} from './commandlib/commandfinder'
|
||||||
import {CmdEnvSuggestion, splitSignatureString, filterNonLetterSuggestions, filterArgumentHint} from './completerutils'
|
import {CmdEnvSuggestion, splitSignatureString, filterNonLetterSuggestions, filterArgumentHint} from './completerutils'
|
||||||
import {CommandSignatureDuplicationDetector, CommandNameDuplicationDetector} from './commandlib/commandfinder'
|
import {CommandSignatureDuplicationDetector, CommandNameDuplicationDetector} from './commandlib/commandfinder'
|
||||||
@ -15,8 +15,6 @@ import { getLogger } from '../../components/logger'
|
|||||||
const logger = getLogger('Intelli', 'Command')
|
const logger = getLogger('Intelli', 'Command')
|
||||||
|
|
||||||
type DataUnimathSymbolsJsonType = typeof import('../../../data/unimathsymbols.json')
|
type DataUnimathSymbolsJsonType = typeof import('../../../data/unimathsymbols.json')
|
||||||
type DataCmdsJsonType = typeof import('../../../data/commands.json')
|
|
||||||
type DataTeXJsonType = typeof import('../../../data/packages/tex.json')
|
|
||||||
|
|
||||||
export type CmdType = {
|
export type CmdType = {
|
||||||
command?: string,
|
command?: string,
|
||||||
@ -27,7 +25,6 @@ export type CmdType = {
|
|||||||
detail?: string,
|
detail?: string,
|
||||||
documentation?: string,
|
documentation?: string,
|
||||||
package?: string,
|
package?: string,
|
||||||
label?: string,
|
|
||||||
postAction?: string
|
postAction?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,18 +60,17 @@ export class Command implements IProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initialize(environment: Environment) {
|
initialize(environment: Environment) {
|
||||||
const defaultCommands = fs.readFileSync(`${this.extension.extensionRoot}/data/commands.json`, {encoding: 'utf8'})
|
const cmds = JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/commands.json`, {encoding: 'utf8'})) as {[key: string]: CmdType}
|
||||||
const defaultLaTeXMathSymbols = fs.readFileSync(`${this.extension.extensionRoot}/data/packages/tex.json`, {encoding: 'utf8'})
|
Object.keys(cmds).forEach(cmd => {
|
||||||
const cmds = JSON.parse(defaultCommands) as DataCmdsJsonType
|
cmds[cmd].command = cmd
|
||||||
const maths: { [key: string]: CmdType } = (JSON.parse(defaultLaTeXMathSymbols) as DataTeXJsonType).cmds
|
cmds[cmd].snippet = cmds[cmd].snippet || cmd
|
||||||
for (const key of Object.keys(maths)) {
|
})
|
||||||
if (key.match(/\{.*?\}/)) {
|
const maths = (JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/packages/tex.json`, {encoding: 'utf8'})) as PkgType).cmds
|
||||||
const ent = maths[key]
|
Object.keys(maths).forEach(cmd => {
|
||||||
const newKey = key.replace(/\{.*?\}/, '')
|
maths[cmd].command = cmd
|
||||||
delete maths[key]
|
maths[cmd].snippet = maths[cmd].snippet || cmd
|
||||||
maths[newKey] = ent
|
})
|
||||||
}
|
|
||||||
}
|
|
||||||
Object.assign(maths, cmds)
|
Object.assign(maths, cmds)
|
||||||
const defaultEnvs = environment.getDefaultEnvs(EnvSnippetType.AsCommand)
|
const defaultEnvs = environment.getDefaultEnvs(EnvSnippetType.AsCommand)
|
||||||
|
|
||||||
@ -237,7 +233,7 @@ export class Command implements IProvider {
|
|||||||
item.command = item.command || itemKey
|
item.command = item.command || itemKey
|
||||||
const backslash = item.command.startsWith(' ') ? '' : '\\'
|
const backslash = item.command.startsWith(' ') ? '' : '\\'
|
||||||
const suggestion = new CmdEnvSuggestion(
|
const suggestion = new CmdEnvSuggestion(
|
||||||
item.label || `${backslash}${item.command}`,
|
`${backslash}${item.command}`,
|
||||||
item.package || 'latex',
|
item.package || 'latex',
|
||||||
item.keyvals || [],
|
item.keyvals || [],
|
||||||
item.keyvalindex === undefined ? -1 : item.keyvalindex,
|
item.keyvalindex === undefined ? -1 : item.keyvalindex,
|
||||||
|
@ -12,8 +12,6 @@ import { getLogger } from '../../components/logger'
|
|||||||
|
|
||||||
const logger = getLogger('Intelli', 'Environment')
|
const logger = getLogger('Intelli', 'Environment')
|
||||||
|
|
||||||
type DataEnvsJsonType = typeof import('../../../data/environments.json')
|
|
||||||
|
|
||||||
export type EnvType = {
|
export type EnvType = {
|
||||||
name: string, // Name of the environment, what comes inside \begin{...}
|
name: string, // Name of the environment, what comes inside \begin{...}
|
||||||
snippet?: string, // To be inserted after \begin{..}
|
snippet?: string, // To be inserted after \begin{..}
|
||||||
@ -45,15 +43,19 @@ export class Environment implements IProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initialize() {
|
initialize() {
|
||||||
const defaultEnvs = fs.readFileSync(`${this.extension.extensionRoot}/data/environments.json`, {encoding: 'utf8'})
|
const envs = JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/environments.json`, {encoding: 'utf8'})) as {[key: string]: EnvType}
|
||||||
const envs: { [key: string]: EnvType } = JSON.parse(defaultEnvs) as DataEnvsJsonType
|
Object.keys(envs).forEach(key => {
|
||||||
|
envs[key].name = envs[key].name || key
|
||||||
|
envs[key].snippet = envs[key].snippet || ''
|
||||||
|
envs[key].detail = key
|
||||||
|
})
|
||||||
this.defaultEnvsAsCommand = []
|
this.defaultEnvsAsCommand = []
|
||||||
this.defaultEnvsForBegin = []
|
this.defaultEnvsForBegin = []
|
||||||
this.defaultEnvsAsName = []
|
this.defaultEnvsAsName = []
|
||||||
Object.keys(envs).forEach(key => {
|
Object.keys(envs).forEach(key => {
|
||||||
this.defaultEnvsAsCommand.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsCommand))
|
this.defaultEnvsAsCommand.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsCommand))
|
||||||
this.defaultEnvsForBegin.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.ForBegin))
|
this.defaultEnvsForBegin.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.ForBegin))
|
||||||
this.defaultEnvsAsName.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsName))
|
this.defaultEnvsAsName.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsName))
|
||||||
})
|
})
|
||||||
|
|
||||||
return this
|
return this
|
||||||
|
@ -69,7 +69,8 @@ export class Completer implements vscode.CompletionItemProvider {
|
|||||||
this.subImport = new SubImport(extension)
|
this.subImport = new SubImport(extension)
|
||||||
this.glossary = new Glossary(extension)
|
this.glossary = new Glossary(extension)
|
||||||
try {
|
try {
|
||||||
this.loadDefaultItems()
|
const environment = this.environment.initialize()
|
||||||
|
this.command.initialize(environment)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.log(`Error reading data: ${err}.`)
|
logger.log(`Error reading data: ${err}.`)
|
||||||
}
|
}
|
||||||
@ -113,12 +114,6 @@ export class Completer implements vscode.CompletionItemProvider {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadDefaultItems() {
|
|
||||||
// Make sure to initialize environment first
|
|
||||||
const environment = this.environment.initialize()
|
|
||||||
this.command.initialize(environment)
|
|
||||||
}
|
|
||||||
|
|
||||||
provideCompletionItems(
|
provideCompletionItems(
|
||||||
document: vscode.TextDocument,
|
document: vscode.TextDocument,
|
||||||
position: vscode.Position,
|
position: vscode.Position,
|
||||||
|
@ -12,9 +12,9 @@ import { CmdType } from '../../src/providers/completer/command'
|
|||||||
import { PkgType } from '../../src/providers/completion'
|
import { PkgType } from '../../src/providers/completion'
|
||||||
import { isTriggerSuggestNeeded } from '../../src/providers/completer/commandlib/commandfinder'
|
import { isTriggerSuggestNeeded } from '../../src/providers/completer/commandlib/commandfinder'
|
||||||
|
|
||||||
function assertKeys(keys: string[], mendatory: string[], optional: string[] = [], message: string): void {
|
function assertKeys(keys: string[], expected: string[] = [], message: string): void {
|
||||||
assert.ok(
|
assert.ok(
|
||||||
keys.every(k => mendatory.includes(k) || optional.includes(k)) && mendatory.every(k => keys.includes(k)),
|
keys.every(k => expected.includes(k)),
|
||||||
message
|
message
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -62,8 +62,7 @@ suite('Intellisense test suite', () => {
|
|||||||
Object.keys(envs).forEach(name => {
|
Object.keys(envs).forEach(name => {
|
||||||
assertKeys(
|
assertKeys(
|
||||||
Object.keys(envs[name]),
|
Object.keys(envs[name]),
|
||||||
['name'],
|
['name', 'snippet', 'detail'],
|
||||||
['snippet', 'detail'],
|
|
||||||
file + ': ' + JSON.stringify(envs[name])
|
file + ': ' + JSON.stringify(envs[name])
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@ -76,8 +75,7 @@ suite('Intellisense test suite', () => {
|
|||||||
Object.keys(cmds).forEach(name => {
|
Object.keys(cmds).forEach(name => {
|
||||||
assertKeys(
|
assertKeys(
|
||||||
Object.keys(cmds[name]),
|
Object.keys(cmds[name]),
|
||||||
['command'],
|
['command', 'snippet', 'documentation', 'detail', 'postAction'],
|
||||||
['snippet', 'documentation', 'detail', 'postAction', 'label'],
|
|
||||||
file + ': ' + JSON.stringify(cmds[name])
|
file + ': ' + JSON.stringify(cmds[name])
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
@ -111,7 +109,6 @@ suite('Intellisense test suite', () => {
|
|||||||
Object.keys(pkg.cmds).forEach(name => {
|
Object.keys(pkg.cmds).forEach(name => {
|
||||||
assertKeys(
|
assertKeys(
|
||||||
Object.keys(pkg.cmds[name]),
|
Object.keys(pkg.cmds[name]),
|
||||||
[],
|
|
||||||
['command', 'snippet', 'option', 'keyvals', 'keyvalindex', 'documentation', 'detail'],
|
['command', 'snippet', 'option', 'keyvals', 'keyvalindex', 'documentation', 'detail'],
|
||||||
file + ': ' + JSON.stringify(pkg.cmds[name])
|
file + ': ' + JSON.stringify(pkg.cmds[name])
|
||||||
)
|
)
|
||||||
@ -119,7 +116,6 @@ suite('Intellisense test suite', () => {
|
|||||||
Object.keys(pkg.envs).forEach(name => {
|
Object.keys(pkg.envs).forEach(name => {
|
||||||
assertKeys(
|
assertKeys(
|
||||||
Object.keys(pkg.envs[name]),
|
Object.keys(pkg.envs[name]),
|
||||||
[],
|
|
||||||
['name', 'snippet', 'detail', 'option', 'keyvals', 'keyvalindex'],
|
['name', 'snippet', 'detail', 'option', 'keyvals', 'keyvalindex'],
|
||||||
file + ': ' + JSON.stringify(pkg.envs[name])
|
file + ': ' + JSON.stringify(pkg.envs[name])
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user