検索
ホームページ開発ツールVSCodevscode スマート プロンプト プラグインの共有:nutui-vscode-extension

この記事では、Vscode スマート プロンプト プラグイン: Nutui-vscode-extension を共有し、それを 360 度理解して、その使用方法を紹介します。みんなに役立つでしょう!

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

NutUI v3 バージョンがリリースされてから 1 年が経過し、グループ内の社内外の開発者が開発し、さまざまなビジネス シナリオで使用しています。開発者から提起されたさまざまな問題を解決し、コンポーネントの機能を拡張し、開発者の要求にできる限り応えるために、積極的に努力していきたいと思っています。今年以降、マルチテクノロジー スタック (React)、コンポーネント レベルの UI カスタマイズ、国際化、およびコード インテリジェント プロンプト機能が段階的に追加されました。この記事では、コード インテリジェント プロンプト (Vscode プラグイン) の機能を紹介し、NutUI-Vscode の実装の詳細な分析を示します。 [推奨学習: 「vscode 入門チュートリアル 」]

直感的なエクスペリエンス

コード スマートとはプロンプト ?誰もが直感的に理解できるように、まず次の 2 つの gif 画像を注意深く観察してみましょう~

コンポーネント ライブラリにはコード プロンプトがありません

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

コンポーネント ライブラリにスマート プロンプトが追加された後

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

#をご覧になって何か質問はありますか?上の 2 つの写真ですが、どう思いますか?もちろん、スマート プロンプトを使用すると、ドキュメントをすばやく表示したり、コンポーネントのプロパティを表示したりするときに、確認が非常に便利になり、開発効率が大幅に向上することは間違いありません。それでは、実際に体験してみましょう~

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

使用ガイド

ヒント: NutUI 公式 Web サイト開発ツールのサポート、こちらもご覧ください簡単な紹介ああ ~

https://nutui.jd.com/#/ide

  • nutui-vscode- を vscode# にインストールします## 拡張機能 プラグイン

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

  • vetur プラグインをインストールします。このプラグインを知らない場合は、ここに概要があります

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

上記 2 つのプラグインをインストールした後、

vscodeNutUI のスマート プロンプト機能を楽しく体験できます。簡単すぎませんか~

体験は終了しました。私と一緒にそれに慣れてください?原則。

vscode プラグインを開発しているので、まずその開発、デバッグ、リリースのプロセスをよく理解しておく必要があります。書類が渡されます。こちらをご覧ください:

https://code.visualstudio.com/docs

基本的な

vscode 開発プロセスに慣れたら、手順に従ってください。 step このスマートリマインダー機能の謎を解き明かす~

360 総合解説

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

すぐにコンポーネントのドキュメントを表示

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

上の図からわかるように、開発に

NutUI を使用すると、コンポーネント ## の作成が完了します。 #nut-button、マウスをコンポーネントの上に置くと、プロンプトが表示されます。プロンプトをクリックすると、Button コンポーネントの公式ドキュメントが開きます。対応する API をすぐに確認して、それを使用して開発できます。 まず、

vscode

によって生成されたプロジェクトで対応するフック関数 activate を見つけ、その中に Provider を登録し、ターゲットにする必要があります。定義されたタイプ ファイル files は、provideHover を通じて解析されます。 <pre class='brush:php;toolbar:false;'>const files = [&amp;#39;vue&amp;#39;, &amp;#39;typescript&amp;#39;, &amp;#39;javascript&amp;#39;, &amp;#39;react&amp;#39;]; export function activate(context: vscode.ExtensionContext) { context.subscriptions.push( vscode.languages.registerHoverProvider(files, { provideHover }) ); }</pre>

provideHover

がどのように実装されているかを詳しく見てみましょう。 <pre class='brush:php;toolbar:false;'>const LINK_REG = /(?&lt;=&lt;nut-)([\w-]+)/g; const BIG_LINK_REG = /(?&lt;=&lt;Nut-)([\w-])+/g; const provideHover = (document: vscode.TextDocument, position: vscode.Position) =&gt; { const line = document.lineAt(position); //根据鼠标的位置读取当前所在行 const componentLink = line.text.match(LINK_REG) ?? [];//对 nut-开头的字符串进行匹配 const componentBigLink = line.text.match(BIG_LINK_REG) ?? []; const components = [...new Set([...componentLink, ...componentBigLink.map(kebabCase)])]; //匹配出当前Hover行所包含的组件 if (components.length) { const text = components .filter((item: string) =&gt; componentMap[item]) .map((item: string) =&gt; { const { site } = componentMap[item]; return new vscode.MarkdownString( `[NutUI -&gt; $(references) 请查看 ${bigCamelize(item)} 组件官方文档](${DOC}${site})\n`, true ); }); return new vscode.Hover(text); } };</pre>

vscode

によって提供される API と対応する通常のマッチングを通じて、現在の Hover 行に含まれるコンポーネントを取得し、走査します。さまざまなコンポーネントに対応する MarkDownString を返し、最後に vscode.Hover オブジェクトを返します。 注意深い方は、この中に

componentMap

も含まれていることにお気づきかもしれません。これは、すべてのコンポーネントと props の公式 Web サイトのリンク アドレスを含むオブジェクトです。情報。その一般的な内容は次のとおりです: <pre class='brush:php;toolbar:false;'>export interface ComponentDesc { site: string; props?: string[]; } export const componentMap: Record&lt;string, ComponentDesc&gt; = { actionsheet: { site: &amp;#39;/actionsheet&amp;#39;, props: [&quot;v-model:visible=&amp;#39;&amp;#39;&quot;] }, address: { site: &amp;#39;/address&amp;#39;, props: [&quot;v-model:visible=&amp;#39;&amp;#39;&quot;] }, addresslist: { site: &amp;#39;/addresslist&amp;#39;, props: [&quot;data=&amp;#39;&amp;#39;&quot;] } ... }</pre><p>为了能够保持每次组件的更新都会及时同步,<code>componentMap 这个对象的生成会通过一个本地脚本执行然后自动注入,每次在更新发布插件的时候都会去执行一次,保证和现阶段的组件以及对应的信息保持一致。这里的组件以及它所包含的信息都需要从项目目录中获取,这里的实现和后面讲的一些内容相似,大家可以先想一下实现方式,具体实现细节在后面会一起详解~

组件自动补全

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

我们使用 NutUI 组件库进行项目开发,当我们输入 nut- 时,编辑器会给出我们目前组件库中包含的所有组件,当我们使用上下键快速选中其中一个组件进行回车,这时编辑器会自动帮我们补全选中的组件,并且能够带出当前所选组件的其中一个 props,方便我们快速定义。

这里的实现,同样我们需要在 vscode 的钩子函数 activate 中注册一个 Provider

vscode.languages.registerCompletionItemProvider(files, {
    provideCompletionItems,
    resolveCompletionItem
})

其中,provideCompletionItems ,需要输出用于自动补全的当前组件库中所包含的组件 completionItems

const provideCompletionItems = () => {
  const completionItems: vscode.CompletionItem[] = [];
  Object.keys(componentMap).forEach((key: string) => {
    completionItems.push(
      new vscode.CompletionItem(`nut-${key}`, vscode.CompletionItemKind.Field),
      new vscode.CompletionItem(bigCamelize(`nut-${key}`), vscode.CompletionItemKind.Field)
    );
  });
  return completionItems;
};

resolveCompletionItem 定义光标选中当前自动补全的组件时触发的动作,这里我们需要重新定义光标的位置。

const resolveCompletionItem = (item: vscode.CompletionItem) => {
  const name = kebabCase(<string>item.label).slice(4);
  const descriptor: ComponentDesc = componentMap[name];

  const propsText = descriptor.props ? descriptor.props : &#39;&#39;;
  const tagSuffix = `</${item.label}>`;
  item.insertText = `<${item.label} ${propsText}>${tagSuffix}`;

  item.command = {
    title: &#39;nutui-move-cursor&#39;,
    command: &#39;nutui-move-cursor&#39;,
    arguments: [-tagSuffix.length - 2]
  };
  return item;
};

其中, arguments代表光标的位置参数,一般我们自动补全选中之后光标会在 props 的引号中,便于用来定义,我们结合目前补全的字符串的规律,这里光标的位置是相对确定的。就是闭合标签的字符串长度 -tagSuffix.length,再往前面 2 个字符的位置。即 arguments: [-tagSuffix.length - 2]

最后,nutui-move-cursor 这个命令的执行需要在 activate 钩子函数中进行注册,并在 moveCursor 中执行光标的移动。这样就实现了我们的自动补全功能。

const moveCursor = (characterDelta: number) => {
  const active = vscode.window.activeTextEditor!.selection.active!;
  const position = active.translate({ characterDelta });
  vscode.window.activeTextEditor!.selection = new vscode.Selection(position, position);
};

export function activate(context: vscode.ExtensionContext) {
  vscode.commands.registerCommand(&#39;nutui-move-cursor&#39;, moveCursor);
}

什么?有了这些还不够?有没有更加智能化的,我不用看组件文档,照样可以轻松开发。emm~~~,当然,请听下文讲解

vetur 智能化提示

提到 vetur,熟悉 Vue 的同学一定不陌生,它是 Vue 官方开发的插件,具有代码高亮提示、识别 Vue 文件等功能。通过借助于它,我们可以做到自己组件库里的组件能够自动识别 props 并进行和官网一样的详细说明。

vetur详细介绍看这里

https://vuejs.github.io/vetur/guide/component-data.html#workspace-component-data

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

像上面一样,我们在使用组件 Button 时,它会自动提示组件中定义的所有属性。当按上下键快速切换时,右侧会显示当前选中属性的详细说明,这样,我们无需查看文档,这里就可以看到每个属性的详细描述以及默认值,这样的开发简直爽到起飞~

仔细读过文档就可以了解到,vetur 已经提供给了我们配置项,我们只需要简单配置下即可,像这样:

//packag.json
{
    ...
    "vetur": {
        "tags": "dist/smartips/tags.json",
        "attributes": "dist/smartips/attributes.json"
    },
    ...
}

tags.jsonattributes.json 需要包含在我们的打包目录中。当前这两个文件的内容,我们也可以看下:

// tags.json
{
  "nut-actionsheet": {
      "attributes": [
        "v-model:visible",
        "menu-items",
        "option-tag",
        "option-sub-tag",
        "choose-tag-value",
        "color",
        "title",
        "description",
        "cancel-txt",
        "close-abled"
      ]
  },
  ...
}
//attributes.json
{
    "nut-actionsheet/v-model:visible": {
        "type": "boolean",
        "description": "属性说明:遮罩层可见,默认值:false"
    },
    "nut-actionsheet/menu-items": {
        "type": "array",
        "description": "属性说明:列表项,默认值:[ ]"
    },
    "nut-actionsheet/option-tag": {
        "type": "string",
        "description": "属性说明:设置列表项标题展示使用参数,默认值:&#39;name&#39;"
    },
    ...
}

很明显,这两个文件也是需要我们通过脚本生成。和前面提到的一样,这里涉及到组件以及和它们关联的信息,为了能够保持一致并且维护一份,我们这里通过每个组件源码下面的 doc.md 文件来获取。因为,这个文件中包含了组件的 props 以及它们的详细说明和默认值。

组件 props 详细信息

tags, attibutes, componentMap 都需要获取这些信息。 我们首先来看看 doc.md 中都包含什么?

## 介绍
## 基本用法
...
### Prop

| 字段     | 说明                                                             | 类型   | 默认值 |
| -------- | ---------------------------------------------------------------- | ------ | ------ |
| size     | 设置头像的大小,可选值为:large、normal、small,支持直接输入数字   | String | normal |
| shape    | 设置头像的形状,可选值为:square、round            | String | round  |
...

每个组件的 md 文档,我们预览时是通过 vite 提供的插件 vite-plugin-md,来生成对应的 html,而这个插件里面引用到了 markdown-it 这个模块。所以,我们现在想要解析 md 文件,也需要借助于 markdown-it 这个模块提供的 parse API.

// Function getSources
let sources = MarkdownIt.parse(data, {});
// data代表文档内容,sources代表解析出的list列表。这里解析出来的是Token列表。

vscode スマート プロンプト プラグインの共有:nutui-vscode-extension

Token 中,我们只关心 type 即可。因为我们要的是 props,这部分对应的 Tokentype 就是 table_opentable_close 中间所包含的部分。考虑到一个文档中有多个 table。这里我们始终取第一个,*** 这也是要求我们的开发者在写文档时需要注意的地方 ***。

拿到了中间的部分之后,我们只要在这个基础上再次进行筛选,选出 tr_opentr_close 中间的部分,然后再筛选中间 type = inline 的部分。最后取 Token 这个对象中的 content 字段即可。然后在根据上面三个文件不同的需求做相应的处理即可。

const getSubSources = (sources) => {
  let sourcesMap = [];
  const startIndex = sources.findIndex((source) => source.type === TYPE_IDENTIFY_OPEN);
  const endIndex = sources.findIndex((source) => source.type === TYPE_IDENTIFY_CLOSE);
  sources = sources.slice(startIndex, endIndex + 1);
  while (sources.filter((source) => source.type === TR_TYPE_IDENTIFY_OPEN).length) {
    let trStartIndex = sources.findIndex((source) => source.type === TR_TYPE_IDENTIFY_OPEN);
    let trEndIndex = sources.findIndex((source) => source.type === TR_TYPE_IDENTIFY_CLOSE);
    sourcesMap.push(sources.slice(trStartIndex, trEndIndex + 1));
    sources.splice(trStartIndex, trEndIndex - trStartIndex + 1);
  }
  return sourcesMap;
};

好了,以上就是解析的全部内容了。总结起来就那么几点:

1、创建一个基于 vscode 的项目,在它提供的钩子中注册不同行为的 commandlanguages,并实现对应的行为

2、结合 vetur,配置 packages.json

3、针对 map json 文件,需要提供相应的生成脚本,确保信息的一致性。这里解析 md 需要使用 markdown-it 给我们提供的 parse 功能。

最后

本文从直观体验到实际使用再到实现原理分析,一步步带着大家感受了 NutUIVSCode 结合,给大家带来的福利,让大家能在开发上有了全新的体验,同时,也让我们的组件库越发充满了魅力。接下来,让我们共同携手,让它发挥出更加强大的价值~

更多关于VSCode的相关知识,请访问:vscode教程!!

以上がvscode スマート プロンプト プラグインの共有:nutui-vscode-extensionの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Visual Studioの価値:その利点に対するコストを比較検討しますVisual Studioの価値:その利点に対するコストを比較検討しますApr 12, 2025 am 12:06 AM

VisualStudioは、強力で包括的であるため、.NET開発において非常に価値があります。高コストとリソースの消費にもかかわらず、それがもたらす効率の改善と開発の経験は重要です。コミュニティは、個々の開発者や小さなチームに最適です。大企業は、専門家や企業に適しています。

Visual Studioの可用性:どのエディションが無料ですか?Visual Studioの可用性:どのエディションが無料ですか?Apr 10, 2025 am 09:44 AM

VisualStudioの無料バージョンには、VisualStudioCommunityとVisualStudiocodeが含まれます。 1. VisualStudioCommunityは、個々の開発者、オープンソースプロジェクト、小規模チームに適しています。それは強力で、個々のプロジェクトや学習プログラミングに適しています。 2。VisualStudioCodeは、複数のプログラミング言語と拡張機能をサポートする軽量コードエディターです。スタートアップの速度と低いリソースの使用量が速いため、柔軟性とスケーラビリティが必要な開発者に適しています。

Windows 8用のVisual Studioをインストールする方法は?Windows 8用のVisual Studioをインストールする方法は?Apr 09, 2025 am 12:19 AM

Windows 8にVisualStudioをインストールする手順は次のとおりです。1。公式Microsoft WebサイトからVisualStudioCommunity2019インストールパッケージをダウンロードします。 2.インストーラーを実行し、必要なコンポーネントを選択します。 3.インストールが完了した後に使用できます。 Windows 8互換性のあるコンポーネントを選択し、十分なディスクスペースと管理者の権利があることを確認してください。

私のコンピュータはコードとコードを実行できますか?私のコンピュータはコードとコードを実行できますか?Apr 08, 2025 am 12:16 AM

VSCODEは、基本システムの要件が満たされている限り、ほとんどの最新のコンピューターで実行できます。1。オペレーティングシステム:Windows 7以降、MacOS 10.9以降、Linux。 2。プロセッサ:1.6GHz以下。 3。メモリ:少なくとも2GB RAM(4GB以上推奨); 4。ストレージスペース:少なくとも200MBの利用可能なスペース。設定を最適化し、拡張使用を削減することにより、低構成コンピューターでスムーズなユーザーエクスペリエンスを取得できます。

プログラムをWindows 8と互換性のあるものにするにはどうすればよいですか?プログラムをWindows 8と互換性のあるものにするにはどうすればよいですか?Apr 07, 2025 am 12:09 AM

Windows 8でプログラムをスムーズに実行するには、次の手順が必要です。1。互換性モードを使用して、コードを介してこのモードを検出して有効にします。 2. API呼び出しを調整し、Windowsバージョンに従って適切なAPIを選択します。 3.パフォーマンスの最適化を実行し、互換性モードの使用を避け、API呼び出しを最適化し、一般的なコントロールを使用してください。

VSコードはWindows 8で動作しますか?VSコードはWindows 8で動作しますか?Apr 06, 2025 am 12:13 AM

はい、vscodeisCompatibleWithWindows8.1)theinstallerfromthevscodesurethelatest.netframeworkisInstalled.2)installextensionsionsingTheCommandline、NotingSomeMayloadSlower.3)ManageByClusnnnnyRoightEntions、Light -omayloadSlower.3)

VSコードとVisual Studioの違いは何ですか?VSコードとVisual Studioの違いは何ですか?Apr 05, 2025 am 12:07 AM

VSCODEは、複数の言語と拡張機能に適した軽量コードエディターです。 VisualStudioは、主に.NET開発に使用される強力なIDEです。 1.VSCODEは電子に基づいており、クロスプラットフォームをサポートし、モナコエディターを使用します。 2。VisualStudioは、Microsoftの独立したテクノロジースタックを使用して、デバッグとコンパイラを統合します。 3.VSCODEは単純なタスクに適しており、VisualStudioは大規模なプロジェクトに適しています。

Windows 7で実行できるコードエディターはどれですか?Windows 7で実行できるコードエディターはどれですか?Apr 03, 2025 am 12:01 AM

Windows 7で実行できるコードエディターには、メモ帳、sublimeText、およびAtomが含まれます。 1.NOTEPAD:古いシステムに適した軽量で高速な起動。 2.SublimeText:強力で支払われます。 3. atom:非常にカスタマイズ可能ですが、ゆっくりと開始します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター