Language-tools: Erreur lors de l'utilisation de la nouvelle syntaxe CSS dans VS Code

Créé le 14 juin 2020  ·  6Commentaires  ·  Source: sveltejs/language-tools

Décrivez le bogue
J'ai rencontré une erreur lorsque j'utilise la nouvelle fonctionnalité de syntaxe CSS Media Queries Level 4 à VS Code dans le composant Svelte.

<style>
  <strong i="9">@media</strong> (width >= 768px) { // <--- error line
    .nav {
      padding: 16px 24px;
    }
  }
</style>

J'utilise la dernière version de Sapper :

    // ...
    "sapper": "^0.27.15",
    "svelte": "^3.23.2"
}

Mais Svelte linter m'affiche toujours cette erreur (voir aussi capture d'écran 1) :

Colon is expected. If you expect this syntax to work, here are some suggestions: 
If you use less/SCSS with `svelte-preprocessor`, did you add `lang="scss"`/`lang="less"` 
to you `style` tag? If you use SCSS, it may be necessary to add the path to your NODE 
runtime to the setting `svelte.language-server.runtime`, or use `sass` instead of `node-sass`.
Did you setup a `svelte.config.js`? See https://github.com/sveltejs/language-tools/tree/master/packages/svelte-vscode#using-with-preprocessors 
for more info.svelte(css-syntax-error)

OK, je vois cette erreur dans les fichiers *.css normaux, mais si je définis le paramètre de validation CSS VS Code css.validate sur false cette erreur a disparu.

J'essaie de définir svelte.plugin.css.diagnostics.enable sur false , mais je vois toujours le message css-syntax-error de Svelte (voir aussi capture d'écran 2).

Reproduire
Étapes pour reproduire le comportement :

  1. Ajouter une nouvelle syntaxe CSS à <style>...</style> dans le composant *.svelte
  2. Sauvegarder
  3. Voir l'erreur

Comportement prévisible
Aucune erreur après l'ajout d'une nouvelle syntaxe CSS.

Captures d'écran
Screenshot 2020-06-12 at 13 32 35

Screenshot 2020-06-13 at 13 04 54

Système (veuillez compléter les informations suivantes) :

  • Système d'exploitation : macOS 10.14.6
  • IDE : VS Code
  • Plugin/Package : Svelte Beta

Versions VS Code et Node :

Version: 1.46.0
Commit: a5d1cc28bb5da32ec67e86cc50f84c67cc690321
Date: 2020-06-10T08:59:06.977Z
Electron: 7.3.1
Chrome: 78.0.3904.130
Node.js: 12.8.1
V8: 7.8.279.23-electron.0
OS: Darwin x64 18.7.0

Contexte supplémentaire
Une solution possible, peut-être, permet d'ajouter une valeur spéciale à l'attribut <style lang="...">...</style> pour prendre en charge toutes les nouvelles fonctionnalités CSS, car il ne s'agit que d'un _mauvais problème UX/vue_.

Toute nouvelle syntaxe après npm run build traitée par le plugin postcss-media-minmax vers l'ancienne syntaxe CSS, comme :

<strong i="61">@media</strong> (width >= 768px) ---> <strong i="62">@media</strong> (min-width: 786px)
bug

Commentaire le plus utile

@jasonulu123 merci !

De plus, j'ai défini svelte.plugin.css.diagnostics.enable sur false pour supprimer cette erreur CSS :

) expectedcss(css-rparentexpected)

Screenshot 2020-06-14 at 15 42 10

Tous les 6 commentaires

Pouvez-vous essayer de configurer le prétraitement après cela et voir si l'erreur svelte existe toujours ? Cela devrait être similaire à votre configuration de construction, dans votre cas, cela devrait être postcss.
En ce qui concerne l'erreur css, nous utilisons le service de langage css de vscode, nous ne pouvons donc pas faire grand-chose tant qu'ils ne prennent pas en charge cette syntaxe.

@jasonulu123 salut ! Merci pour votre réponse.

Voici mon rollup.config.js pour Sapeur :

import resolve from "@rollup/plugin-node-resolve";
import replace from "@rollup/plugin-replace";
import commonjs from "@rollup/plugin-commonjs";
import svelte from "rollup-plugin-svelte";
import babel from "@rollup/plugin-babel";
import { terser } from "rollup-plugin-terser";

// Import svelte-preprocess
import sveltePreprocess from "svelte-preprocess";

// Import PostCSS plugins
import autoprefixer from "autoprefixer";
import pimport from "postcss-import";
import minmax from "postcss-media-minmax";
import csso from "postcss-csso";

import config from "sapper/config/rollup.js";
import pkg from "./package.json";

const mode = process.env.NODE_ENV;
const dev = mode === "development";
const legacy = !!process.env.SAPPER_LEGACY_BUILD;

const onwarn = (warning, onwarn) =>
  (warning.code === "CIRCULAR_DEPENDENCY" &&
    /[/\\]@sapper[/\\]/.test(warning.message)) ||
  onwarn(warning);

// Define svelte-preprocess
const preprocess = sveltePreprocess({
  postcss: {
    plugins: [pimport, minmax, autoprefixer, csso], // --> add PostCSS plugins
  },
});

export default {
  client: {
    input: config.client.input(),
    output: config.client.output(),
    plugins: [
      replace({
        "process.browser": true,
        "process.env.NODE_ENV": JSON.stringify(mode),
      }),
      svelte({
        dev,
        preprocess, // --> add sveltePreprocess
        hydratable: true,
        emitCss: true,
      }),
      resolve({
        browser: true,
        dedupe: ["svelte"],
      }),
      commonjs(),

      legacy &&
        babel({
          extensions: [".js", ".mjs", ".html", ".svelte"],
          babelHelpers: "runtime",
          exclude: ["node_modules/@babel/**"],
          presets: [
            [
              "@babel/preset-env",
              {
                targets: "> 0.25%, not dead",
              },
            ],
          ],
          plugins: [
            "@babel/plugin-syntax-dynamic-import",
            [
              "@babel/plugin-transform-runtime",
              {
                useESModules: true,
              },
            ],
          ],
        }),

      !dev &&
        terser({
          module: true,
        }),
    ],

    preserveEntrySignatures: false,
    onwarn,
  },

  server: {
    input: config.server.input(),
    output: config.server.output(),
    plugins: [
      replace({
        "process.browser": false,
        "process.env.NODE_ENV": JSON.stringify(mode),
      }),
      svelte({
        generate: "ssr",
        preprocess, // --> add sveltePreprocess
        dev,
      }),
      resolve({
        dedupe: ["svelte"],
      }),
      commonjs(),
    ],
    external: Object.keys(pkg.dependencies).concat(
      require("module").builtinModules ||
        Object.keys(process.binding("natives"))
    ),

    preserveEntrySignatures: "strict",
    onwarn,
  },

  serviceworker: {
    input: config.serviceworker.input(),
    output: config.serviceworker.output(),
    plugins: [
      resolve(),
      replace({
        "process.browser": true,
        "process.env.NODE_ENV": JSON.stringify(mode),
      }),
      commonjs(),
      !dev && terser(),
    ],

    preserveEntrySignatures: false,
    onwarn,
  },
};

Corrigez-moi s'il vous plaît si je me trompe, mais avec rollup.config.js je n'ai pas besoin de créer svelte.config.js fichier séparé sveltePreprocess({...}) ? 🤔

Si je définis l'attribut lang (ou type ) pour <style> à postcss (ou text/postcss ), je vois la même erreur et très coloration syntaxique étrange à tout le code CSS :

Screenshot 2020-06-14 at 13 32 23

Copiez simplement la section de prétraitement dans svelte.config.js ou déplacez-la vers svelte.config.js et exigez-la de votre configuration de build. Le serveur de langage utilise svelte pour compiler votre code en interne, il doit donc également savoir le prétraiter.

@jasonulu123 merci ! Cette erreur de résolution :

// svelte.config.js

const sveltePreprocess = require("svelte-preprocess");
const autoprefixer = require("autoprefixer");
const pimport = require("postcss-import");
const minmax = require("postcss-media-minmax");
const csso = require("postcss-csso");

module.exports = {
  preprocess: sveltePreprocess({
    postcss: {
      plugins: [pimport, minmax, autoprefixer, csso],
    },
  }),
};

Mais comment mettre en évidence la syntaxe en CSS normal, comme avant ?

Screenshot 2020-06-14 at 14 33 23

Si votre CSS n'a pas de syntaxe spécifique postcss. Vous pouvez supprimer l'attribut lang.

@jasonulu123 merci !

De plus, j'ai défini svelte.plugin.css.diagnostics.enable sur false pour supprimer cette erreur CSS :

) expectedcss(css-rparentexpected)

Screenshot 2020-06-14 at 15 42 10

Cette page vous a été utile?
0 / 5 - 0 notes