1"use strict";(self.webpackChunknonebot=self.webpackChunknonebot||[]).push([["2975"],{68553(e,n,s){s.r(n),s.d(n,{metadata:()=>i,default:()=>a,frontMatter:()=>r,contentTitle:()=>c,toc:()=>o,assets:()=>l});var i=JSON.parse('{"id":"editor-support","title":"\u7F16\u8F91\u5668\u652F\u6301","description":"\u914D\u7F6E\u7F16\u8F91\u5668\u4EE5\u83B7\u5F97\u6700\u4F73\u4F53\u9A8C","source":"@site/docs/editor-support.md","sourceDirName":".","slug":"/editor-support","permalink":"/docs/next/editor-support","draft":false,"unlisted":false,"editUrl":"https://github.com/nonebot/nonebot2/edit/master/website/docs/editor-support.md","tags":[],"version":"current","lastUpdatedBy":"StarHeart","lastUpdatedAt":1785574664000,"sidebarPosition":2,"frontMatter":{"sidebar_position":2,"description":"\u914D\u7F6E\u7F16\u8F91\u5668\u4EE5\u83B7\u5F97\u6700\u4F73\u4F53\u9A8C"},"sidebar":"tutorial","previous":{"title":"\u5FEB\u901F\u4E0A\u624B","permalink":"/docs/next/quick-start"},"next":{"title":"\u624B\u52A8\u521B\u5EFA\u9879\u76EE","permalink":"/docs/next/tutorial/application"}}'),t=s(62540),d=s(43023);let r={sidebar_position:2,description:"\u914D\u7F6E\u7F16\u8F91\u5668\u4EE5\u83B7\u5F97\u6700\u4F73\u4F53\u9A8C"},c="\u7F16\u8F91\u5668\u652F\u6301",l={},o=[{value:"CLI \u811A\u624B\u67B6\u63D0\u4F9B\u7684\u7F16\u8F91\u5668\u5DE5\u5177\u652F\u6301",id:"cli-\u811A\u624B\u67B6\u63D0\u4F9B\u7684\u7F16\u8F91\u5668\u5DE5\u5177\u652F\u6301",level:2},{value:"\u652F\u6301\u7684\u5F00\u53D1\u5DE5\u5177",id:"\u652F\u6301\u7684\u5F00\u53D1\u5DE5\u5177",level:3},{value:"\u914D\u7F6E\u6548\u679C",id:"\u914D\u7F6E\u6548\u679C",level:3},{value:"\u7F16\u8F91\u5668\u63A8\u8350\u914D\u7F6E",id:"\u7F16\u8F91\u5668\u63A8\u8350\u914D\u7F6E",level:2},{value:"Visual Studio Code",id:"visual-studio-code",level:3},{value:"\u5176\u4ED6",id:"\u5176\u4ED6",level:3}];function h(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,d.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"\u7F16\u8F91\u5668\u652F\u6301",children:"\u7F16\u8F91\u5668\u652F\u6301"})}),"\n",(0,t.jsxs)(n.p,{children:["\u6846\u67B6\u57FA\u4E8E ",(0,t.jsx)(n.a,{href:"https://www.python.org/dev/peps/pep-0484/",children:"PEP 484"}),"\u3001",(0,t.jsx)(n.a,{href:"https://www.python.org/dev/peps/pep-0561/",children:"PEP 561"}),"\u3001",(0,t.jsx)(n.a,{href:"https://www.python.org/dev/peps/pep-0008/",children:"PEP 8"})," \u7B49\u89C4\u8303\u8FDB\u884C\u5F00\u53D1\u5E76\u4E14",(0,t.jsx)(n.strong,{children:"\u62E5\u6709\u5B8C\u6574\u7C7B\u578B\u6CE8\u89E3"}),"\u3002\u6846\u67B6\u4F7F\u7528 Pyright\uFF08Pylance\uFF09\u5DE5\u5177\u8FDB\u884C\u7C7B\u578B\u68C0\u67E5\uFF0C\u786E\u4FDD\u4EE3\u7801\u53EF\u4EE5\u88AB\u7F16\u8F91\u5668\u6B63\u786E\u89E3\u6790\u3002"]}),"\n",(0,t.jsx)(n.h2,{id:"cli-\u811A\u624B\u67B6\u63D0\u4F9B\u7684\u7F16\u8F91\u5668\u5DE5\u5177\u652F\u6301",children:"CLI \u811A\u624B\u67B6\u63D0\u4F9B\u7684\u7F16\u8F91\u5668\u5DE5\u5177\u652F\u6301"}),"\n",(0,t.jsxs)(n.p,{children:["\u5728\u4F7F\u7528 NB-CLI ",(0,t.jsx)(n.a,{href:"/docs/next/quick-start#%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE",children:"\u521B\u5EFA\u9879\u76EE"}),"\u65F6\uFF0C\u5982\u679C\u9009\u62E9\u4E86\u7528\u4E8E\u63D2\u4EF6\u5F00\u53D1\u7684 ",(0,t.jsx)(n.code,{children:"simple"})," \u6A21\u677F\uFF0C\u5176\u4F1A\u6839\u636E\u9009\u62E9\u7684\u5F00\u53D1\u5DE5\u5177\uFF0C",(0,t.jsxs)(n.strong,{children:["\u81EA\u52A8\u914D\u7F6E\u9879\u76EE\u6839\u76EE\u5F55\u4E0B\u7684 ",(0,t.jsx)(n.code,{children:".vscode/extensions.json"})," \u6587\u4EF6"]}),"\uFF0C\u4EE5\u63A8\u8350\u6700\u5339\u914D\u7684 VS Code \u63D2\u4EF6\uFF0C\u540C\u65F6\u81EA\u52A8\u5C06\u76F8\u5E94\u7684\u9884\u8BBE\u914D\u7F6E\u9879\u5199\u5165 ",(0,t.jsx)(n.code,{children:"pyproject.toml"})," \u4F5C\u4E3A\u201C\u5F00\u7BB1\u5373\u7528\u201D\u914D\u7F6E\uFF0C\u4ECE\u800C\u63D0\u5347\u5F00\u53D1\u4F53\u9A8C\u3002"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"[?] \u9009\u62E9\u4E00\u4E2A\u8981\u4F7F\u7528\u7684\u6A21\u677F: simple (\u63D2\u4EF6\u5F00\u53D1\u8005)\n...\n[?] \u8981\u4F7F\u7528\u54EA\u4E9B\u5F00\u53D1\u5DE5\u5177?\n"})}),"\n",(0,t.jsx)(n.h3,{id:"\u652F\u6301\u7684\u5F00\u53D1\u5DE5\u5177",children:"\u652F\u6301\u7684\u5F00\u53D1\u5DE5\u5177"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Pyright (Pylance)"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance",children:"VS Code \u63D2\u4EF6"})," | ",(0,t.jsx)(n.a,{href:"https://github.com/microsoft/pyright",children:"\u9879\u76EE"})," | ",(0,t.jsx)(n.a,{href:"https://microsoft.github.io/pyright/",children:"\u6587\u6863"})]}),"\n",(0,t.jsx)(n.p,{children:"\u7531\u5FAE\u8F6F\u5F00\u53D1\u7684 Python \u9759\u6001\u7C7B\u578B\u68C0\u67E5\u5668\u548C\u8BED\u8A00\u670D\u52A1\u5668\uFF0C\u63D0\u4F9B\u667A\u80FD\u611F\u77E5\u3001\u8DF3\u8F6C\u5B9A\u4E49\u3001\u67E5\u627E\u5F15\u7528\u3001\u5B9E\u65F6\u9519\u8BEF\u68C0\u67E5\u7B49\u5F3A\u5927\u529F\u80FD\u3002"}),"\n",(0,t.jsx)(n.p,{children:"\u4F5C\u4E3A VS Code \u5B98\u65B9\u63A8\u8350\u7684 Python \u8BED\u8A00\u670D\u52A1\u5668\uFF0C\u4E0E Pylance \u6269\u5C55\u914D\u5408\u4F7F\u7528\uFF0C\u80FD\u63D0\u4F9B\u6700\u6D41\u7545\u3001\u6700\u51C6\u786E\u7684\u4EE3\u7801\u8865\u5168\u548C\u7C7B\u578B\u63A8\u65AD\u4F53\u9A8C\uFF0C\u662F\u7EDD\u5927\u591A\u6570\u5F00\u53D1\u8005\u7684\u9996\u9009\u3002"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Ruff"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff",children:"VS Code \u63D2\u4EF6"})," | ",(0,t.jsx)(n.a,{href:"https://github.com/astral-sh/ruff",children:"\u9879\u76EE"})," | ",(0,t.jsx)(n.a,{href:"https://docs.astral.sh/ruff/",children:"\u6587\u6863"})]}),"\n",(0,t.jsxs)(n.p,{children:["\u4E00\u4E2A\u7528 Rust \u7F16\u5199\u7684\u8D85\u5FEB Python \u4EE3\u7801\u683C\u5F0F\u5316\u548C lint \u5DE5\u5177\uFF0C\u5B8C\u5168\u517C\u5BB9 ",(0,t.jsx)(n.code,{children:"black"}),"\u3001",(0,t.jsx)(n.code,{children:"isort"}),"\u3001",(0,t.jsx)(n.code,{children:"flake8"})," \u7B49\u4E3B\u6D41\u5DE5\u5177\u7684\u89C4\u5219\u3002"]}),"\n",(0,t.jsxs)(n.p,{children:["\u901F\u5EA6\u6781\u5FEB\uFF08\u6BD4 ",(0,t.jsx)(n.code,{children:"black"})," \u548C ",(0,t.jsx)(n.code,{children:"flake8"})," \u5FEB 100 \u500D\u4EE5\u4E0A\uFF09\uFF0C\u914D\u7F6E\u7B80\u5355\uFF0C\u80FD\u81EA\u52A8\u683C\u5F0F\u5316\u4EE3\u7801\u5E76\u68C0\u6D4B\u6F5C\u5728\u9519\u8BEF\u3001\u4EE3\u7801\u98CE\u683C\u95EE\u9898\uFF08\u5C24\u5176\u662F\u8BEF\u7528\u540C\u6B65\u7F51\u7EDC\u8BF7\u6C42\u5E93\uFF09\uFF0C\u662F\u63D0\u5347\u4EE3\u7801\u8D28\u91CF\u548C\u5F00\u53D1\u6548\u7387\u7684\u5FC5\u5907\u5229\u5668\u3002"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"MyPy"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=matangover.mypy",children:"VS Code \u63D2\u4EF6"})," | ",(0,t.jsx)(n.a,{href:"https://github.com/python/mypy",children:"\u9879\u76EE"})," | ",(0,t.jsx)(n.a,{href:"https://mypy.readthedocs.io/en/stable/index.html",children:"\u6587\u6863"})]}),"\n",(0,t.jsx)(n.p,{children:"\u4E00\u4E2A\u5B98\u65B9\u5B9E\u73B0\u7684 Python \u9759\u6001\u7C7B\u578B\u68C0\u67E5\u5668\uFF0C\u901A\u8FC7\u5206\u6790\u4EE3\u7801\u4
1E2D\u7684\u7C7B\u578B\u6CE8\u89E3\u6765\u53D1\u73B0\u7C7B\u578B\u9519\u8BEF\u3002"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"BasedPyright"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=detachhead.basedpyright",children:"VS Code \u63D2\u4EF6"})," | ",(0,t.jsx)(n.a,{href:"https://github.com/DetachHead/basedpyright",children:"\u9879\u76EE"})," | ",(0,t.jsx)(n.a,{href:"https://docs.basedpyright.com/",children:"\u6587\u6863"})]}),"\n",(0,t.jsx)(n.p,{children:"\u4E00\u4E2A\u57FA\u4E8E Pyright \u7684\u3001\u7531\u793E\u533A\u7EF4\u62A4\u7684\u66FF\u4EE3\u6027 Python \u8BED\u8A00\u670D\u52A1\u5668\uFF0C\u65E8\u5728\u63D0\u4F9B\u66F4\u4F18\u7684\u7C7B\u578B\u68C0\u67E5\u652F\u6301\u4E0E\u63A5\u8FD1 Pylance \u7684\u66F4\u597D\u7684\u4F7F\u7528\u4F53\u9A8C\u3002"}),"\n",(0,t.jsx)(n.p,{children:"\u76F8\u8F83\u4E8E Pylance\uFF0CBasedPyright \u5141\u8BB8\u914D\u5408 VS Code \u4E4B\u5916\u7684\u5176\u4ED6\u7F16\u8F91\u5668\u4F7F\u7528\uFF0C\u540C\u65F6\u4E5F\u590D\u523B\u4E86\u90E8\u5206 Pylance \u9650\u5B9A\u7684\u529F\u80FD\u3002"}),"\n",(0,t.jsx)(n.p,{children:"\u5982\u679C\u60A8\u662F\u9AD8\u7EA7\u7528\u6237\uFF0C\u5E0C\u671B\u5C1D\u8BD5 Pylance \u7684\u66FF\u4EE3\u65B9\u6848\uFF0C\u6216\u9047\u5230 Pylance \u5728\u7279\u5B9A\u73AF\u5883\u4E0B\u7684\u517C\u5BB9\u6027\u95EE\u9898\uFF0C\u53EF\u4EE5\u8003\u8651\u4F7F\u7528 BasedPyright\u3002"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.admonition,{title:"\u63D0\u793A",type:"warning",children:[(0,t.jsxs)(n.p,{children:["\u4E3A\u907F\u514D ",(0,t.jsx)(n.code,{children:"Pylance"})," \u548C ",(0,t.jsx)(n.code,{children:"BasedPyright"})," \u76F8\u4E92\u51B2\u7A81\u5BFC\u81F4\u914D\u7F6E\u6DF7\u4E71\u751A\u81F3\u5F02\u5E38\uFF0C\u811A\u624B\u67B6\u9ED8\u8BA4\u4E0D\u5141\u8BB8\u5728\u521B\u5EFA\u9879\u76EE\u65F6\u540C\u65F6\u914D\u7F6E\u8FD9\u4E24\u8005\u3002"]}),(0,t.jsxs)(n.p,{children:["\u5982\u679C\u786E\u5B9E\u9700\u8981\u540C\u65F6\u4F7F\u7528\uFF0C\u8BF7\u5728\u521B\u5EFA\u9879\u76EE\u65F6\u9009\u62E9 Pylance/Pyright \u5E76\u6839\u636E",(0,t.jsx)(n.a,{href:"https://docs.basedpyright.com/latest/installation/ides/#vscode-vscodium",children:"\u76F8\u5173\u6587\u6863"}),"\u8FDB\u884C\u624B\u52A8\u914D\u7F6E\u3002"]})]}),"\n",(0,t.jsx)(n.h3,{id:"\u914D\u7F6E\u6548\u679C",children:"\u914D\u7F6E\u6548\u679C"}),"\n",(0,t.jsxs)(n.p,{children:["\u9009\u62E9\u4E0A\u8FF0\u5DE5\u5177\u540E\uFF0CNB-CLI \u4F1A\u5728\u60A8\u7684\u9879\u76EE\u6839\u76EE\u5F55\u4E0B\u751F\u6210\u4E00\u4E2A ",(0,t.jsx)(n.code,{children:".vscode/extensions.json"})," \u6587\u4EF6\u5E76\u5728 ",(0,t.jsx)(n.code,{children:"pyproject.toml"})," \u6587\u4EF6\u4E2D\u5199\u5165\u76F8\u5E94\u7684\u914D\u7F6E\u9879\u3002\u5F53\u60A8\u5728 VS Code \u4E2D\u6253\u5F00\u6B64\u9879\u76EE\u65F6\uFF0CIDE\n\u4F1A\u81EA\u52A8\u5F39\u51FA\u63D0\u793A\uFF0C\u5EFA\u8BAE\u60A8\u5B89\u88C5\u8FD9\u4E9B\u63A8\u8350\u7684\u6269\u5C55\uFF0C\u4E00\u952E\u5373\u53EF\u5B8C\u6210\u5F00\u53D1\u73AF\u5883\u7684\u521D\u59CB\u5316\uFF0C\u8BA9\u60A8\u53EF\u4EE5\u7ACB\u5373\u5F00\u59CB\u7F16\u5199\u4EE3\u7801\uFF0C\u65E0\u9700\u624B\u52A8\u641C\u7D22\u548C\u5B89\u88C5\u63D2\u4EF6\u3002"]}),"\n",(0,t.jsx)(n.h2,{id:"\u7F16\u8F91\u5668\u63A8\u8350\u914D\u7F6E",children:"\u7F16\u8F91\u5668\u63A8\u8350\u914D\u7F6E"}),"\n",(0,t.jsx)(n.h3,{id:"visual-studio-code",children:"Visual Studio Code"}),"\n",(0,t.jsxs)(n.p,{children:["\u5728 Visual Studio Code \u4E2D\uFF0C\u53EF\u4EE5\u4F7F\u7528 Pylance Language Server \u5E76\u542F\u7528 ",(0,t.jsx)(n.code,{children:"Type Checking"})," \u914D\u7F6E\u4EE5\u8FBE\u5230\u6700\u4F73\u5F00\u53D1\u4F53\u9A8C\u3002"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\u5728 VSCode \u63D2\u4EF6\u89C6\u56FE\u641C\u7D22\u5E76\u5B89\u88C5 ",(0,t.jsx)(n.code,{children:"Python (ms-python.python)"})," \u548C ",(0,t.jsx)(n.code,{children:"Pylance (ms-python.vscode-pylance)"})," \u63D2\u4EF6\u3002"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["\u4FEE\u6539 VSCode \u914D\u7F6E\n\u5728 VSCode \u8BBE\u7F6E\u89C6\u56FE\u641C\u7D22\u914D\u7F6E\u9879 ",(0,t.jsx)(n.code,{children:"Python: Language Server"})," \u5E76\u5C06\u5176\u503C\u8BBE\u7F6E\u4E3A ",(0,t.jsx)(n.code,{children:"Pylance"}),"\uFF0C\u641C\u7D22\u914D\u7F6E\u9879 ",(0,t.jsx)(n.code,{children:"Python > Analysis: Type Checking Mode"})," \u5E76\u5C06\u5176\u503C\u8BBE\u7F6E\u4E3A ",(0,t.jsx)(n.code,{children:"basic"}),"\u3002"]}),"\n",(0,t.jsxs)(n.p,{children:["\u6216\u8005\u5411\u9879\u76EE ",(0,t.jsx)(n.code,{children:".vscode"})," \u6587\u4EF6\u5939\u4E2D\u914D\u7F6E\u6587\u4EF6\u6DFB\u52A0\u4EE5\u4E0B\u5185\u5BB9\uFF1A"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",metastring:"title=settings.json",children:'{\n "python.languageServer": "Pylance",\n "python.analysis.typeCheckingMode": "basic"\n}\n'})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"\u5176\u4ED6",children:"\u5176\u4ED6"}),"\n",(0,t.jsxs)(n.p,{children:["\u6B22\u8FCE\u63D0\u4EA4 Pull Request \u6DFB\u52A0\u5176\u4ED6\u7F16\u8F91\u5668\u914D\u7F6E\u63A8\u8350\u3002\u70B9\u51FB\u5DE6\u4E0B\u89D2 ",(0,t.jsx)(n.code,{children:"Edit this page"})," \u524D\u5F80\u7F16\u8F91\u3002"]})]})}function a(e={}){let{wrapper:n}={...(0,d.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},43023(e,n,s){s.d(n,{R:()=>r,x:()=>c});var i=s(63696);let t={},d=i.createContext(t);function r(e){let n=i.useContext(d);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),i.createElement(d.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.