mirror of
https://github.com/James-Yu/LaTeX-Workshop.git
synced 2024-10-04 15:17:59 +03:00
parent
f6c8e70db4
commit
4d7199b99f
16
src/main.ts
16
src/main.ts
@ -188,14 +188,14 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||
if (extension.manager.hasTexId(e.document.languageId)) {
|
||||
extension.linter.lintActiveFileIfEnabledAfterInterval()
|
||||
|
||||
const previousRoot = extension.manager.rootFile
|
||||
extension.manager.findRoot().then(rootFile => {
|
||||
if (rootFile === undefined || rootFile === previousRoot) {
|
||||
return
|
||||
}
|
||||
extension.structureProvider.refresh()
|
||||
extension.structureProvider.update()
|
||||
})
|
||||
// const previousRoot = extension.manager.rootFile
|
||||
// extension.manager.findRoot().then(rootFile => {
|
||||
// if (rootFile === undefined || rootFile === previousRoot) {
|
||||
// return
|
||||
// }
|
||||
// extension.structureProvider.refresh()
|
||||
// extension.structureProvider.update()
|
||||
// })
|
||||
}
|
||||
}))
|
||||
|
||||
|
43
src/providers/completer/input.ts
Normal file
43
src/providers/completer/input.ts
Normal file
@ -0,0 +1,43 @@
|
||||
import * as vscode from 'vscode'
|
||||
import * as fs from 'fs-extra'
|
||||
import * as path from 'path'
|
||||
|
||||
import {Extension} from '../../main'
|
||||
|
||||
export class Input {
|
||||
extension: Extension
|
||||
provideRefreshTime: number
|
||||
|
||||
constructor(extension: Extension) {
|
||||
this.extension = extension
|
||||
}
|
||||
|
||||
provide(payload) : vscode.CompletionItem[] {
|
||||
const mode = payload[0]
|
||||
const currentFile = payload[1]
|
||||
const typedFolder = payload[2]
|
||||
const suggestions: vscode.CompletionItem[] = []
|
||||
let baseDir
|
||||
if (mode === 'include') {
|
||||
baseDir = path.dirname(currentFile)
|
||||
} else {
|
||||
baseDir = path.dirname(this.extension.manager.rootFile)
|
||||
}
|
||||
if (typedFolder !== '') {
|
||||
baseDir = path.join(baseDir, typedFolder)
|
||||
}
|
||||
try {
|
||||
const files = fs.readdirSync(baseDir)
|
||||
files.forEach(file => {
|
||||
if (fs.lstatSync(path.join(baseDir, file)).isDirectory()) {
|
||||
const item = new vscode.CompletionItem(`${file}${path.sep}`, vscode.CompletionItemKind.Folder)
|
||||
item.command = { title: 'Post-Action', command: 'editor.action.triggerSuggest' }
|
||||
suggestions.push(item)
|
||||
} else {
|
||||
suggestions.push(new vscode.CompletionItem(file, vscode.CompletionItemKind.File))
|
||||
}
|
||||
})
|
||||
} catch (error) {}
|
||||
return suggestions
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import {Command} from './completer/command'
|
||||
import {Environment} from './completer/environment'
|
||||
import {Reference} from './completer/reference'
|
||||
import {Package} from './completer/package'
|
||||
import {Input} from './completer/input'
|
||||
|
||||
export class Completer implements vscode.CompletionItemProvider {
|
||||
extension: Extension
|
||||
@ -15,6 +16,7 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
environment: Environment
|
||||
reference: Reference
|
||||
package: Package
|
||||
input: Input
|
||||
|
||||
constructor(extension: Extension) {
|
||||
this.extension = extension
|
||||
@ -23,6 +25,7 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
this.environment = new Environment(extension)
|
||||
this.reference = new Reference(extension)
|
||||
this.package = new Package(extension)
|
||||
this.input = new Input(extension)
|
||||
let defaultEnvs: string
|
||||
let defaultCommands: string
|
||||
let defaultSymbols: string
|
||||
@ -68,7 +71,7 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
}
|
||||
|
||||
const line = document.lineAt(position.line).text.substr(0, position.character)
|
||||
for (const type of ['citation', 'reference', 'environment', 'command', 'package']) {
|
||||
for (const type of ['citation', 'reference', 'environment', 'package', 'input', 'command']) {
|
||||
const suggestions = this.completion(type, line)
|
||||
if (suggestions.length > 0) {
|
||||
if (type === 'citation') {
|
||||
@ -101,6 +104,7 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
completion(type: string, line: string) : vscode.CompletionItem[] {
|
||||
let reg
|
||||
let provider
|
||||
let payload
|
||||
switch (type) {
|
||||
case 'citation':
|
||||
reg = /(?:\\[a-zA-Z]*cite[a-zA-Z]*(?:\[[^\[\]]*\])*){([^}]*)$/
|
||||
@ -122,6 +126,10 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
reg = /(?:\\usepackage(?:\[[^\[\]]*\])*){([^}]*)$/
|
||||
provider = this.package
|
||||
break
|
||||
case 'input':
|
||||
reg = /(?:\\(input|include|subfile|includegraphics)(?:\[[^\[\]]*\])*){([^}]*)$/
|
||||
provider = this.input
|
||||
break
|
||||
default:
|
||||
// This shouldn't be possible, so mark as error case in log.
|
||||
this.extension.logger.addLogMessage(`Error - trying to complete unknown type ${type}`)
|
||||
@ -130,7 +138,13 @@ export class Completer implements vscode.CompletionItemProvider {
|
||||
const result = line.match(reg)
|
||||
let suggestions: vscode.CompletionItem[] = []
|
||||
if (result) {
|
||||
suggestions = provider.provide()
|
||||
if (type === 'input') {
|
||||
const editor = vscode.window.activeTextEditor
|
||||
if (editor) {
|
||||
payload = [result[1], editor.document.fileName, result[2]]
|
||||
}
|
||||
}
|
||||
suggestions = provider.provide(payload)
|
||||
}
|
||||
return suggestions
|
||||
}
|
||||
|
@ -89,7 +89,6 @@ export class SectionNodeProvider implements vscode.TreeDataProvider<Section> {
|
||||
return rootStack.length === 0
|
||||
}
|
||||
|
||||
this.extension.logger.addLogMessage(`Parsing ${filePath} for outline`)
|
||||
let content = fs.readFileSync(filePath, 'utf-8')
|
||||
content = content.replace(/([^\\]|^)%.*$/gm, '$1') // Strip comments
|
||||
const endPos = content.search(/\\end{document}/gm)
|
||||
|
Loading…
Reference in New Issue
Block a user