Files
pnpm/completion/plugin-commands-completion/src/generateCompletion.ts
T
Khải 004addf63e feat(completion): print completion code to stdout (#7597)
* 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
2024-02-06 23:18:17 +01:00

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,
})