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": {
|
||||
"name": "document",
|
||||
"snippet": "\n$0"
|
||||
},
|
||||
"table": {
|
||||
"name": "table"
|
||||
"snippet": "\\n$0"
|
||||
},
|
||||
"table": {},
|
||||
"description": {
|
||||
"name": "description",
|
||||
"snippet": "\n\t\\item[$1] $0"
|
||||
"snippet": "\\n\\t\\\\item[$1] $0"
|
||||
},
|
||||
"enumerate": {
|
||||
"name": "enumerate",
|
||||
"snippet": "\n\t\\item $0"
|
||||
"snippet": "\\n\\t\\\\item $0"
|
||||
},
|
||||
"itemize": {
|
||||
"name": "itemize",
|
||||
"snippet": "\n\t\\item $0"
|
||||
},
|
||||
"math": {
|
||||
"name": "math"
|
||||
},
|
||||
"displaymath": {
|
||||
"name": "displaymath"
|
||||
},
|
||||
"split": {
|
||||
"name": "split"
|
||||
"snippet": "\\n\\t\\\\item $0"
|
||||
},
|
||||
"math": {},
|
||||
"displaymath": {},
|
||||
"split": {},
|
||||
"array{}": {
|
||||
"name": "array",
|
||||
"detail": "array{cols}",
|
||||
"snippet": "{${1:cols}}"
|
||||
},
|
||||
"subarray{}": {
|
||||
"name": "subarray",
|
||||
"detail": "subarray{align}",
|
||||
"snippet": "{${1:align}}"
|
||||
},
|
||||
"eqnarray": {
|
||||
"name": "eqnarray"
|
||||
},
|
||||
"equation": {
|
||||
"name": "equation"
|
||||
},
|
||||
"equation*": {
|
||||
"name": "equation*"
|
||||
},
|
||||
"subequations": {
|
||||
"name": "subequations"
|
||||
},
|
||||
"subequations*": {
|
||||
"name": "subequations*"
|
||||
},
|
||||
"multline": {
|
||||
"name": "multline"
|
||||
},
|
||||
"multline*": {
|
||||
"name": "multline*"
|
||||
},
|
||||
"gather": {
|
||||
"name": "gather"
|
||||
},
|
||||
"gather*": {
|
||||
"name": "gather*"
|
||||
},
|
||||
"gathered": {
|
||||
"name": "gathered"
|
||||
},
|
||||
"align": {
|
||||
"name": "align"
|
||||
},
|
||||
"align*": {
|
||||
"name": "align*"
|
||||
},
|
||||
"aligned": {
|
||||
"name": "aligned"
|
||||
},
|
||||
"alignedat": {
|
||||
"name": "alignedat"
|
||||
},
|
||||
"flalign": {
|
||||
"name": "flalign"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"eqnarray": {},
|
||||
"equation": {},
|
||||
"equation*": {},
|
||||
"subequations": {},
|
||||
"subequations*": {},
|
||||
"multline": {},
|
||||
"multline*": {},
|
||||
"gather": {},
|
||||
"gather*": {},
|
||||
"gathered": {},
|
||||
"align": {},
|
||||
"align*": {},
|
||||
"aligned": {},
|
||||
"alignedat": {},
|
||||
"flalign": {},
|
||||
"flalign*": {},
|
||||
"xalignat": {},
|
||||
"xalignat*": {},
|
||||
"matrix": {},
|
||||
"bmatrix": {},
|
||||
"Bmatrix": {},
|
||||
"pmatrix": {},
|
||||
"vmatrix": {},
|
||||
"Vmatrix": {},
|
||||
"smallmatrix": {},
|
||||
"definition": {},
|
||||
"example": {},
|
||||
"remark": {},
|
||||
"lemma": {},
|
||||
"theorem": {},
|
||||
"corollary": {},
|
||||
"proposition": {},
|
||||
"proof": {},
|
||||
"cases": {},
|
||||
"center": {},
|
||||
"flushleft": {},
|
||||
"flushright": {},
|
||||
"minipage": {},
|
||||
"quotation": {},
|
||||
"quote": {},
|
||||
"verbatim": {},
|
||||
"verse": {},
|
||||
"picture": {},
|
||||
"tabbing": {},
|
||||
"tabular{}": {
|
||||
"name": "tabular",
|
||||
"detail": "tabular{cols}",
|
||||
"snippet": "{${1:cols}}"
|
||||
},
|
||||
"thebibliography": {
|
||||
"name": "thebibliography"
|
||||
},
|
||||
"titlepage": {
|
||||
"name": "titlepage"
|
||||
}
|
||||
"thebibliography": {},
|
||||
"titlepage": {}
|
||||
}
|
||||
|
@ -65,7 +65,9 @@ export class Commander {
|
||||
})
|
||||
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) {
|
||||
|
@ -3,7 +3,7 @@ import * as fs from 'fs'
|
||||
import {latexParser} from 'latex-utensils'
|
||||
|
||||
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 {CmdEnvSuggestion, splitSignatureString, filterNonLetterSuggestions, filterArgumentHint} from './completerutils'
|
||||
import {CommandSignatureDuplicationDetector, CommandNameDuplicationDetector} from './commandlib/commandfinder'
|
||||
@ -15,8 +15,6 @@ import { getLogger } from '../../components/logger'
|
||||
const logger = getLogger('Intelli', 'Command')
|
||||
|
||||
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 = {
|
||||
command?: string,
|
||||
@ -27,7 +25,6 @@ export type CmdType = {
|
||||
detail?: string,
|
||||
documentation?: string,
|
||||
package?: string,
|
||||
label?: string,
|
||||
postAction?: string
|
||||
}
|
||||
|
||||
@ -63,18 +60,17 @@ export class Command implements IProvider {
|
||||
}
|
||||
|
||||
initialize(environment: Environment) {
|
||||
const defaultCommands = fs.readFileSync(`${this.extension.extensionRoot}/data/commands.json`, {encoding: 'utf8'})
|
||||
const defaultLaTeXMathSymbols = fs.readFileSync(`${this.extension.extensionRoot}/data/packages/tex.json`, {encoding: 'utf8'})
|
||||
const cmds = JSON.parse(defaultCommands) as DataCmdsJsonType
|
||||
const maths: { [key: string]: CmdType } = (JSON.parse(defaultLaTeXMathSymbols) as DataTeXJsonType).cmds
|
||||
for (const key of Object.keys(maths)) {
|
||||
if (key.match(/\{.*?\}/)) {
|
||||
const ent = maths[key]
|
||||
const newKey = key.replace(/\{.*?\}/, '')
|
||||
delete maths[key]
|
||||
maths[newKey] = ent
|
||||
}
|
||||
}
|
||||
const cmds = JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/commands.json`, {encoding: 'utf8'})) as {[key: string]: CmdType}
|
||||
Object.keys(cmds).forEach(cmd => {
|
||||
cmds[cmd].command = cmd
|
||||
cmds[cmd].snippet = cmds[cmd].snippet || cmd
|
||||
})
|
||||
const maths = (JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/packages/tex.json`, {encoding: 'utf8'})) as PkgType).cmds
|
||||
Object.keys(maths).forEach(cmd => {
|
||||
maths[cmd].command = cmd
|
||||
maths[cmd].snippet = maths[cmd].snippet || cmd
|
||||
})
|
||||
|
||||
Object.assign(maths, cmds)
|
||||
const defaultEnvs = environment.getDefaultEnvs(EnvSnippetType.AsCommand)
|
||||
|
||||
@ -237,7 +233,7 @@ export class Command implements IProvider {
|
||||
item.command = item.command || itemKey
|
||||
const backslash = item.command.startsWith(' ') ? '' : '\\'
|
||||
const suggestion = new CmdEnvSuggestion(
|
||||
item.label || `${backslash}${item.command}`,
|
||||
`${backslash}${item.command}`,
|
||||
item.package || 'latex',
|
||||
item.keyvals || [],
|
||||
item.keyvalindex === undefined ? -1 : item.keyvalindex,
|
||||
|
@ -12,8 +12,6 @@ import { getLogger } from '../../components/logger'
|
||||
|
||||
const logger = getLogger('Intelli', 'Environment')
|
||||
|
||||
type DataEnvsJsonType = typeof import('../../../data/environments.json')
|
||||
|
||||
export type EnvType = {
|
||||
name: string, // Name of the environment, what comes inside \begin{...}
|
||||
snippet?: string, // To be inserted after \begin{..}
|
||||
@ -45,15 +43,19 @@ export class Environment implements IProvider {
|
||||
}
|
||||
|
||||
initialize() {
|
||||
const defaultEnvs = fs.readFileSync(`${this.extension.extensionRoot}/data/environments.json`, {encoding: 'utf8'})
|
||||
const envs: { [key: string]: EnvType } = JSON.parse(defaultEnvs) as DataEnvsJsonType
|
||||
const envs = JSON.parse(fs.readFileSync(`${this.extension.extensionRoot}/data/environments.json`, {encoding: 'utf8'})) as {[key: string]: EnvType}
|
||||
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.defaultEnvsForBegin = []
|
||||
this.defaultEnvsAsName = []
|
||||
Object.keys(envs).forEach(key => {
|
||||
this.defaultEnvsAsCommand.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsCommand))
|
||||
this.defaultEnvsForBegin.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.ForBegin))
|
||||
this.defaultEnvsAsName.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsName))
|
||||
this.defaultEnvsAsCommand.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsCommand))
|
||||
this.defaultEnvsForBegin.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.ForBegin))
|
||||
this.defaultEnvsAsName.push(this.entryEnvToCompletion(key, envs[key], EnvSnippetType.AsName))
|
||||
})
|
||||
|
||||
return this
|
||||
|
@ -69,7 +69,8 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
this.subImport = new SubImport(extension)
|
||||
this.glossary = new Glossary(extension)
|
||||
try {
|
||||
this.loadDefaultItems()
|
||||
const environment = this.environment.initialize()
|
||||
this.command.initialize(environment)
|
||||
} catch (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(
|
||||
document: vscode.TextDocument,
|
||||
position: vscode.Position,
|
||||
|
@ -12,9 +12,9 @@ import { CmdType } from '../../src/providers/completer/command'
|
||||
import { PkgType } from '../../src/providers/completion'
|
||||
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(
|
||||
keys.every(k => mendatory.includes(k) || optional.includes(k)) && mendatory.every(k => keys.includes(k)),
|
||||
keys.every(k => expected.includes(k)),
|
||||
message
|
||||
)
|
||||
}
|
||||
@ -62,8 +62,7 @@ suite('Intellisense test suite', () => {
|
||||
Object.keys(envs).forEach(name => {
|
||||
assertKeys(
|
||||
Object.keys(envs[name]),
|
||||
['name'],
|
||||
['snippet', 'detail'],
|
||||
['name', 'snippet', 'detail'],
|
||||
file + ': ' + JSON.stringify(envs[name])
|
||||
)
|
||||
})
|
||||
@ -76,8 +75,7 @@ suite('Intellisense test suite', () => {
|
||||
Object.keys(cmds).forEach(name => {
|
||||
assertKeys(
|
||||
Object.keys(cmds[name]),
|
||||
['command'],
|
||||
['snippet', 'documentation', 'detail', 'postAction', 'label'],
|
||||
['command', 'snippet', 'documentation', 'detail', 'postAction'],
|
||||
file + ': ' + JSON.stringify(cmds[name])
|
||||
)
|
||||
})
|
||||
@ -111,7 +109,6 @@ suite('Intellisense test suite', () => {
|
||||
Object.keys(pkg.cmds).forEach(name => {
|
||||
assertKeys(
|
||||
Object.keys(pkg.cmds[name]),
|
||||
[],
|
||||
['command', 'snippet', 'option', 'keyvals', 'keyvalindex', 'documentation', 'detail'],
|
||||
file + ': ' + JSON.stringify(pkg.cmds[name])
|
||||
)
|
||||
@ -119,7 +116,6 @@ suite('Intellisense test suite', () => {
|
||||
Object.keys(pkg.envs).forEach(name => {
|
||||
assertKeys(
|
||||
Object.keys(pkg.envs[name]),
|
||||
[],
|
||||
['name', 'snippet', 'detail', 'option', 'keyvals', 'keyvalindex'],
|
||||
file + ': ' + JSON.stringify(pkg.envs[name])
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user