如何在 vscode/visual studio 代码中的 javascript/node.js 文件中使用语法高亮/自动完成/自动格式化 sql 命令?

cal*_*dio 7 sqlite node.js visual-studio-code vscode-settings

.js 文件中的颜色突出显示

.sql 文件中的颜色突出显示

现在,sql 命令被视为一个字符串,如果它在 javascript 函数中,则必须通过 capslock 手动格式化。例如:

const sqlite3 = require('sqlite3').verbose();

let db = new sqlite3.Database('../db/test.db');

let sql = `create table person (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    gender VARCHAR(6) NOT NULL,
    date_of_birth DATE NOT NULL,
    email VARCHAR(150));
insert into person (first_name, last_name, gender, date_of_birth) values ('Anne', 'Smith', 'Female', '1988-01-09');
insert into person (first_name, last_name, email, gender, date_of_birth) values ('Jake', 'Jones', 'jake@gmail.com', 'Male', '1990-12-31');`;
Run Code Online (Sandbox Code Playgroud)

长 sql 命令将在我的 vscode 中显示为绿色文本块(遵循我的字符串配色方案)

所需的配色方案就像我把它放在一个 sql 文件中,例如:

create table person (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    gender VARCHAR(6) NOT NULL,
    date_of_birth DATE NOT NULL,
    email VARCHAR(150));
enter image description hereinsert into person (first_name, last_name, gender, date_of_birth) values ('Anne', 'Smith', 'Female', '1988-01-09');
insert into person (first_name, last_name, email, gender, date_of_birth) values ('Jake', 'Jones', 'jake@gmail.com', 'Male', '1990-12-31');
Run Code Online (Sandbox Code Playgroud)

有颜色:

  • 橙色表示创建表、插入、非空、主键、varchar 等词
  • 白色代表人物、身份证、名字、姓氏、性别等
  • 'Anne'、'Smith'、'jake@gmail.com' 等为绿色
  • bigserial 为紫色(由于某种原因,stackoverflow 的代码块上没有显示颜色)

也许通过扩展或通过 vscode 设置?

Chr*_*ris 9

对于语法突出显示,这似乎效果很好: https://marketplace.visualstudio.com/items? itemName=forbeslindesay.vscode-sql-template-literal

它的工作原理是激活前面带有 的模板文字的 SQL 语法突出显示sql,例如

const query = sql`SELECT * FROM articles;`
Run Code Online (Sandbox Code Playgroud)

然后,您需要使用具有sql标记功能的库,或者创建一个如下所示的虚拟库,以按预期传递模板字符串内容:

// TypeScript
const sql = (strings: TemplateStringsArray, ...expr: any[]) =>
  strings
    .map((str, index) => str + (expr.length > index ? String(expr[index]) : ''))
    .join('');

// ES6
const sql = (strings, ...expr) =>
  strings
    .map((str, index) => str + (expr.length > index ? String(expr[index]) : ''))
    .join('')
Run Code Online (Sandbox Code Playgroud)

还有一个具有更多花哨功能的替代扩展(Postgres 的语法检查),但模板文字方法相同。不过我自己还没有尝试过。