Unexpected missing generic font family как исправить

Clearly describe the bug Thanks for great work of stylelint community. There is False positives for font-family in font-family-no-missing-generic-family-keyword(I'm sorry If this is not Bug). W...

Clearly describe the bug

Thanks for great work of stylelint community.

There is False positives for font-family in font-family-no-missing-generic-family-keyword(I’m sorry If this is not Bug).
When I specified font-family with "my_original_font_family_name" !important, stylelint showed me bellow error.

path/to/_my_original_fonts.scss
 23:16  ✖  Unexpected missing generic font family   font-family-no-missing-generic-family-keyword

But, font-family: "my_original_font_family_name" is defined by @font-face.

When I specified font-family with my_original_font_family_name !important(without ""), stylelint test is passed.

This issue is similar to #3033 ?

Which rule, if any, is the bug related to?

font-family-no-missing-generic-family-keyword

What CSS is needed to reproduce the bug?

/* scss */
@font-face {
  font-family: "my_original_font_family_name";
  src: font-url("my_original_font_family_name.eot?fooooo");
  src:
    font-url("my_original_font_family_name.eot?fooooo#iefix") format("embedded-opentype"),
    font-url("my_original_font_family_name.woff2?fooooo") format("woff2"),
    font-url("my_original_font_family_name.ttf?fooooo") format("truetype"),
    font-url("my_original_font_family_name.woff?fooooo") format("woff"),
    font-url("my_original_font_family_name.svg?fooooo#my_original_font_family_name") format("svg");
  font-weight: normal;
  font-style: normal;
}

[class^="icon-"],
[class*=" icon-"] {
  font-family: "my_original_font_family_name" !important;
}

What stylelint configuration is needed to reproduce the bug?

{
  "rules": {
    "font-family-no-missing-generic-family-keyword": true
  }
}

Which version of stylelint are you using?

9.9.0

How are you running stylelint: CLI, PostCSS plugin, Node API?

CLI with stylelint "**/*.scss" --config stylelint.config.js

Does the bug relate to non-standard syntax (e.g. SCSS, Less etc.)?

I guess No.

What did you expect to happen?

No warnings in this case.

What actually happened (e.g. what warnings or errors did you get)?

e.g. «The following warnings were flagged:»

path/to/_my_original_fonts.scss
 23:16  ✖  Unexpected missing generic font family   font-family-no-missing-generic-family-keyword

BUG

1.Not enough arguments.


Вышеупомянутая ошибка очень часто встречается в проектах, и все параметры инкапсулируются с помощью new Object [] {}. В частности, формат файла java, который декомпилирован из файла класса, такой же. Но если вы хотите устранить ошибки, просто используйте параметры напрямую, не используйте новую инкапсуляцию Object [] {}.

2.This branch can not be reached because the condition duplicates a previous condition in the same sequence of “if/else if” statements

Две ветви не могут быть одинаковыми в ветви if.

Просто удалите дубликаты.

3.Use try-with-resources or close this “FileInputStream” in a “finally” clause.

Сообщите, что ресурс не закрыт, вам нужно закрыть ресурс в finally, но закрыть ресурс в finally, и приглашение не стандартизировано. Следовательно, рекомендуемый способ написания — поместить код для создания потока ресурсов в try (), чтобы система автоматически закрывала ресурс без необходимости писать метод .close (), как показано

4.A “NullPointerException” could be thrown; “document” is nullable here.


Этот вид подсказки означает, что может быть исключение нулевого указателя и необходимо добавить обнаружение нулевого значения.

5.Cast one of the operands of this addition operation to a “double”.


Подсказка заключается в том, что преобразование типов следует выполнять перед выполнением операций. Ниже приведены некоторые приведенные им примеры норм и нарушений.

Видно, что это, по сути, строгое преобразование типа для запрашиваемого параметра. Как узнать, какой тип следует преобразовать? Вы можете щелкнуть соответствующий метод, чтобы узнать, какой тип параметра имеет, а затем принудительно установить параметр в этот тип. Например, второй параметр вышеупомянутого метода doubleTostring () имеет тип double, поэтому его можно принудительно использовать следующим образом:

6.emove or correct this useless self-assignment.


Приглашение предназначено для удаления или исправления этого бесполезного самостоятельного назначения. Взгляните на приведенный выше код, потому что кто должен ошибаться, поэтому я изменил его на temp2 [i] = temp1 [i]; он также устраняет запах

7.Save and re-use this “Random”.

Этот вид подсказки состоит в том, что случайные числа следует использовать повторно, и ссылка, которую он дал, выглядит следующим образом

Определите случайное значение в классе, а затем его можно будет повторно использовать в методе, но я попробовал этот метод и обнаружил, что он невозможен. Импорт следующих двух пакетов будет сообщать об ошибке, это должно быть Какую дополнительную банку нужно пощупать.

Итак, я нашел способ устранить ошибки. Как показано на рисунке ниже, это действительно сложно, ха-ха, но ошибка устранена.

8.Use an “instanceof” comparison instead.


Все вышеперечисленные коды сообщают об этой ошибке, предлагая не сравнивать классы по имени.
не требует, чтобы имена классов были уникальными, если они уникальны в пакете. Поэтому попытка определить тип объекта на основе имени класса — опасное занятие. Одна из опасностей заключается в том, что злоумышленники будут отправлять объекты с тем же именем, что и доверенный класс, для получения доверенного доступа.
Вместо этого следует использовать оператор instanceof или метод Class.isAssignableFrom () для проверки базового типа объекта.
Затем я использую isAssignableFrom () для устранения ошибки. Как показано ниже:

9.Prevent “int” promotion by adding “& 0xff” to this expression.


предлагает не использовать исходное значение байта в сочетании с побитовыми операциями. При чтении байтов для создания других исходных значений (например, целых или длинных целых чисел) значение байта будет автоматически увеличиваться, но Эта акция может иметь неожиданные результаты. Чтобы предотвратить такие неожиданные преобразования значений, используйте поразрядную сумму (&) для объединения байтового значения с 0xff (255), а затем отключите все старшие биты. Поэтому добавьте в конец «& 0xff», как показано на рисунке:

10.Make “df” an instance variable


сообщает, что небезопасные поля не должны быть статическими, поэтому просто удалите модификатор static впереди.

11.Either re-interrupt this method or rethrow the “InterruptedException”


Этот вид исключения прерывания, вам нужно добавить Thread.currentThread (). interrupt ();

12.Remove the unboxing from “Integer”


Подсказка состоит в том, что эта инкапсуляция целого числа является избыточной, поэтому вы можете напрямую использовать строгое преобразование типов.

13.Use another way to initialize this instance


Это приглашение инициализируется другими способами, не инициализируйте во время определения, измените его следующим образом:

В основном эти ошибки встречаются, и есть некоторые ошибки в css, измененные в соответствии с подсказками

14.Unexpected missing generic font family


Объедините эти два стиля тела в один, чтобы устранить ошибки и лазейки.

15.Unexpected duplicate “display”


Отображение дублируется, удалите его.

16.Unexpected unknown type selector “element”


Пустой стиль, удалите его напрямую.

17. Change this condition so that it does not always evaluate to “false”

(Измените это условие так, чтобы оно не всегда оценивалось как «ложное»)
Это ошибка, которая встречается во многих файлах веб-служб. Если файл веб-службы будет отфильтрован позже, это можно игнорировать. Но вы также можете удалить эту строку, obj не может быть нулевым, если (obj == null) return false; поэтому эта ошибка исчезла.

Две бойницы

1.Use a logger to log this exception


Этот тип подсказки заключается в том, что исключение следует распечатать в журнале.

2.‘password’ detected in this expression, review this potentially hard-coded credential


Сообщите, что пароль нельзя передать таким способом напрямую, это небезопасно. Но примеров нет. Я внес это изменение, и оно также может устранить лазейки. Как показано ниже:

3.Make areaList a static final constant or non-public and provide accessors if needed


Поля переменных класса не должны быть общедоступными. Поэтому измените модификатор общего доступа на другой модификатор, желательно частный.

4.Secure this “Transformer” by either disabling external DTDs or enabling secure processing.


предлагает защитить преобразователь XML. При создании javax.xml.transform.Transformer, но без включения «безопасной обработки» или создания его без отключения внешнего DTD, может возникнуть уязвимость внешнего объекта XML или внешнего объекта XSLT (XXE). Если внешний объект захвачен злоумышленником, это может привести к утечке конфиденциальных данных, отказу в обслуживании, подделке запросов на стороне сервера, сканированию портов с точки зрения машины, на которой расположен преобразователь, и другим системным воздействиям.
Измените следующее, чтобы устранить уязвимость:

5.Do something with the “boolean” value returned by “delete”.


напоминает, что когда включен код состояния операции, возвращаемое значение нельзя игнорировать. Другими словами, нельзя игнорировать результат удаления файла.
Итак, внесите следующие изменения, но хотя следующие изменения устраняют лазейки, они добавляют новые запахи.

Рекомендуется использовать подсказку запаха «java.nio.Files # delete» (squid: S4042). Вы должны использовать метод Files.delete () вместо удаления файлов между ними. Итак, последняя модификация:

6.Make this “public static userInfoUrl” field final


Переменные-члены этого «общедоступного статического» поля не должны быть изменены, поэтому его необходимо завершить, как показано ниже:

Есть еще несколько ошибок, которые нелегко исправить, поэтому на данный момент нет идеи

7.Change this method so it throws exceptions


Такой тип приглашения TrustManager не должен слепо принимать какой-либо сертификат. Пустая реализация интерфейса X509TrustManager обычно создается для разрешения подключений к хостам, которые не подписаны корневым центром сертификации. Такая реализация будет принимать любой сертификат, что делает приложение уязвимым для атак типа «злоумышленник в середине». Правильное решение — предоставить соответствующее хранилище доверенных сертификатов.

8.Use the recommended AES (Advanced Encryption Standard) instead.

Это исходное приглашение шифрования DES не должно использовать DES (стандарт шифрования данных) и DESede (3DES). Рекомендуется использовать AES. Однако изменение шифрования DES на шифрование AES устранило запах программы, но программа определенно неверна. Изменение метода шифрования определенно вызовет проблемы.

Три запаха

Слишком много специфических запахов, и я не устранил слишком много специфических запахов.Свойственный запах проекта обычно составляет несколько k, поэтому устранение одного или двух специфических запахов не влияет на основу, и есть слишком много специфических запахов.После устранения некоторых из них я не почувствовал, что Ощущение, что количество специфического запаха значительно уменьшилось, что привело к энтузиазму по устранению специфического запаха, не очень велико. А некоторые специфические запахи действительно трудно устранить: иногда, когда вы открываете файл, несколько тысяч строк кода все помечаются специфическими запахами. Просто сдался.

1.Replace the type specification in this constructor call with the diamond operator («<>»).


В Java 7 появился оператор ромба (<>), чтобы уменьшить многословие универсального кода. Например, теперь вы можете использовать <> для упрощения объявления конструктора, вместо того, чтобы объявлять тип List в его объявлении и его конструкторе, компилятор будет определять тип. следующее:

2.Add a default case to this switch


Нет значений по умолчанию и разрывов в образцах; хотя приведенный выше код не нарушает работу, проблем не возникнет. Но если однажды изменится, легко сделать ошибку, не возвращаясь.

3.Remove this empty statement.


Две точки с запятой, в коде много мест, которые кажутся такими, удалите лишние.

4.Remove this useless assignment to local variable “XXX”.


На изображении выше, если переменная определена, но не используется, этот запах будет устранен. Чтобы устранить этот запах, вам нужно увидеть, что делает переменная, и если она не работает, вы можете удалить ее. Если вы не меняете его по своему желанию, вы можете добавить журнал под ними, чтобы распечатать их, что также может устранить запах.

5.Directly append the argument of String.valueOf().


String.valueOf () не следует добавлять к String. Насколько я понимаю, результатом является строковый тип, а arerType — тип int. При склейке тип int будет автоматически преобразован в строку, поэтому в этом нет необходимости.

6.Define a constant instead of duplicating this literal “XXXX” 4 times.


Аналогично этому, когда неизменяемая строка появляется в файле несколько раз, эти строки должны быть извлечены как константы, чтобы облегчить будущую модификацию и обслуживание. Но, честно говоря, специфический запах извлечения констант действительно утомляет, и таких случаев в коде очень много.Я чувствую, что каждый проект или каждый модуль должен извлекать константный класс, чтобы модуль использовал эти постоянные строки напрямую. Получено из этого класса, но рабочая нагрузка немного тяжелая, ха-ха, я просто попытался извлечь константы из части настраиваемого отчета, но после ее выполнения это не продолжилось. Это было скучно, а рабочая нагрузка была большой.

Но я думаю, что эту работу лучше выполнить, чтобы она была удобна для будущего обслуживания.Постоянное изменение значения требует изменения только одного места, а не всех мест.

7.Use a StringBuilder instead.


Когда строка должна часто меняться, используйте stringBuilder вместо string. Здесь также есть странный запах: в некоторых местах кода используется StringBuffer, и его нужно преобразовать в StringBuilder. Поскольку Stringbuffer должен гарантировать поток Сейф, stringBuilder
Нет, поэтому stringBuilder более эффективен. Вызовет ли это проблемы с безопасностью потоков? Нет, поскольку это переменная, определенная внутри метода, она является потоком, закрытым для этого метода и не вызовет проблем с безопасностью потоков.

8.Reorder the modifiers to comply with the Java Language Specification.


Порядок модификаторов подсказок должен соответствовать спецификации языка Java, а ссылка на нее выглядит следующим образом:

Так что просто поместите модификатор static в final.

9.Declare “XXX” on a separate line.


При определении переменных по одной переменной в строке для удобного просмотра.

10.Return an empty collection instead of null.


Лучше не возвращать значение null напрямую, а возвращать пустые массивы и коллекции. Как показано ниже:

11.Use isEmpty() to check whether the collection is empty or not.


При оценке того, является ли коллекция пустой, не используйте size (). Рекомендуется использовать метод isEmpty (). следующее:

12.This block of commented-out lines of code should be removed


Этот тип можно удалить напрямую или использовать / *** / comment, если вы не хотите его удалять. Для однострочного типа вы можете удалить точку с запятой после него, чтобы избежать ошибки.

13.Remove the literal “false” boolean value


Логический текст не должен быть лишним. Нехорошо использовать истину или ложь, чтобы судить, если. Вы можете непосредственно судить по себе, следующим образом:

14.Add a private constructor to hide the implicit public one.


Если методы в классе являются статическими модифицированными статическими методами, вам необходимо определить непубличный конструктор для этого класса (добавить частный конструктор, чтобы скрыть неявный общедоступный конструктор) следующим образом :

15.Refactor this method to reduce its Cognitive Complexity from 55 to the 15 allowed.


Что касается специфического запаха сложности круга кода больше 15 и специфического запаха слишком длинного кода, честно говоря, хорошего способа нет. Вы можете только прочитать код, а затем, конечно, извлечь функцию. Функция не может одновременно выполнять то, что требует краткость кода.Функция выполняет только одну вещь, одноуровневый принцип. Но мы не можем просто ничего не делать только потому, что не можем этого сделать, мы все равно должны сделать этот шаг, сначала извлечь функцию, хотя принцип одноуровневости не достигается, но запах устраняется. Следующий код представляет собой простую функцию извлечения вышеперечисленного для устранения запаха.

16. По поводу большого количества веток стежка в коде.


Этот код выглядит очень раздутым и кажется особенно низким, но мы любим писать его, в том числе и меня, потому что это просто войти в книгу, не задумываясь. И, как показано на рисунке ниже, в 18 случаях запаха не сообщалось, поэтому он не был проверен на SonarQube, поэтому все сначала поменяют другой. Позже мои коллеги в терминале данных увидели следующий код, говоря, что код краткий, не означает, что его нельзя использовать. Еще образцы? Какое-то время я не знал, что ответить, могу только сказать, что стоимость модификации слишком велика, и ее сложно модифицировать. Но потом, после тщательного обдумывания, я тоже почувствовал себя очень подавленным, когда принял этот код.Тогда почему я не могу быть более требовательным к себе, поэтому я решил изменить этот код, узнав из него.

Я изменил эту часть кода, чтобы использовать тип перечисления, сначала создаю перечисление и заменяю все случаи соответствующими значениями перечисления, а затем создаю две переменные-члены и метод построения перечисления с двумя параметрами. Затем реализуйте методы получения этих двух переменных-членов, чтобы другие классы могли получить доступ. Как показано ниже:

Затем в исходном коде образца удалите эти ветви, создайте это перечисление и создайте соответствующее значение перечисления в соответствии с веткой, как показано ниже:


Вот и все, похоже, это удобнее, чем многие примеры образцов, и не так уж и мало.

17. Есть и другие способы устранения запаха. Прямое отображение






Две ветки абсолютно одинаковы, вам нужно удалить одну из них. Тогда цикломатическая сложность метода getsql () с множеством if-else if должна быть превышена. Я не знаю, как сделать здесь лучший метод, но я делю все на несколько if-else if Методы. Но это может только устранить запахи и сделать код менее читабельным.



Если условный оператор представляет собой одну строку, вам необходимо использовать отступ.






18. Есть некоторые специфические запахи, которые не знают, как их удалить.



Есть много специфических запахов, и их определенно больше. Сначала можно записать неясные или неясные специфические запахи. Во-первых, удалите запахи, которые легко и легко удалить. Он должен соответствовать стандарту. Что касается трудноудаляемых запахов, мы можем обсудить, как их удалить позже.

question

stylelintCheck the error as follows:

115:24 × Unexpected missing generic font family font-family-no-missing-generic-family-keyword

Translation into: Universal font family with accidental loss …
Meaning: No universal fonts are missing in the list of font names used

why

Should be used at leastfont-family Add a universal font name to the list, because it cannot guarantee that the user’s computer has been installed in the computer’s computer, and it cannot be used.@font-face The provided font movement can be correctly download. Provide universal fonts to make browsers use a relatively close alternative font without getting the best font.

Solution

Add a universal font behind the current font.

FONT-FAMILY syntax

/ * A font name and a universal font name */
font-family: "Gill Sans Extrabold", sans-serif;
font-family: "Goudy Bookletter 1911", sans-serif;
 
/ * Only one universal font name */
font-family: serif;
font-family: sans-serif;
font-family: monospace;
font-family: cursive;
font-family: fantasy;
font-family: system-ui;
font-family: emoji;
font-family: math;
font-family: fangsong;
 
/ * Global value */
font-family: inherit;
font-family: initial;
font-family: unset;

Attributes font-family List one or more fonts separated by comma. Each font<family-name> or <generic-name> Value specifies.
The following example lists two fonts, the first of which is<family-name>The second is<generic-name>

font-family: "Gill Sans Extrabold", sans-serif;

FONT-FAMILY

  • <family-name>: The name of a font family. For example, «Times» and «Helvetica» are font names. The font name can contain space, but the quotation marks should be used when the space is included.
  • <generic-name>: GM font names are a alternative mechanism that gives better fonts when the specified font is not available. The name of the general font family is keywords, so the number cannot be added. At the end of the list, there should be at least one universal font name. The following is the possible value of this attribute and their definition.
  • serif:There are special decorative lines or sides with a sterilization font.

For example: Lucida Bright, Lucida Fax, Palatino, «Palatino LINOTYPE», Palladio, «Urw Palladio», Serif.

  • sans-serif: No sterilization font, that is, the ending of the stroke is a smooth font.

For example, «Open Sans», «Fira Sans», «Lucida Sans», «Lucida Sans University», «Trebuchet MS», «Liberation Sans», «Nimbus Sans L», Sans-Serif.

  • monospace:The width font, that is, the width of each word in the font is the same.

For example, «Fira Mono», «Dejavu Sans Mono», Menlo, Consolas, «Liberation Mono», Monaco, «Lucida Console», Monospace.

  • cursive:Cursive font. Some of these fonts have strokes, and some have special oblique effects. Because this type of font usually has a little effect, it will give people a handwritten feeling.

For example, «Brush Script MT», «Brush Script STD», «Lucida Calligraphy», «Lucida Handwriting», «Apple Chancery», CURSIVE.

  • fantasy: Fantasy fonts are mainly fonts with special artistic effects.

For example, Papyrus, Herculanum, Party Let, Curlz Mt, Harrington, Fantasy.

  • system-ui:The default user interface font obtained from the platform where the browser is located. Due to the large differences between the typography habits around the world, this universal option is Provided for Typefaces that do n’t map Cleanly into the Other Geneics.

  • math:Font designed for special style problems for displaying mathematical characters: support the bidding and bidding, cross -line brackets, nested expressions, and Double Struck Glyphs with different meanings.

  • emoji: Fonts specifically used to present emoji emoticons.

  • fangsong: A Chinese character font, between Song style and regular body. This font is often used in certain government documents.

Effective font name

The name of the body or the quotes includes a string, or one or more legitimate identifiers that do not include quotes.The word means that at the beginning of the font name without quotation marks, the punctuation symbol characters and digital characters cannot be used.
For example, the following statement is effective:

font-family: "Gill Sans Extrabold", sans-serif;
font-family: "Goudy Bookletter 1911", sans-serif;

The following statement isInvalid

font-family: Goudy Bookletter 1911, sans-serif;
font-family: Red/Black, sans-serif;
font-family: "Lucida" Grande, sans-serif;
font-family: Ahem!, sans-serif;
font-family: [email protected], sans-serif;
font-family: #POUND, sans-serif;
font-family: Hawaii 5-0, sans-serif;

Official documentation

font-family-no-missing-generic-family-keyword:https://stylelint.io/user-guide/rules/list/font-family-no-missing-generic-family-keyword

font-family:https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-family

Понравилась статья? Поделить с друзьями:
  • Unexpected matlab expression как исправить
  • Unexpected mark stack overflow как исправить
  • Unexpected mark stack overflow fatal error in gc
  • Unexpected error detected check the tests output pane for details
  • Unexpected indentation как исправить