Flutter for OpenHarmony:completion 打造极速命令行体验(为你的 CLI 工具添加自动补全) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

前言

如果你为鸿蒙开发了一套 CLI 工具(比如 ohos_deploy),用户在终端输入命令时,如果能像 gitkubectl 那样按下 <TAB> 键就自动补全参数,体验将会有质的飞跃。

completion 是 Dart 官方提供的一个小巧库,专门用于为 Dart 编写的命令行程序生成 Shell 自动补全脚本(支持 Bash/Zsh)。

对于 OpenHarmony 开发者,这意味着你可以用 Dart 编写出专业级的开发辅助工具,分发给团队使用,极大提升内部开发效率。

一、核心原理

自动补全的原理并非魔法。

  1. 安装阶段:生成一段 Shell 脚本(如 .bash_completion),告诉 Shell 当用户输入 my_cli <TAB> 时,去调用 my_cli completion ... 获取建议。
  2. 运行阶段:你的程序接收到特殊的 completion 参数,计算当前光标位置的候选词,输出给 Shell。

你的 Dart CLIZsh/Bash用户 (Terminal)你的 Dart CLIZsh/Bash用户 (Terminal)输入 "ohos_cli dep<TAB>"运行 "ohos_cli completion --word='dep'"匹配候选词 (deploy, dependency)返回 "deploy\ndependency"显示补全列表

二、OpenHarmony 适配说明

completion 库运行在宿主机的 Shell 环境中(Mac/Linux/Windows)。
当然,如果你在鸿蒙设备上通过 Termux 或 Shell 环境运行 Dart 程序,只要 Shell 支持(鸿蒙自带的 shell 较为精简,可能不支持高级补全),它也能工作。

主要场景
它是为鸿蒙工具链开发者准备的。你的工具运行在 PC 上,辅佐鸿蒙开发。

三、基础用例

3.1 定义补全逻辑

import'package:args/args.dart';import'package:completion/completion.dart';voidmain(List<String> args){final parser =ArgParser(); parser.addOption('target', allowed:['android','ios','ohos']);// 1. 尝试处理补全请求// 如果当前是补全模式,tryArgsCompletion 会直接打印建议并退出程序// 否则返回正常的 argstryArgsCompletion(args, parser);// 2. 正常的业务逻辑final results = parser.parse(args);print('正在构建目标: ${results['target']}');}
在这里插入图片描述

3.2 安装补全脚本

用户在使用你的工具前,需要运行一次安装命令(只需一次)。
该库并没有自动安装功能,通常你需要提示用户配置 .zshrc.bashrc

生成的补全脚本通常长这样:

# 自动生成的 setupiftype complete &>/dev/null;then_my_cli_completion(){localsi="$IFS"IFS=$'\n'COMPREPLY=($(COMP_CWORD="$COMP_CWORD"\COMP_LINE="$COMP_LINE"\COMP_POINT="$COMP_POINT"\ my_cli completion -- "${COMP_WORDS[@]}"\2>/dev/null))||return$?IFS="$si"} complete -F _my_cli_completion my_cli fi

四、完整实战示例:鸿蒙多模块构建工具

假设你管理着一个包含 50 个 HAP 模块的超大鸿蒙项目,你写了一个工具来单独构建指定的模块。

import'dart:io';import'package:args/args.dart';import'package:completion/completion.dart';voidmain(List<String> args){final parser =ArgParser();// 动态获取所有模块名作为补全候选List<String>getModuleNames(){// 假设当前目录下所有以 feature_ 开头的文件夹都是模块final dir =Directory.current;if(!dir.existsSync())return[];return dir.listSync().whereType<Directory>().map((d)=> d.path.split(Platform.pathSeparator).last).where((name)=> name.startsWith('feature_')).toList();} parser.addCommand('build'); parser.addCommand('clean'); parser.addOption('module', help:'指定模块名');// 拦截补全请求// 注意:tryArgsCompletion 默认只处理静态 allowed 列表// 如果需要动态补全(如扫描文件夹),需要自定义 completion 逻辑(略高级,本库提供基础支持)// 这里演示最基础的静态补全tryArgsCompletion(args, parser);// 业务逻辑var results = parser.parse(args);if(results.command?.name =='build'){print('🔨 正在构建模块: ${results['module'] ?? 'ALL'}');}}
在这里插入图片描述

五、总结

completion 是那种“一旦拥有,别无所求”的功能。
虽然它不直接运行在鸿蒙 App 里,但它是提升鸿蒙开发体验的重要一环。如果你致力于打造一套让开发者爱不释手的鸿蒙工具链,请务必为你的 CLI 加上自动补全功能。

Read more

从0到上线只需3小时!飞算JavaAI引爆全民编程革命:不懂代码也能做系统,AI全自动开发时代来了!

从0到上线只需3小时!飞算JavaAI引爆全民编程革命:不懂代码也能做系统,AI全自动开发时代来了!

目录 一、我是个“编程小白”,但我也有梦想 二、飞算AI到底是什么?一句话说清楚 类比理解: 三、飞算JavaAI的核心功能(小白也能听懂) 1. 智能引导 2. JavaChat 3. 智能问答 4. SQL Chat 5. 编程智能体 四、我的真实体验:从“0”到“上线”只要3小时  注册和登录 使用:  个人感受: 五、飞算AI vs 国内外主流AI编程工具(详细对比) 详细对比分析 1. 功能定位不同 2. 对小白的友好度 3. 生成代码的质量 4. 部署能力 5. 技术栈支持 六、

By Ne0inhk
66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师

66个JAVA常见代码大全:学完这篇从Java小白到AI全栈架构师 摘要:本文详细列举了 66 个 Java 编程中的关键代码示例,包括基础语法、数据类型、条件判断、循环、数组、方法、面向对象、继承、接口、抽象类、多态、封装、静态变量、内部类、匿名类、泛型、集合框架、异常处理、文件 I/O、多线程、同步以及高级并发概念,帮助你从入门到成长为架构师。 66个Java常见代码大全:学完这篇从Java小白到AI全栈架构师 引言 在当今的编程世界中,Java 作为一种广泛使用的编程语言,涵盖了从基础语法到复杂架构的方方面面。无论是刚接触编程的新手,还是经验丰富的开发者,掌握Java的核心技术和常用模式,都是成为一名高效开发者的必经之路。本篇文章将带您通过 66 个关键代码示例,从零开始深入学习 Java,从最基础的语法到高阶的并发编程,帮助您成为一名合格的

By Ne0inhk
JDK的下载与安装教程(详细版,下载地址:官网+其它镜像)

JDK的下载与安装教程(详细版,下载地址:官网+其它镜像)

目录 1、JDK官网 2、基于JDK官网下载JDK版本 3、基于其它镜像的下载JDK版本  3.1 使用华为镜像 3.2 使用injdk镜像 4、JDK的安装 5、配置JDK的环境变量 6、ideal选择相应的JDK版本 6.1 新建项目(new project) 6.2 创建项目后,调整JDK版本 6.3通过Maven依赖来控制JDK的版本 1、JDK官网 官网地址:Java Downloads | Oracle 中国https://www.oracle.com/cn/java/technologies/downloads/#jdk17-windows 官网地址(jdk17版本之前的):https://www.oracle.

By Ne0inhk
华为OD机试双机位C卷 - 部门人力分配 (C++ & Python & JAVA & JS & GO)

华为OD机试双机位C卷 - 部门人力分配 (C++ & Python & JAVA & JS & GO)

部门人力分配 华为OD机试双机位C卷 - 华为OD上机考试双机位C卷 100分题型 华为OD机试双机位C卷真题目录点击查看: 华为OD机试双机位C卷真题题库目录|机考题库 + 算法考点详解 题目描述 部门在进行需求开发时需要进行人力安排。 当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。 这部分需求需要在 M 个月内完成开发,进行人力安排后每个月人力时固定的。 目前要求每个月最多有2个需求开发,并且每个月需要完成的需求不能超过部门人力。 请帮助部门评估在满足需求开发进度的情况下,每个月需要的最小人力是多少? 输入描述 输入为 M 和 requirements,M 表示需求开发时间要求,requirements 表示每个需求工作量大小,N 为 requirements长度, * 1 ≤ N/2 ≤ M ≤ N ≤ 10000

By Ne0inhk