Merge branch 'master' into concise-log

This commit is contained in:
James Yu 2023-01-07 16:08:31 +08:00 committed by GitHub
commit 24df55f3fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 133 additions and 623 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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": {}
}

View File

@ -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) {

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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])
)