There is the option to use (~var x id) and (~literal lit-id), which you might have to use when making a macro that expands to a syntax-parse expression. If you want programs that make the most explicit sense possible, (~var x id) is better, but if you want programs that are convenient and readable, x:id looks better.
This means that you can still use syntax classes when they have prefixes with colons, for example:
#lang racket
(require (only-in syntax/parse ~literal ~var)
(prefix-in rkt: racket/base)
(prefix-in stxparse: syntax/parse))
(syntax->datum
(stxparse:syntax-parse #'(define x 3)
[((~literal rkt:define) (~var x stxparse:id) (~var v stxparse:expr))
#'(define-values [x] v)]))
So syntax/parse doesn't apply the colon special case within the ~var form or the ~literal form.
Although actually this works too:
#lang racket
(require (only-in syntax/parse ~literal ~var)
(prefix-in rkt: racket/base)
(prefix-in stxparse: syntax/parse))
(syntax->datum
(stxparse:syntax-parse #'(define x 3) #:literals (rkt:define)
[(rkt:define x:stxparse:id v:stxparse:expr)
#'(define-values [x] v)]))
Alex Knauth