* feat(completion): generate-completion close #3083 * feat: better error message * test: generate-completion * feat(completion): add powershell * chore(deps): update @pnpm/tabtab to 0.3.0 * switch to provided type declarations * fix typings * update tests * update bundle scripts * refactor: remove unnecessary `??` * refactor: replace a type def with provided types * chore(deps): update @pnpm/tabtab to 0.4.0 * feat(cli): rename completion command * chore(deps): update @pnpm/tabtab to 0.4.1 * refactor: use tabtab's new features * fix: pass shell * chore(deps): update @pnpm/tabtab to 0.5.0 * chore(deps): update @pnpm/tabtab to 0.5.1 * fix: remove unused import * refactor: move completion to plugins * feat: remove `{install,uninstall}-completion` Just `pnpm completion` is enough * test: fix * refactor: direct import * refactor: move tests to next to the lib * refactor: merge 2 packages into 1 * fix: update changeset and remove install-completion
35 lines
992 B
TypeScript
35 lines
992 B
TypeScript
import renderHelp from 'render-help'
|
|
import { docsUrl } from '@pnpm/cli-utils'
|
|
import { getCompletionScript, SUPPORTED_SHELLS } from '@pnpm/tabtab'
|
|
import { getShellFromParams } from './getShell'
|
|
|
|
export const commandNames = ['completion']
|
|
|
|
export const rcOptionsTypes = () => ({})
|
|
|
|
export const cliOptionsTypes = () => ({})
|
|
|
|
export function help () {
|
|
return renderHelp({
|
|
description: 'Print shell completion code to stdout',
|
|
url: docsUrl('completion'),
|
|
usages: SUPPORTED_SHELLS.map(shell => `pnpm completion ${shell}`),
|
|
})
|
|
}
|
|
|
|
export interface Context {
|
|
readonly log: (output: string) => void
|
|
}
|
|
|
|
export function createCompletionGenerator (ctx: Context) {
|
|
return async function handler (_opts: unknown, params: string[]): Promise<void> {
|
|
const shell = getShellFromParams(params)
|
|
const output = await getCompletionScript({ name: 'pnpm', completer: 'pnpm', shell })
|
|
ctx.log(output)
|
|
}
|
|
}
|
|
|
|
export const handler = createCompletionGenerator({
|
|
log: console.log,
|
|
})
|