diff --git a/lib/parser.dart b/lib/parser.dart
index c516808..2e62271 100644
--- a/lib/parser.dart
+++ b/lib/parser.dart
@@ -2257,11 +2257,11 @@
         return _parseHex(' ${processTerm().text}', _makeSpan(start));
       case TokenKind.INTEGER:
         t = _next();
-        value = int.parse('${unary}${t.text}');
+        value = int.parse('$unary${t.text}');
         break;
       case TokenKind.DOUBLE:
         t = _next();
-        value = double.parse('${unary}${t.text}');
+        value = double.parse('$unary${t.text}');
         break;
       case TokenKind.SINGLE_QUOTE:
         value = processQuotedString(false);
@@ -2331,8 +2331,8 @@
           if (isChecked) {
             var propName = nameValue.name;
             var errMsg = TokenKind.isPredefinedName(propName)
-                ? 'Improper use of property value ${propName}'
-                : 'Unknown property value ${propName}';
+                ? 'Improper use of property value $propName'
+                : 'Unknown property value $propName';
             _warning(errMsg, _makeSpan(start));
           }
           return LiteralTerm(nameValue, nameValue.name, _makeSpan(start));
diff --git a/lib/src/analyzer.dart b/lib/src/analyzer.dart
index 6899796..6d33e25 100644
--- a/lib/src/analyzer.dart
+++ b/lib/src/analyzer.dart
@@ -50,7 +50,7 @@
     // Expand any @extend.
     _styleSheets.forEach((styleSheet) {
       var allExtends = AllExtends()..visitStyleSheet(styleSheet);
-      InheritExtends(_messages, allExtends)..visitStyleSheet(styleSheet);
+      InheritExtends(_messages, allExtends).visitStyleSheet(styleSheet);
     });
   }
 }
@@ -872,7 +872,7 @@
 /// @include.
 class MixinsAndIncludes extends Visitor {
   static void remove(StyleSheet styleSheet) {
-    MixinsAndIncludes()..visitStyleSheet(styleSheet);
+    MixinsAndIncludes().visitStyleSheet(styleSheet);
   }
 
   bool _nodesToRemove(node) =>
diff --git a/lib/src/tree_base.dart b/lib/src/tree_base.dart
index dc7aa76..db3a56c 100644
--- a/lib/src/tree_base.dart
+++ b/lib/src/tree_base.dart
@@ -69,7 +69,7 @@
   }
 
   void writeNode(String label, TreeNode? node) {
-    write('${label}: ');
+    write('$label: ');
     depth += 1;
     if (node != null) {
       node.visit(printer!);
@@ -81,11 +81,11 @@
 
   void writeValue(String label, value) {
     var v = toValue(value);
-    writeln('${label}: ${v}');
+    writeln('$label: $v');
   }
 
   void writeNodeList(String label, List<TreeNode>? list) {
-    writeln('${label} [');
+    writeln('$label [');
     if (list != null) {
       depth += 1;
       for (var node in list) {
diff --git a/lib/src/tree_printer.dart b/lib/src/tree_printer.dart
index 72f1223..0d18400 100644
--- a/lib/src/tree_printer.dart
+++ b/lib/src/tree_printer.dart
@@ -9,7 +9,7 @@
 /// Helper function to dump the CSS AST.
 String treeToDebugString(StyleSheet styleSheet, [bool useSpan = false]) {
   var to = TreeOutput();
-  _TreePrinter(to, useSpan)..visitTree(styleSheet);
+  _TreePrinter(to, useSpan).visitTree(styleSheet);
   return to.toString();
 }
 
@@ -392,7 +392,7 @@
     output.depth++;
     super.visitAttributeSelector(node);
     var tokenStr = node.matchOperatorAsTokenString();
-    output.writeValue('operator', '${node.matchOperator()} (${tokenStr})');
+    output.writeValue('operator', '${node.matchOperator()} ($tokenStr)');
     output.writeValue('value', node.valueToString());
     output.depth--;
   }
diff --git a/test/testing.dart b/test/testing.dart
index 2094420..e08b305 100644
--- a/test/testing.dart
+++ b/test/testing.dart
@@ -74,7 +74,7 @@
 
 /// Walks the style sheet tree does nothing; insures the basic walker works.
 void walkTree(StyleSheet ss) {
-  _cssVisitor..visitTree(ss);
+  _cssVisitor.visitTree(ss);
 }
 
 String dumpTree(StyleSheet ss) => treeToDebugString(ss);
