microsoft / microsoft/vscode-cpptools

Intermittent and incorrect highlighting of a define macro as an unkown

Aperta
#7,195 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug IntelliSense cache Language Service more votes needed verified Visual Studio
Lingua principale
TypeScript
Stelle
6.2k
Fork
1.7k
Merge medio
14h 46m
PR unite (30g)
61

Descrizione

Type: LanguageService

Describe the bug

  • OS and Version: CentOS7.8
  • VS Code Version: 1.53.1
  • C/C++ Extension Version: 1.3.0-insider
  • Other extensions you installed (and if the issue persists after disabling them): Git Graph, Todo Tree, GitHub - and no effect
  • Does this issue involve using SSH remote to run the extension on a remote machine?: No
  • A clear and concise description of what the bug is, including information about the workspace (i.e. is the workspace a single project or multiple projects, size of the project, etc).
    Incorrectly identifying a macro define as unknown, but still allows peeking it.

Steps to reproduce

  1. Open a new file jm.c
  2. Paste the below code
  3. Create a ide5.h file that is empty
  4. Create a emptylist.h with one-line entry: "#define EMPTY_LIST_A {} "
  5. Any edit to jm.c will highlight the EMPTY_LIST_A as unknown
// Empty File
#include "ide5.h"

#define SOME_DEFINE
#ifdef SOME_DEFINE
  static int somevariable = 1 ;
#else
#endif

// Define EMPTY_LIST_A as {} : #define EMPTY_LIST_A     {}
#include "emptylist.h"

static myListA[5] = {};
static myListB[5] = EMPTY_LIST_A ;

Expected behavior

I expected that it would highlight EMPTY_LIST_A as a macro and show its definition, not squiggle underline it. However the squiggle comes and goes depending on unrelated lines or even blank spaces.

Logs
cpptools/didChangeCppProperties
Attempting to get defaults from C compiler in "compilerPath" property: '/usr/bin/clang'
Compiler query command line: "/usr/bin/clang" -std=c99 -Wp,-v -E -dD -x c -m64 -fno-blocks /dev/null
terminating child process: 61887
Code browsing service initialized
Attempting to get defaults from C++ compiler in "compilerPath" property: '/usr/bin/clang'
Compiler query command line: "/usr/bin/clang" -std=c++98 -Wp,-v -E -dD -x c++ -m64 -fno-blocks /dev/null
terminating child process: 61890
  Folder: /include/ will be indexed
  Folder: /usr/include/ will be indexed
  Folder: /usr/lib/clang/3.4.2/include/ will be indexed
  Folder: /usr/local/include/ will be indexed
  Folder: /home/lmurray/fpgaIDE/VSCodeBug/ will be indexed
Populate include completion cache.
Discovering files...
  Processing folder (recursive): /include/
  Processing folder (recursive): /usr/include/
  Processing folder (recursive): /usr/lib/clang/3.4.2/include/
  Processing folder (recursive): /usr/local/include/
  Processing folder (recursive): /home/lmurray/fpgaIDE/VSCodeBug/
  Discovering files: 14624 file(s) processed
  0 file(s) removed from database
Done discovering files.
Parsing remaining files...
  Parsing: 0 files(s) processed
Done parsing remaining files.
textDocument/didOpen: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/activeDocumentChange: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/textEditorSelectionChange
cpptools/getDocumentSymbols: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 2)
cpptools/textEditorSelectionChange
cpptools/getDocumentSymbols
sending compilation args for /home/lmurray/fpgaIDE/VSCodeBug/jm.c
  include: /usr/local/include
  include: /usr/lib/clang/3.4.2/include
  include: /include
  include: /usr/include
  define: __llvm__=1
  define: __clang__=1
  define: __clang_major__=3
  define: __clang_minor__=4
  define: __clang_patchlevel__=2
  define: __clang_version__="3.4.2 (tags/RELEASE_34/dot2-final)"
  define: __GNUC_MINOR__=2
  define: __GNUC_PATCHLEVEL__=1
  define: __GNUC__=4
  define: __GXX_ABI_VERSION=1002
  define: __ATOMIC_RELAXED=0
  define: __ATOMIC_CONSUME=1
  define: __ATOMIC_ACQUIRE=2
  define: __ATOMIC_RELEASE=3
  define: __ATOMIC_ACQ_REL=4
  define: __ATOMIC_SEQ_CST=5
  define: __PRAGMA_REDEFINE_EXTNAME=1
  define: __VERSION__="4.2.1 Compatible Clang 3.4.2 (tags/RELEASE_34/dot2-final)"
  define: __STRICT_ANSI__=1
  define: __CONSTANT_CFSTRINGS__=1
  define: __GXX_RTTI=1
  define: __ORDER_LITTLE_ENDIAN__=1234
  define: __ORDER_BIG_ENDIAN__=4321
  define: __ORDER_PDP_ENDIAN__=3412
  define: __BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__
  define: _LP64=1
  define: __LP64__=1
  define: __CHAR_BIT__=8
  define: __SCHAR_MAX__=127
  define: __SHRT_MAX__=32767
  define: __INT_MAX__=2147483647
  define: __LONG_MAX__=9223372036854775807L
  define: __LONG_LONG_MAX__=9223372036854775807LL
  define: __WCHAR_MAX__=2147483647
  define: __INTMAX_MAX__=9223372036854775807L
  define: __SIZE_MAX__=18446744073709551615UL
  define: __SIZEOF_DOUBLE__=8
  define: __SIZEOF_FLOAT__=4
  define: __SIZEOF_INT__=4
  define: __SIZEOF_LONG__=8
  define: __SIZEOF_LONG_DOUBLE__=16
  define: __SIZEOF_LONG_LONG__=8
  define: __SIZEOF_POINTER__=8
  define: __SIZEOF_SHORT__=2
  define: __SIZEOF_PTRDIFF_T__=8
  define: __SIZEOF_SIZE_T__=8
  define: __SIZEOF_WCHAR_T__=4
  define: __SIZEOF_WINT_T__=4
  define: __SIZEOF_INT128__=16
  define: __INTMAX_TYPE__=long int
  define: __UINTMAX_TYPE__=long unsigned int
  define: __INTMAX_WIDTH__=64
  define: __PTRDIFF_TYPE__=long int
  define: __PTRDIFF_WIDTH__=64
  define: __INTPTR_TYPE__=long int
  define: __INTPTR_WIDTH__=64
  define: __SIZE_TYPE__=long unsigned int
  define: __SIZE_WIDTH__=64
  define: __WCHAR_TYPE__=int
  define: __WCHAR_WIDTH__=32
  define: __WINT_TYPE__=unsigned int
  define: __WINT_WIDTH__=32
  define: __SIG_ATOMIC_WIDTH__=32
  define: __CHAR16_TYPE__=unsigned short
  define: __CHAR32_TYPE__=unsigned int
  define: __FLT_DENORM_MIN__=1.40129846e-45F
  define: __FLT_HAS_DENORM__=1
  define: __FLT_DIG__=6
  define: __FLT_EPSILON__=1.19209290e-7F
  define: __FLT_HAS_INFINITY__=1
  define: __FLT_HAS_QUIET_NAN__=1
  define: __FLT_MANT_DIG__=24
  define: __FLT_MAX_10_EXP__=38
  define: __FLT_MAX_EXP__=128
  define: __FLT_MAX__=3.40282347e+38F
  define: __FLT_MIN_10_EXP__=(-37)
  define: __FLT_MIN_EXP__=(-125)
  define: __FLT_MIN__=1.17549435e-38F
  define: __DBL_DENORM_MIN__=4.9406564584124654e-324
  define: __DBL_HAS_DENORM__=1
  define: __DBL_DIG__=15
  define: __DBL_EPSILON__=2.2204460492503131e-16
  define: __DBL_HAS_INFINITY__=1
  define: __DBL_HAS_QUIET_NAN__=1
  define: __DBL_MANT_DIG__=53
  define: __DBL_MAX_10_EXP__=308
  define: __DBL_MAX_EXP__=1024
  define: __DBL_MAX__=1.7976931348623157e+308
  define: __DBL_MIN_10_EXP__=(-307)
  define: __DBL_MIN_EXP__=(-1021)
  define: __DBL_MIN__=2.2250738585072014e-308
  define: __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L
  define: __LDBL_HAS_DENORM__=1
  define: __LDBL_DIG__=18
  define: __LDBL_EPSILON__=1.08420217248550443401e-19L
  define: __LDBL_HAS_INFINITY__=1
  define: __LDBL_HAS_QUIET_NAN__=1
  define: __LDBL_MANT_DIG__=64
  define: __LDBL_MAX_10_EXP__=4932
  define: __LDBL_MAX_EXP__=16384
  define: __LDBL_MAX__=1.18973149535723176502e+4932L
  define: __LDBL_MIN_10_EXP__=(-4931)
  define: __LDBL_MIN_EXP__=(-16381)
  define: __LDBL_MIN__=3.36210314311209350626e-4932L
  define: __POINTER_WIDTH__=64
  define: __WINT_UNSIGNED__=1
  define: __INT8_TYPE__=char
  define: __INT16_TYPE__=short
  define: __INT32_TYPE__=int
  define: __INT64_TYPE__=long int
  define: __INT64_C_SUFFIX__=L
  define: __USER_LABEL_PREFIX__=
  define: __FINITE_MATH_ONLY__=0
  define: __GNUC_STDC_INLINE__=1
  define: __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1
  define: __GCC_ATOMIC_BOOL_LOCK_FREE=2
  define: __GCC_ATOMIC_CHAR_LOCK_FREE=2
  define: __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2
  define: __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2
  define: __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2
  define: __GCC_ATOMIC_SHORT_LOCK_FREE=2
  define: __GCC_ATOMIC_INT_LOCK_FREE=2
  define: __GCC_ATOMIC_LONG_LOCK_FREE=2
  define: __GCC_ATOMIC_LLONG_LOCK_FREE=2
  define: __GCC_ATOMIC_POINTER_LOCK_FREE=2
  define: __NO_INLINE__=1
  define: __FLT_EVAL_METHOD__=0
  define: __FLT_RADIX__=2
  define: __DECIMAL_DIG__=21
  define: __amd64__=1
  define: __amd64=1
  define: __x86_64=1
  define: __x86_64__=1
  define: __k8=1
  define: __k8__=1
  define: __tune_k8__=1
  define: __LITTLE_ENDIAN__=1
  define: __REGISTER_PREFIX__=
  define: __NO_MATH_INLINES=1
  define: __SSE2__=1
  define: __SSE2_MATH__=1
  define: __SSE__=1
  define: __SSE_MATH__=1
  define: __MMX__=1
  define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1
  define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1
  define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1
  define: __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1
  define: __unix=1
  define: __unix__=1
  define: __linux=1
  define: __linux__=1
  define: __gnu_linux__=1
  define: __ELF__=1
  define: __STDC__=1
  define: __STDC_HOSTED__=1
  define: __STDC_VERSION__=199901L
  define: __STDC_UTF_16__=1
  define: __STDC_UTF_32__=1
  other: --clang
  other: --clang_version=30402
  stdver: c99
  intelliSenseMode: linux-clang-x64
Checking for syntax errors: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
Queueing IntelliSense update for files in translation unit of: /home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/getSemanticTokens: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 3)
cpptools/getDocumentSymbols: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 4)
cpptools/getDocumentSymbols
cpptools/getCodeActions: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 5)
cpptools/getFoldingRanges: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 6)
cpptools/finishUpdateSquiggles
Error squiggle count: 1
terminating child process: 61915
Update IntelliSense time (sec): 0.276
cpptools/getFoldingRanges: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 7)
cpptools/getCodeActions: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 8)
idle loop: reparsing the active document
Checking for syntax errors: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
Queueing IntelliSense update for files in translation unit of: /home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/finishUpdateSquiggles
Error squiggle count: 1
Update IntelliSense time (sec): 0.254
cpptools/getSemanticTokens: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 9)
cpptools/getFoldingRanges: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 10)
cpptools/getCodeActions: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 11)
cpptools/getDocumentSymbols: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 12)
cpptools/getDocumentSymbols
cpptools/getDocumentSymbols: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 13)
cpptools/activeDocumentChange: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/textEditorSelectionChange
cpptools/getDocumentSymbols
cpptools/getFoldingRanges: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 14)
cpptools/getCodeActions: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 15)
idle loop: reparsing the active document
Checking for syntax errors: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c
Queueing IntelliSense update for files in translation unit of: /home/lmurray/fpgaIDE/VSCodeBug/jm.c
cpptools/finishUpdateSquiggles
Error squiggle count: 1
Update IntelliSense time (sec): 0.254
cpptools/getSemanticTokens: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 16)
cpptools/getFoldingRanges: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 17)
cpptools/getCodeActions: file:///home/lmurray/fpgaIDE/VSCodeBug/jm.c (id: 18)

Screenshots

image

Additional context

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema con jm.c, ide5.h vuoto ed emptylist.h contenente EMPTY_LIST_A, utilizzando la configurazione riportata con CentOS 7.8, VS Code 1.53.1 e l'estensione C/C++ 1.3.0-insider. Inizia dall'output di C/C++: Log Diagnostics e dai log del language-server, quindi traccia il comportamento di semantic-token e squiggle. Il lavoro è completato quando EMPTY_LIST_A viene riconosciuto costantemente come macro, può essere visualizzato con Peek e non viene sottolineato erroneamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
c, cpp, typescript, vscode
Ambito
developer-experience, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.